summaryrefslogtreecommitdiff
path: root/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http
diff options
context:
space:
mode:
Diffstat (limited to 'eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http')
-rw-r--r--eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientFactory.java168
-rw-r--r--eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpUtils.java23
-rw-r--r--eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/pvp/PvpRProfileHttpHeaders.java86
3 files changed, 213 insertions, 64 deletions
diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientFactory.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientFactory.java
index 647c0636..07522b56 100644
--- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientFactory.java
+++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpClientFactory.java
@@ -4,6 +4,8 @@ import java.security.KeyStore;
import java.security.Provider;
import java.util.HashMap;
import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.TimeUnit;
import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
@@ -23,6 +25,7 @@ import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.config.SocketConfig;
+import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
@@ -33,10 +36,12 @@ import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultRedirectStrategy;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.protocol.HttpContext;
import org.apache.http.ssl.SSLContexts;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
@@ -65,10 +70,10 @@ public class HttpClientFactory implements IHttpClientFactory {
public static final String PROP_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_CONNECTION =
"client.http.connection.timeout.connection";
public static final String PROP_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_REQUEST =
- "client.http.connection.timeout.request";
- public static final String PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_COUNT =
+ "client.http.connection.timeout.request";
+ public static final String PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_COUNT =
"client.http.connection.retry.count";
- public static final String PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_POST =
+ public static final String PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_POST =
"client.http.connection.retry.post";
public static final String PROP_CONFIG_CLIENT_HTTP_SSL_HOSTNAMEVERIFIER_TRUSTALL =
"client.http.ssl.hostnameverifier.trustall";
@@ -97,9 +102,14 @@ public class HttpClientFactory implements IHttpClientFactory {
public static final String DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_POOL_MAXPERROUTE = "100";
public static final String DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_COUNT = "3";
public static final String DEFAUTL_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_POST = String.valueOf(false);
+
+ public static final int DEFAULT_CLEANUP_RUNNER_TIME = 30000;
+ public static final int DEFAULT_CLEANUP_IDLE_TIME = 60;
+
private String defaultConfigurationId = null;
- private final Map<String, HttpClientBuilder> availableBuilders = new HashMap<>();
+ private final Map<String, Pair<HttpClientBuilder, HttpClientConnectionManager>>
+ availableBuilders = new HashMap<>();
/*
* (non-Javadoc)
@@ -114,7 +124,7 @@ public class HttpClientFactory implements IHttpClientFactory {
@Override
public CloseableHttpClient getHttpClient(final boolean followRedirects) {
- return availableBuilders.get(defaultConfigurationId).setRedirectStrategy(
+ return availableBuilders.get(defaultConfigurationId).getFirst().setRedirectStrategy(
buildRedirectStrategy(followRedirects)).build();
}
@@ -124,30 +134,31 @@ public class HttpClientFactory implements IHttpClientFactory {
log.trace("Build http client for: {}", config.getFriendlyName());
HttpClientBuilder builder = null;
if (availableBuilders.containsKey(config.getUuid())) {
- builder = availableBuilders.get(config.getUuid());
+ builder = availableBuilders.get(config.getUuid()).getFirst();
} else {
log.debug("Initialize new http-client builder for: {}", config.getFriendlyName());
- //validate configuration object
+ // validate configuration object
config.validate();
builder = HttpClients.custom();
-
- //inject request configuration
+
+ // inject request configuration
builder.setDefaultRequestConfig(buildDefaultRequestConfig());
injectInternalRetryHandler(builder, config);
-
- //inject basic authentication infos
+
+ // inject basic authentication infos
injectBasicAuthenticationIfRequired(builder, config);
- //inject authentication if required
+ // inject authentication if required
final LayeredConnectionSocketFactory sslConnectionFactory = getSslContext(config);
// set pool connection if required
- injectDefaultConnectionPoolIfRequired(builder, sslConnectionFactory);
+ HttpClientConnectionManager connectionManager
+ = injectConnectionManager(builder, sslConnectionFactory);
- availableBuilders.put(config.getUuid(), builder);
+ availableBuilders.put(config.getUuid(), Pair.newInstance(builder, connectionManager));
}
@@ -156,27 +167,45 @@ public class HttpClientFactory implements IHttpClientFactory {
}
- private void injectInternalRetryHandler(HttpClientBuilder builder, HttpClientConfiguration config) {
+ /**
+ * Worker that closes expired connections or connections that in idle
+ * for more than DEFAULT_CLEANUP_IDLE_TIME seconds.
+ *
+ */
+ @Scheduled(fixedDelay = DEFAULT_CLEANUP_RUNNER_TIME)
+ private void httpConnectionPoolCleaner() {
+ log.trace("Starting http connection-pool eviction policy ... ");
+ for (final Entry<String, Pair<HttpClientBuilder, HttpClientConnectionManager>> el
+ : availableBuilders.entrySet()) {
+ log.trace("Checking connections of http-client: {}", el.getKey());
+ el.getValue().getSecond().closeExpiredConnections();
+ el.getValue().getSecond().closeIdleConnections(DEFAULT_CLEANUP_IDLE_TIME, TimeUnit.SECONDS);
+
+ }
+
+ }
+
+ private void injectInternalRetryHandler(HttpClientBuilder builder, HttpClientConfiguration config) {
if (config.getHttpErrorRetryCount() > 0) {
- log.info("Set HTTP error-retry to {} for http-client: {}",
+ log.info("Set HTTP error-retry to {} for http-client: {}",
config.getHttpErrorRetryCount(), config.getFriendlyName());
builder.setRetryHandler(new EaafHttpRequestRetryHandler(
- config.getHttpErrorRetryCount(),
- config.isHttpErrorRetryPost()));
-
+ config.getHttpErrorRetryCount(),
+ config.isHttpErrorRetryPost()));
+
if (config.getServiceUnavailStrategy() != null) {
log.debug("HttpClient configuration: {} set custom ServiceUnavailableRetryStrategy: {}",
config.getFriendlyName(), config.getServiceUnavailStrategy().getClass().getName());
builder.setServiceUnavailableRetryStrategy(config.getServiceUnavailStrategy());
-
+
}
-
+
} else {
log.info("Disable HTTP error-retry for http-client: {}", config.getFriendlyName());
builder.disableAutomaticRetries();
-
+
}
-
+
}
@PostConstruct
@@ -190,8 +219,8 @@ public class HttpClientFactory implements IHttpClientFactory {
// set default request configuration
defaultHttpClientBuilder.setDefaultRequestConfig(buildDefaultRequestConfig());
injectInternalRetryHandler(defaultHttpClientBuilder, defaultHttpClientConfig);
-
- //inject http basic authentication
+
+ // inject http basic authentication
injectBasicAuthenticationIfRequired(defaultHttpClientBuilder, defaultHttpClientConfig);
// inject authentication if required
@@ -199,11 +228,13 @@ public class HttpClientFactory implements IHttpClientFactory {
getSslContext(defaultHttpClientConfig);
// set pool connection if required
- injectDefaultConnectionPoolIfRequired(defaultHttpClientBuilder, sslConnectionFactory);
+ HttpClientConnectionManager connectionManager
+ = injectConnectionManager(defaultHttpClientBuilder, sslConnectionFactory);
- //set default http client builder
+ // set default http client builder
defaultConfigurationId = defaultHttpClientConfig.getUuid();
- availableBuilders.put(defaultConfigurationId, defaultHttpClientBuilder);
+ availableBuilders.put(defaultConfigurationId,
+ Pair.newInstance(defaultHttpClientBuilder, connectionManager));
}
@@ -239,13 +270,12 @@ public class HttpClientFactory implements IHttpClientFactory {
PROP_CONFIG_CLIENT_HTTP_SSL_HOSTNAMEVERIFIER_TRUSTALL, false));
config.setHttpErrorRetryCount(Integer.parseInt(basicConfig.getBasicConfiguration(
- PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_COUNT,
+ PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_COUNT,
DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_COUNT)));
config.setHttpErrorRetryPost(Boolean.parseBoolean(basicConfig.getBasicConfiguration(
- PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_POST,
+ PROP_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_POST,
DEFAUTL_CONFIG_CLIENT_HTTP_CONNECTION_RETRY_POST)));
-
-
+
// validate configuration object
config.validate();
@@ -280,7 +310,8 @@ public class HttpClientFactory implements IHttpClientFactory {
SSLContext sslContext = null;
if (httpClientConfig.getAuthMode().equals(HttpClientConfiguration.ClientAuthMode.SSL)) {
log.debug("Open keyStore with type: {}", httpClientConfig.getKeyStoreConfig().getKeyStoreType());
- final Pair<KeyStore, Provider> keyStore = keyStoreFactory.buildNewKeyStore(httpClientConfig.getKeyStoreConfig());
+ final Pair<KeyStore, Provider> keyStore = keyStoreFactory.buildNewKeyStore(httpClientConfig
+ .getKeyStoreConfig());
log.trace("Injecting SSL client-authentication into http client ... ");
sslContext = HttpUtils.buildSslContextWithSslClientAuthentication(keyStore,
@@ -290,7 +321,7 @@ public class HttpClientFactory implements IHttpClientFactory {
} else {
log.trace("Initializing default SSL Context ... ");
sslContext = SSLContexts.createDefault();
-
+
}
// set hostname verifier
@@ -308,48 +339,37 @@ public class HttpClientFactory implements IHttpClientFactory {
}
- private void injectDefaultConnectionPoolIfRequired(
+ @Nonnull
+ private HttpClientConnectionManager injectConnectionManager(
HttpClientBuilder builder, final LayeredConnectionSocketFactory sslConnectionFactory) {
if (basicConfig.getBasicConfigurationBoolean(PROP_CONFIG_CLIENT_HTTP_CONNECTION_POOL_USE,
true)) {
- PoolingHttpClientConnectionManager pool;
-
- // set socketFactoryRegistry if SSLConnectionFactory is Set
- if (sslConnectionFactory != null) {
- final Registry<ConnectionSocketFactory> socketFactoryRegistry =
- RegistryBuilder.<ConnectionSocketFactory>create()
- .register("http", PlainConnectionSocketFactory.getSocketFactory())
- .register("https", sslConnectionFactory).build();
- log.trace("Inject SSLSocketFactory into pooled connection");
- pool = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
-
- } else {
- pool = new PoolingHttpClientConnectionManager();
-
- }
-
- pool.setDefaultMaxPerRoute(Integer.parseInt(
+ PoolingHttpClientConnectionManager connectionPool
+ = new PoolingHttpClientConnectionManager(getDefaultRegistry(sslConnectionFactory));
+ connectionPool.setDefaultMaxPerRoute(Integer.parseInt(
basicConfig.getBasicConfiguration(PROP_CONFIG_CLIENT_HTTP_CONNECTION_POOL_MAXPERROUTE,
DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_POOL_MAXPERROUTE)));
- pool.setMaxTotal(Integer.parseInt(
+ connectionPool.setMaxTotal(Integer.parseInt(
basicConfig.getBasicConfiguration(PROP_CONFIG_CLIENT_HTTP_CONNECTION_POOL_MAXTOTAL,
DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_POOL_MAXTOTAL)));
-
- pool.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(Integer.parseInt(
+ connectionPool.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(Integer.parseInt(
basicConfig.getBasicConfiguration(PROP_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_SOCKET,
DEFAULT_CONFIG_CLIENT_HTTP_CONNECTION_TIMEOUT_SOCKET))
* 1000).build());
+ builder.setConnectionManager(connectionPool);
+ log.debug("Initalize http-client pool with, maxTotal: {} maxPerRoute: {}",
+ connectionPool.getMaxTotal(), connectionPool.getDefaultMaxPerRoute());
+ return connectionPool;
+
+ } else {
+ log.debug("Building http-client without Connection-Pool ... ");
+ final BasicHttpClientConnectionManager basicPool = new BasicHttpClientConnectionManager(
+ getDefaultRegistry(sslConnectionFactory));
+ builder.setConnectionManager(basicPool);
+ return basicPool;
- builder.setConnectionManager(pool);
- log.debug("Initalize http-client pool with, maxTotal: {} maxPerRoute: {}", pool.getMaxTotal(),
- pool.getDefaultMaxPerRoute());
-
- } else if (sslConnectionFactory != null) {
- log.trace("Inject SSLSocketFactory without connection pool");
- builder.setSSLSocketFactory(sslConnectionFactory);
-
}
-
+
}
private RequestConfig buildDefaultRequestConfig() {
@@ -392,5 +412,25 @@ public class HttpClientFactory implements IHttpClientFactory {
return redirectStrategy;
}
+
+ private static Registry<ConnectionSocketFactory> getDefaultRegistry(
+ final LayeredConnectionSocketFactory sslConnectionFactory) {
+ final RegistryBuilder<ConnectionSocketFactory> builder =
+ RegistryBuilder.<ConnectionSocketFactory>create()
+ .register("http", PlainConnectionSocketFactory.getSocketFactory());
+
+ if (sslConnectionFactory != null) {
+ log.trace("Inject own SSLSocketFactory into pooled connection");
+ builder.register("https", sslConnectionFactory);
+
+ } else {
+ log.trace("Inject default SSLSocketFactory into pooled connection");
+ builder.register("https", SSLConnectionSocketFactory.getSocketFactory());
+
+ }
+
+ return builder.build();
+
+ }
}
diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpUtils.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpUtils.java
index 81ebe1fe..10555822 100644
--- a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpUtils.java
+++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/HttpUtils.java
@@ -18,6 +18,7 @@
package at.gv.egiz.eaaf.core.impl.http;
+import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
@@ -31,10 +32,15 @@ import javax.net.ssl.SSLContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.StatusLine;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.ResponseHandler;
import org.apache.http.conn.ssl.TrustAllStrategy;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.ssl.TrustStrategy;
+import org.apache.http.util.EntityUtils;
import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider;
import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;
@@ -47,6 +53,23 @@ public class HttpUtils {
private static final String ERROR_03 = "internal.httpclient.03";
+
+ /**
+ * Simple Http response-handler that only give http status-code as result.
+ *
+ * @return Status-Code of http response
+ */
+ public static ResponseHandler<StatusLine> simpleStatusCodeResponseHandler() {
+ return new ResponseHandler<StatusLine>() {
+ @Override
+ public StatusLine handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
+ EntityUtils.consumeQuietly(response.getEntity());
+ return response.getStatusLine();
+
+ }
+ };
+ }
+
/**
* Helper method to retrieve server URL including context path.
*
diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/pvp/PvpRProfileHttpHeaders.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/pvp/PvpRProfileHttpHeaders.java
new file mode 100644
index 00000000..cd6d7404
--- /dev/null
+++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/http/pvp/PvpRProfileHttpHeaders.java
@@ -0,0 +1,86 @@
+package at.gv.egiz.eaaf.core.impl.http.pvp;
+
+/**
+ * PVP2 R-Profile HTTP-Header definitions.
+ *
+ * @author tlenz
+ *
+ */
+public class PvpRProfileHttpHeaders {
+
+ //PVP 1.x headers
+ public static final String PVP_1X_VALUE_VERSION_PREFIX = "1.";
+
+ public static final String PVP_1X_PREFIX = "X-";
+ public static final String PVP_1X_VERSION_NAME = "Version";
+ public static final String PVP_1X_USERID_NAME = "AUTHENTICATE-UserID";
+ public static final String PVP_1X_GID_NAME = "AUTHENTICATE-GVGID";
+ public static final String PVP_1X_PARTICIPANT_ID_NAME = "AUTHENTICATE-PARTICIPANTID";
+ public static final String PVP_1X_GV_OU_ID_NAME = "AUTHENTICATE-GVOUID";
+ public static final String PVP_1X_OU_NAME = "AUTHENTICATE-OU";
+ public static final String PVP_1X_FUNCTION_NAME = "AUTHENTICATE-GVFUNCTION";
+ public static final String PVP_1X_SECCLASS_NAME = "AUTHENTICATE-gvSecClass";
+ public static final String PVP_1X_CN_NAME = "AUTHENTICATE-cn";
+ public static final String PVP_1X_COST_CENTER_ID_NAME = "ACCOUNTING-CostCenterId";
+ public static final String PVP_1X_INVOICE_RECPT_ID_NAME = "ACCOUNTING-InvoiceRecptId";
+ public static final String PVP_1X_ROLES_NAME = "AUTHORIZE-ROLES";
+ public static final String PVP_1X_GV_OU_OKZ_NAME = "AUTHENTICATE-GVOUOKZ";
+ public static final String PVP_1X_VERSION = PVP_1X_PREFIX + PVP_1X_VERSION_NAME;
+ public static final String PVP_1X_USERID = PVP_1X_PREFIX + PVP_1X_USERID_NAME;
+ public static final String PVP_1X_GID = PVP_1X_PREFIX + PVP_1X_GID_NAME;
+ public static final String PVP_1X_PARTICIPANT_ID = PVP_1X_PREFIX + PVP_1X_PARTICIPANT_ID_NAME;
+ public static final String PVP_1X_GV_OU_ID = PVP_1X_PREFIX + PVP_1X_GV_OU_ID_NAME;
+ public static final String PVP_1X_OU = PVP_1X_PREFIX + PVP_1X_OU_NAME;
+ public static final String PVP_1X_FUNCTION = PVP_1X_PREFIX + PVP_1X_FUNCTION_NAME;
+ public static final String PVP_1X_SECCLASS = PVP_1X_PREFIX + PVP_1X_SECCLASS_NAME;
+ public static final String PVP_1X_CN = PVP_1X_PREFIX + PVP_1X_CN_NAME;
+ public static final String PVP_1X_COST_CENTER_ID = PVP_1X_PREFIX + PVP_1X_COST_CENTER_ID_NAME;
+ public static final String PVP_1X_INVOICE_RECPT_ID = PVP_1X_PREFIX + PVP_1X_INVOICE_RECPT_ID_NAME;
+ public static final String PVP_1X_ROLES = PVP_1X_PREFIX + PVP_1X_ROLES_NAME;
+ public static final String PVP_1X_GV_OU_OKZ = PVP_1X_PREFIX + PVP_1X_GV_OU_OKZ_NAME;
+
+
+ //PVP 2.x headers
+ public static final String PVP_2X_VALUE_VERSION_PREFIX = "2.";
+
+ public static final String PVP_2X_VERSION = "X-PVP-VERSION";
+ public static final String PVP_2X_USERID = "X-PVP-USERID";
+ public static final String PVP_2X_GID = "X-PVP-GID";
+ public static final String PVP_2X_PARTICIPANT_ID = "X-PVP-PARTICIPANT-ID";
+ public static final String PVP_2X_GV_OU_ID = "X-PVP-OU-GV-OU-ID";
+ public static final String PVP_2X_OU = "X-PVP-OU";
+ public static final String PVP_2X_FUNCTION = "X-PVP-FUNCTION";
+ public static final String PVP_2X_SECCLASS = "X-PVP-SECCLASS";
+ public static final String PVP_2X_PRINCIPAL_NAME = "X-PVP-PRINCIPAL-NAME";
+ public static final String PVP_2X_BINDING = "X-PVP-BINDING";
+ public static final String PVP_2X_OU_OKZ = "X-PVP-OU-OKZ";
+ public static final String PVP_2X_COST_CENTER_ID = "X-PVP-COST-CENTER-ID";
+ public static final String PVP_2X_INVOICE_RECPT_ID = "X-PVP-INVOICE-RECPT-ID";
+ public static final String PVP_2X_ROLES = "X-PVP-ROLES";
+
+ public static final String PVP_ERROR_440_CODE = "440";
+ public static final String PVP_ERROR_440_MSG = "Mandatory PVP-Header {0} fehlt";
+ public static final String PVP_ERROR_441_CODE = "441";
+ public static final String PVP_ERROR_441_MSG = "Werte in X-PVP-ROLES haben ungültiges Format";
+ public static final String PVP_ERROR_442_CODE = "442";
+ public static final String PVP_ERROR_442_MSG = "Kein zulässiges Recht in X-PVP-ROLES";
+ public static final String PVP_ERROR_443_CODE = "443";
+ public static final String PVP_ERROR_443_MSG = "Die UserId ist am Anwendungsportal gesperrt";
+ public static final String PVP_ERROR_444_CODE = "444";
+ public static final String PVP_ERROR_444_MSG =
+ "Stammportal ist für Anfragen des angegebenen Participants nicht berechtigt";
+ public static final String PVP_ERROR_445_CODE = "445";
+ public static final String PVP_ERROR_445_MSG = "Participant am Anwendungsportal nicht registriert";
+ public static final String PVP_ERROR_490_CODE = "490";
+ public static final String PVP_ERROR_490_MSG = "Zertifikatsüberprüfung fehlgeschlagen. Grund: {0}";
+ public static final String PVP_ERROR_493_CODE = "493";
+ public static final String PVP_ERROR_493_MSG = "Keine Berechtigung für diese Anwendung im Stammportal";
+ public static final String PVP_ERROR_494_CODE = "494";
+ public static final String PVP_ERROR_494_MSG = "Die Authentifizierung des Stammportals ist fehlgeschlagen";
+ public static final String PVP_ERROR_511_CODE = "511";
+ public static final String PVP_ERROR_511_MSG = "PVP Version nicht unterstützt";
+
+ private PvpRProfileHttpHeaders() {
+
+ }
+}