From 9556dc6bd7e327dfbfc3c2d5228ad920ad7b9f8e Mon Sep 17 00:00:00 2001 From: Christof Rabensteiner Date: Thu, 27 Jun 2019 14:41:51 +0200 Subject: Inject Configurable HTTP Policies to MsgClient - Refactor: Get rid of MsgClient, because MsgClientFactory can do all the work. - Add Connection Timeout and Request Timeout (Policies of HTTP Client) to mzs:DeliveryRequest/Config and application.yaml. - Update readme: Add JDK 12 Requirement --- .../at/gv/egiz/moazs/msg/MsgClientFactory.java | 35 +++++++++++++++++----- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'src/main/java/at/gv/egiz/moazs/msg/MsgClientFactory.java') diff --git a/src/main/java/at/gv/egiz/moazs/msg/MsgClientFactory.java b/src/main/java/at/gv/egiz/moazs/msg/MsgClientFactory.java index 071a243..c40aec1 100644 --- a/src/main/java/at/gv/egiz/moazs/msg/MsgClientFactory.java +++ b/src/main/java/at/gv/egiz/moazs/msg/MsgClientFactory.java @@ -4,7 +4,15 @@ import at.gv.egiz.moazs.util.FileUtils; import at.gv.egiz.moazs.util.SSLContextCreator; import at.gv.zustellung.app2mzs.xsd.ClientType; import at.gv.zustellung.app2mzs.xsd.KeyStoreType; +import at.gv.zustellung.msg.xsd.App2ZusePort; import com.sun.istack.Nullable; +import org.apache.cxf.configuration.jsse.TLSClientParameters; +import org.apache.cxf.endpoint.Client; +import org.apache.cxf.frontend.ClientProxy; +import org.apache.cxf.jaxws.JaxWsClientFactoryBean; +import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; +import org.apache.cxf.transport.http.HTTPConduit; +import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -23,7 +31,6 @@ public class MsgClientFactory { private final SSLContextCreator sslContextCreator; private final FileUtils fileUtils; - @Autowired public MsgClientFactory(StoreSOAPBodyBinaryInRepositoryInterceptor storeResponseInterceptor, SSLContextCreator creator, FileUtils fileUtils) { this.storeResponseInterceptor = storeResponseInterceptor; @@ -31,7 +38,6 @@ public class MsgClientFactory { this.fileUtils = fileUtils; } - /** * Creates a client that communicates with a msg service. * @@ -39,17 +45,33 @@ public class MsgClientFactory { * @return the msg client */ //TODO evaluate and honor laxhostnameverification and trustall parameter! - public MsgClient create(ClientType params) { + public App2ZusePort create(ClientType params) { + + var factory = new JaxWsClientFactoryBean(); + factory.setServiceClass(App2ZusePort.class); + factory.setAddress(params.getURL()); + factory.getInInterceptors().add(storeResponseInterceptor); - SSLContext sslContext = null; + var proxy = new JaxWsProxyFactoryBean(factory).create(); + Client client = ClientProxy.getClient(proxy); + HTTPConduit http = (HTTPConduit) client.getConduit(); + + var httpClientPolicy = new HTTPClientPolicy(); + httpClientPolicy.setConnectionTimeout(params.getConnectionTimeout().longValueExact()); + httpClientPolicy.setReceiveTimeout(params.getReceiveTimeout().longValueExact()); + http.setClient(httpClientPolicy); if (params.getURL().startsWith("https")) { var keystore = resolveKeyStorePath(params.getSSL().getKeyStore()); var truststore = resolveKeyStorePath(params.getSSL().getTrustStore()); - sslContext = sslContextCreator.createSSLContext(keystore, truststore); + SSLContext sslContext = sslContextCreator.createSSLContext(keystore, truststore); + var tlsParams = new TLSClientParameters(); + tlsParams.setSSLSocketFactory(sslContext.getSocketFactory()); + http.setTlsClientParameters(tlsParams); + log.info("SSLContext initialized. "); } - return new MsgClient(storeResponseInterceptor, params.getURL(), sslContext); + return ((App2ZusePort)proxy); } private KeyStoreType resolveKeyStorePath(@Nullable KeyStoreType store) { @@ -57,7 +79,6 @@ public class MsgClientFactory { if (store == null) return null; var resolvedURI = "file:" + fileUtils.determinePath(store.getFileName()); - log.trace("Resolved key store path from {} to {}.", store.getFileName(), resolvedURI); return keyStoreTypeBuilder(store) -- cgit v1.2.3