package at.gv.util.client.zuserech; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.net.ssl.SSLContext; import javax.xml.namespace.QName; import javax.xml.ws.BindingProvider; import javax.xml.ws.WebServiceContext; import javax.xml.ws.handler.Handler; import org.apache.cxf.configuration.jsse.TLSClientParameters; import org.apache.cxf.endpoint.Client; import org.apache.cxf.frontend.ClientProxy; import org.apache.cxf.transport.http.HTTPConduit; import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import at.gv.util.LaxHostNameVerifier; import at.gv.util.LoggingHandler; import at.gv.util.MiscUtil; import at.gv.util.client.moaid.MOAIDClient; import at.gv.util.config.EgovUtilConfiguration; import at.gv.util.ex.EgovUtilException; import at.gv.util.wsdl.szr.SZRException; import at.gv.util.wsdl.zuserech.ClearingPortType; import at.gv.util.wsdl.zuserech.ClearingService; import at.gv.util.wsdl.zuserech.ValidateTokenPortType; import at.gv.util.wsdl.zuserech.ValidateTokenService; import at.gv.util.xsd.zuserech.ClearingRequestType; import at.gv.util.xsd.zuserech.ClearingResponseType; import at.gv.util.xsd.zuserech.ValidateTokenRequest; import at.gv.util.xsd.zuserech.ValidateTokenResponse; public class ZuseRechClient { @Resource WebServiceContext wsContext; private EgovUtilConfiguration config = null; Logger log = LoggerFactory.getLogger(ZuseRechClient.class); public ZuseRechClient() {} public ZuseRechClient(EgovUtilConfiguration config) { if (config == null) { throw new NullPointerException("Parameter config must not be null."); } this.config = config; } @SuppressWarnings({ "unchecked", "rawtypes" }) public ClearingResponseType sendClearingRequest(ClearingRequestType csr, String csrServiceURL) throws SZRException, EgovUtilException { MiscUtil.assertNotNull(csr, "csr"); MiscUtil.assertNotNull(csrServiceURL, "csrServiceURL"); URL url = MOAIDClient.class.getResource("/wsdl/zkopf/zsuerech.wsdl"); ClearingService service = new ClearingService(url, new QName("http://reference.e-government.gv.at/namespaces/zustellung/rech/wsdl", "ClearingService")); ClearingPortType port = service.getClearingPort(); log.debug("Clearing service connection URL: " + csrServiceURL); BindingProvider bindingProvider = (BindingProvider) port; Map requestContext = bindingProvider.getRequestContext(); requestContext.put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, csrServiceURL); log.trace("Adding JAX-WS request/response trace handler."); List handlerList = bindingProvider.getBinding().getHandlerChain(); if (handlerList == null) { handlerList = new ArrayList(); } LoggingHandler loggingHandler = new LoggingHandler(); handlerList.add(loggingHandler); bindingProvider.getBinding().setHandlerChain(handlerList); // check for ssl if (csrServiceURL.toLowerCase().startsWith("https")) { log.trace("Using ssl for clearing service client request."); SSLContext sslContext = config.getClearingsslConfiguration().getSSLContext(false); if (sslContext == null) { throw new EgovUtilException("SSL context from configuration is empty. Please configure an SSL context in the configuration first."); } Client client = ClientProxy.getClient(port); HTTPConduit http = (HTTPConduit) client.getConduit(); HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); httpClientPolicy.setConnectionTimeout(36000); httpClientPolicy.setAllowChunking(false); httpClientPolicy.setReceiveTimeout(32000); http.setClient(httpClientPolicy); TLSClientParameters tlsParams = new TLSClientParameters(); tlsParams.setSSLSocketFactory(sslContext.getSocketFactory()); // check for lax hostname if (this.config.getClearingsslConfiguration().useLaxHostNameVerifier()) { log.trace("LaxHostnameVerifier enabled. This setting is not recommended to use."); tlsParams.setHostnameVerifier(new LaxHostNameVerifier()); } http.setTlsClientParameters(tlsParams ); } return port.clearingOperation(csr); } @SuppressWarnings({ "unchecked", "rawtypes" }) public ValidateTokenResponse sendValidateTokenRequest(ValidateTokenRequest vtr, String vtrServiceURL) throws SZRException, EgovUtilException { MiscUtil.assertNotNull(vtr, "vtr"); MiscUtil.assertNotNull(vtrServiceURL, "csrServiceURL"); URL url = MOAIDClient.class.getResource("/wsdl/zkopf/zsuerech.wsdl"); ValidateTokenService service = new ValidateTokenService(url, new QName("http://reference.e-government.gv.at/namespaces/zustellung/rech/wsdl", "ValidateTokenService")); ValidateTokenPortType port = service.getValidateTokenPort(); log.debug("Validate token service connection URL: " + vtrServiceURL); BindingProvider bindingProvider = (BindingProvider) port; Map requestContext = bindingProvider.getRequestContext(); requestContext.put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, vtrServiceURL); log.trace("Adding JAX-WS request/response trace handler."); List handlerList = bindingProvider.getBinding().getHandlerChain(); if (handlerList == null) { handlerList = new ArrayList(); } LoggingHandler loggingHandler = new LoggingHandler(); handlerList.add(loggingHandler); bindingProvider.getBinding().setHandlerChain(handlerList); // check for ssl if (vtrServiceURL.toLowerCase().startsWith("https")) { log.trace("Using ssl for clearing service client request."); SSLContext sslContext = config.getClearingsslConfiguration().getSSLContext(false); if (sslContext == null) { throw new EgovUtilException("SSL context from configuration is empty. Please configure an SSL context in the configuration first."); } Client client = ClientProxy.getClient(port); HTTPConduit http = (HTTPConduit) client.getConduit(); HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); httpClientPolicy.setConnectionTimeout(36000); httpClientPolicy.setAllowChunking(false); httpClientPolicy.setReceiveTimeout(32000); http.setClient(httpClientPolicy); TLSClientParameters tlsParams = new TLSClientParameters(); tlsParams.setSSLSocketFactory(sslContext.getSocketFactory()); // check for lax hostname if (this.config.getClearingsslConfiguration().useLaxHostNameVerifier()) { log.trace("LaxHostnameVerifier enabled. This setting is not recommended to use."); tlsParams.setHostnameVerifier(new LaxHostNameVerifier()); } http.setTlsClientParameters(tlsParams ); } return port.validateTokenOperation(vtr); } }