[ https://issues.apache.org/jira/browse/CXF-7495?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Marco Tenti updated CXF-7495: ----------------------------- Description: I have a soap service . it support the mtom but not the xop include annotation , so it refused my request: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/> <soap:Body> <ns2:receiveSip xmlns:ns2="http://sip.receive.core.iris.eng.it" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"> <ns2:sipReceive> <tipoSip>?</tipoSip> <tipoProtezione>?</tipoProtezione> <improntaAlgoritmo>SHA-256</improntaAlgoritmo> <improntaCodifica>HEX</improntaCodifica> <impronta>9e830c2ac56eca00023b17e3c17ed1014e055f960c3ee4778a84aa02c6dafcb9</impronta> </ns2:sipReceive> <arg1> <dh> <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:92dc39d3-e3d5-4aa2-a9cb-7582483934a4-1@cxf.apache.org"/> </dh> </arg1> </ns2:receiveSip> </soap:Body> </soap:Envelope> how can i set my request to this: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/> <soap:Body> <ns2:receiveSip xmlns:ns2="http://sip.receive.core.iris.eng.it" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"> <ns2:sipReceive> <tipoSip>?</tipoSip> <tipoProtezione>?</tipoProtezione> <improntaAlgoritmo>SHA-256</improntaAlgoritmo> <improntaCodifica>HEX</improntaCodifica> <impronta>9e830c2ac56eca00023b17e3c17ed1014e055f960c3ee4778a84aa02c6dafcb9</impronta> </ns2:sipReceive> <arg1> <dh> cid:92dc39d3-e3d5-4aa2-a9cb-7582483934a4 </dh> </arg1> </ns2:receiveSip> </soap:Body> </soap:Envelope> how can obtain this result? in more recent version there is a paramter for this https://ws.apache.org/wss4j/apidocs/org/apache/wss4j/common/ConfigurationConstants.html#EXPAND_XOP_INCLUDE {code:java} public static <T> T buildServerWsdl(String endpointWsdl,final String username,final String password, final Class<T> serviceClass,boolean ignoreSSLCertificate,boolean useAuthorizationBasic,Map<String,String> supplierheaders) throws NoSuchAlgorithmException, KeyManagementException, MalformedURLException{ //Controllo wsdlurl URL wsdlURL; java.io.File wsdlFile = new java.io.File(endpointWsdl); if (wsdlFile.exists()) { wsdlURL = wsdlFile.toURI().toURL(); } else { wsdlURL = new URL(endpointWsdl); } System.out.println(wsdlURL); JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(serviceClass); factory.setAddress(endpointWsdl); //factory.setServiceClass(javax.xml.ws.Service.class); //factory.setAddress("http://server.service.core.eng.it/"); //factory.setServiceBean(implementor); //Abilita il loggin in ingresco ed uscita dei messaggi soap! factory.getInInterceptors().add(new LoggingInInterceptor(4*1024)); factory.getOutInterceptors().add(new LoggingOutInterceptor(4*1024)); //factory.getInInterceptors().add(new LoggingInInterceptor()); //factory.getOutInterceptors().add(new LoggingOutInterceptor()); // LoggingInInterceptor loggingInInterceptor = new LoggingInInterceptor(); // loggingInInterceptor.setPrettyLogging(true); // LoggingOutInterceptor loggingOutInterceptor = new LoggingOutInterceptor(); // loggingOutInterceptor.setPrettyLogging(true); // factory.getInInterceptors().add(loggingInInterceptor); // factory.getOutInterceptors().add(loggingOutInterceptor); @SuppressWarnings("unchecked") T server = (T) factory.create(); // The BindingProvider interface provides access to the protocol binding and // to the associated context objects for request and response message processing. BindingProvider prov = (BindingProvider)server; Binding binding = prov.getBinding(); ((SOAPBinding)binding).setMTOMEnabled(true); //Add handlers to the binding jaxb java.util.List<javax.xml.ws.handler.Handler> handlers = binding.getHandlerChain(); handlers.add(new JaxWsLoggingHandler()); binding.setHandlerChain(handlers); Map<String, Object> req_ctx = prov.getRequestContext(); req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointWsdl); Map<String, List<String>> headers = new HashMap<String, List<String>>(); if(username != null && password != null){ headers.put("Username", Arrays.asList(username)); headers.put("Password", Arrays.asList(password)); //headers.put("Content-Type", Arrays.asList("text/xml")); //necessario specificare se si usa schema-core invece di XmlSchema prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username); prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password); //FILE TO ELEMENT //InputStream clientPolicy = serviceClass.getResourceAsStream("webservices-client.xml"); // DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); // builderFactory.setValidating(false); // builderFactory.setNamespaceAware(true); // builderFactory.setIgnoringElementContentWhitespace(true); // builderFactory.setIgnoringComments(true); // Element element = builderFactory.newDocumentBuilder().parse(clientPolicy).getDocumentElement(); //prov.put(ClientConstants.CLIENT_CONFIG, element);ù //Add some configuration //prov.put(ClientConstants.WSS_KEYSTORE_TYPE, "JKS"); //prov.put(ClientConstants.WSS_KEYSTORE_LOCATION, "D:\\default-keystore.jks"); //prov.put(ClientConstants.WSS_KEYSTORE_PASSWORD, "welcome1"); prov.getRequestContext().put("ws-security.store.bytes.in.attachment", "false"); //prov.getRequestContext().put("mtom-enabled", "false"); //prov.getRequestContext().put("org.apache.cxf.http.no_io_exceptions", "true"); //prov.getRequestContext().put("org.apache.cxf.transport.no_io_exceptions", "true"); //for the latest cxf version if(supplierheaders !=null && supplierheaders.size() > 0){ prov.getRequestContext().putAll(supplierheaders); for(Map.Entry<String, String> entry : supplierheaders.entrySet()){ headers.put(entry.getKey(), Arrays.asList(entry.getValue())); } } Authenticator myAuth = new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password.toCharArray()); } }; Authenticator.setDefault(myAuth); } if(useAuthorizationBasic){ String authorization = new sun.misc.BASE64Encoder().encode((username+":"+password).getBytes()); headers.put("Authorization", Arrays.asList("Basic " + authorization)); req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers); //MessageContext mctx = wsctx.getMessageContext(); Map<String, List<String>> http_headers = (HashMap<String, List<String>>) req_ctx.get(MessageContext.HTTP_REQUEST_HEADERS); List list = (List) http_headers.get("Authorization"); if (list == null || list.size() == 0) { throw new RuntimeException("Authentication failed! This WS needs BASIC Authentication!"); } String userpass = (String) list.get(0); userpass = userpass.substring(5); byte[] buf = org.apache.commons.codec.binary.Base64.decodeBase64(userpass.getBytes()); String credentials = new String(buf); String usernamex = null; String passwordx = null; int p = credentials.indexOf(":"); if (p > -1) { usernamex = credentials.substring(0, p); passwordx = credentials.substring(p+1); } else { throw new RuntimeException("There was an error while decoding the Authentication!"); } // This should be changed to a DB / Ldap authentication check if (usernamex.equals(username) && passwordx.equals(password)) { //System.out.println("============== Authentication Basic OK ============="); } else { throw new RuntimeException("Authentication failed! Wrong username / password!"); } } //Client cl = ClientProxy.getClient(server); org.apache.cxf.endpoint.Client cl = org.apache.cxf.frontend.ClientProxy.getClient(server); //============================================================================================= // Set up WS-Security Encryption // Reference: https://ws.apache.org/wss4j/using.html Map<String, Object> inProps = new HashMap<String, Object>(); //props.put(WSHandlerConstants.USER, "testkey"); //props.put(WSHandlerConstants.ACTION, WSHandlerConstants.ENCRYPT); //props.put(WSHandlerConstants.PASSWORD_TYPE, "PasswordText"); //props.put(WSHandlerConstants.ENC_PROP_FILE, "clientKeystore.properties"); //props.put(WSHandlerConstants.ENCRYPTION_PARTS, "{Content}{http://schemas.xmlsoap.org/soap/envelope/}Body"); //props.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientPasswordCallback.class.getName()); //props.put(WSHandlerConstants.ADD_INCLUSIVE_PREFIXES,false); //props.put(ConfigurationConstants.EXPAND_XOP_INCLUDE_FOR_SIGNATURE, false); //inProps.put("expandXOPIncludeForSignature", false); //inProps.put("expandXOPInclude", false); //WSS4JOutInterceptor wss4jOut = new WSS4JOutInterceptor(inProps); //ClientProxy.getClient(client).getOutInterceptors().add(wss4jOut); //cl.getInInterceptors().add(wss4jOut); //cl.getOutInterceptors(); //============================================================================================== /* org.apache.cxf.endpoint.Endpoint cxfEndpoint = cl.getEndpoint(); Map<String, Object> outProps= new HashMap<String, Object>(); outProps.put(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME_TOKEN + ' ' + WSHandlerConstants.TIMESTAMP); outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientPasswordHandler.class.getName()); outProps.put(WSHandlerConstants.USER, username); PhaseInterceptor<SoapMessage> wssOut = new WSS4JOutInterceptor(outProps); cxfEndpoint.getOutInterceptors().add(wssOut); cxfEndpoint.getOutInterceptors().add(new SAAJOutInterceptor()); */ HTTPConduit httpConduit = (HTTPConduit) cl.getConduit(); //disable ssl certificate handshake if(ignoreSSLCertificate){ String targetAddr = httpConduit.getTarget().getAddress().getValue(); if (targetAddr.toLowerCase().startsWith("https:")) { //TRUST ALL CERTIFICATE Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() {return new java.security.cert.X509Certificate[0];} public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {} public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {} } }; //TRUST ALL HOST Ignore differences between given hostname and certificate hostname //HostnameVerifier hv = new HostnameVerifier(){public boolean verify(String hostname, SSLSession session) { return true; }}; //SSLContext sc = SSLContext.getInstance("SSL"); //sc.init(null, trustAllCerts, new SecureRandom()); //hv.verify(wsdlURL.getHost(),sc.getClientSessionContext().getSession()); TLSClientParameters tlsParams = new TLSClientParameters(); tlsParams.setTrustManagers(trustAllCerts);//TRUST ALL CERTIFICATE tlsParams.setDisableCNCheck(true); //TRUST ALL HOST httpConduit.setTlsClientParameters(tlsParams); } } AuthorizationPolicy authorizationPolicy = httpConduit.getAuthorization(); authorizationPolicy.setUserName(username); authorizationPolicy.setPassword(password); HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); httpClientPolicy.setConnectionTimeout(10000);//10sec httpClientPolicy.setReceiveTimeout(60000); httpClientPolicy.setContentType("application/soap+xml"); //Attenzione per errore org.apache.cxf.transport.http.HTTPException: HTTP response '415: Unsupported Media Type' //qualcosa non va con encoding //httpClientPolicy.setAcceptEncoding("UTF-8"); //httpClientPolicy.setConnection(ConnectionType.CLOSE); //httpClientPolicy.setMaxRetransmits(1); httpConduit.setClient(httpClientPolicy); return server; } {code} was: I have a soap service . it support the mtom but not the xop include annotation , so it refused my request: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/> <soap:Body> <ns2:receiveSip xmlns:ns2="http://sip.receive.core.iris.eng.it" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"> <ns2:sipReceive> <tipoSip>?</tipoSip> <tipoProtezione>?</tipoProtezione> <improntaAlgoritmo>SHA-256</improntaAlgoritmo> <improntaCodifica>HEX</improntaCodifica> <impronta>9e830c2ac56eca00023b17e3c17ed1014e055f960c3ee4778a84aa02c6dafcb9</impronta> </ns2:sipReceive> <arg1> <dh> <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:92dc39d3-e3d5-4aa2-a9cb-7582483934a4-1@cxf.apache.org"/> </dh> </arg1> </ns2:receiveSip> </soap:Body> </soap:Envelope> how can i set my request to this: <?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/> <soap:Body> <ns2:receiveSip xmlns:ns2="http://sip.receive.core.iris.eng.it" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"> <ns2:sipReceive> <tipoSip>?</tipoSip> <tipoProtezione>?</tipoProtezione> <improntaAlgoritmo>SHA-256</improntaAlgoritmo> <improntaCodifica>HEX</improntaCodifica> <impronta>9e830c2ac56eca00023b17e3c17ed1014e055f960c3ee4778a84aa02c6dafcb9</impronta> </ns2:sipReceive> <arg1> <dh> cid:92dc39d3-e3d5-4aa2-a9cb-7582483934a4 </dh> </arg1> </ns2:receiveSip> </soap:Body> </soap:Envelope> how can obtain this result? in more recent version there is a paramter for this https://ws.apache.org/wss4j/apidocs/org/apache/wss4j/common/ConfigurationConstants.html#EXPAND_XOP_INCLUDE > Set EXPAND_XOP_INCLUDE for WSS4JOutInterceptor to 'false' in older version > -------------------------------------------------------------------------- > > Key: CXF-7495 > URL: https://issues.apache.org/jira/browse/CXF-7495 > Project: CXF > Issue Type: Task > Components: JAXB Databinding, Soap Binding > Affects Versions: 2.2.12, 3.0.4 > Environment: Windows 10, java 1.8.0_131, Eclipse IE > Reporter: Marco Tenti > Priority: Minor > Labels: cxf, jaws, mtom, wss4j-configuration > > I have a soap service . it support the mtom but not the xop include > annotation , so it refused my request: > <?xml version="1.0" encoding="UTF-8"?><soap:Envelope > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> > <SOAP-ENV:Header > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/> > <soap:Body> > <ns2:receiveSip xmlns:ns2="http://sip.receive.core.iris.eng.it" > xmlns:xmime="http://www.w3.org/2005/05/xmlmime"> > <ns2:sipReceive> > <tipoSip>?</tipoSip> > <tipoProtezione>?</tipoProtezione> > <improntaAlgoritmo>SHA-256</improntaAlgoritmo> > <improntaCodifica>HEX</improntaCodifica> > > <impronta>9e830c2ac56eca00023b17e3c17ed1014e055f960c3ee4778a84aa02c6dafcb9</impronta> > </ns2:sipReceive> > <arg1> > <dh> > <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" > href="cid:92dc39d3-e3d5-4aa2-a9cb-7582483934a4-1@cxf.apache.org"/> > </dh> > </arg1> > </ns2:receiveSip> > </soap:Body> > </soap:Envelope> > how can i set my request to this: > <?xml version="1.0" encoding="UTF-8"?><soap:Envelope > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> > <SOAP-ENV:Header > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/> > <soap:Body> > <ns2:receiveSip xmlns:ns2="http://sip.receive.core.iris.eng.it" > xmlns:xmime="http://www.w3.org/2005/05/xmlmime"> > <ns2:sipReceive> > <tipoSip>?</tipoSip> > <tipoProtezione>?</tipoProtezione> > <improntaAlgoritmo>SHA-256</improntaAlgoritmo> > <improntaCodifica>HEX</improntaCodifica> > > <impronta>9e830c2ac56eca00023b17e3c17ed1014e055f960c3ee4778a84aa02c6dafcb9</impronta> > </ns2:sipReceive> > <arg1> > <dh> > cid:92dc39d3-e3d5-4aa2-a9cb-7582483934a4 > </dh> > </arg1> > </ns2:receiveSip> > </soap:Body> > </soap:Envelope> > how can obtain this result? in more recent version there is a paramter for > this > https://ws.apache.org/wss4j/apidocs/org/apache/wss4j/common/ConfigurationConstants.html#EXPAND_XOP_INCLUDE > {code:java} > public static <T> T buildServerWsdl(String endpointWsdl,final String > username,final String password, > final Class<T> serviceClass,boolean > ignoreSSLCertificate,boolean useAuthorizationBasic,Map<String,String> > supplierheaders) throws NoSuchAlgorithmException, KeyManagementException, > MalformedURLException{ > //Controllo wsdlurl > URL wsdlURL; > java.io.File wsdlFile = new java.io.File(endpointWsdl); > if (wsdlFile.exists()) { > wsdlURL = wsdlFile.toURI().toURL(); > } else { > wsdlURL = new URL(endpointWsdl); > } > System.out.println(wsdlURL); > > > JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); > > factory.setServiceClass(serviceClass); > factory.setAddress(endpointWsdl); > //factory.setServiceClass(javax.xml.ws.Service.class); > //factory.setAddress("http://server.service.core.eng.it/"); > //factory.setServiceBean(implementor); > //Abilita il loggin in ingresco ed uscita dei messaggi soap! > factory.getInInterceptors().add(new LoggingInInterceptor(4*1024)); > factory.getOutInterceptors().add(new LoggingOutInterceptor(4*1024)); > //factory.getInInterceptors().add(new LoggingInInterceptor()); > //factory.getOutInterceptors().add(new LoggingOutInterceptor()); > > // LoggingInInterceptor loggingInInterceptor = new > LoggingInInterceptor(); > // loggingInInterceptor.setPrettyLogging(true); > // LoggingOutInterceptor loggingOutInterceptor = new > LoggingOutInterceptor(); > // loggingOutInterceptor.setPrettyLogging(true); > // factory.getInInterceptors().add(loggingInInterceptor); > // factory.getOutInterceptors().add(loggingOutInterceptor); > @SuppressWarnings("unchecked") > T server = (T) factory.create(); > // The BindingProvider interface provides access to the protocol > binding and > // to the associated context objects for request and response message > processing. > BindingProvider prov = (BindingProvider)server; > Binding binding = prov.getBinding(); > ((SOAPBinding)binding).setMTOMEnabled(true); > > //Add handlers to the binding jaxb > java.util.List<javax.xml.ws.handler.Handler> handlers = > binding.getHandlerChain(); > handlers.add(new JaxWsLoggingHandler()); > binding.setHandlerChain(handlers); > > Map<String, Object> req_ctx = prov.getRequestContext(); > req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointWsdl); > Map<String, List<String>> headers = new HashMap<String, List<String>>(); > if(username != null && password != null){ > headers.put("Username", Arrays.asList(username)); > headers.put("Password", Arrays.asList(password)); > //headers.put("Content-Type", Arrays.asList("text/xml")); > //necessario specificare se si usa schema-core invece di XmlSchema > prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, > username); > prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, > password); > > //FILE TO ELEMENT > //InputStream clientPolicy = > serviceClass.getResourceAsStream("webservices-client.xml"); > // DocumentBuilderFactory builderFactory = > DocumentBuilderFactory.newInstance(); > // builderFactory.setValidating(false); > // builderFactory.setNamespaceAware(true); > // builderFactory.setIgnoringElementContentWhitespace(true); > // builderFactory.setIgnoringComments(true); > // Element element = > builderFactory.newDocumentBuilder().parse(clientPolicy).getDocumentElement(); > //prov.put(ClientConstants.CLIENT_CONFIG, element);ù > > //Add some configuration > > //prov.put(ClientConstants.WSS_KEYSTORE_TYPE, "JKS"); > //prov.put(ClientConstants.WSS_KEYSTORE_LOCATION, > "D:\\default-keystore.jks"); > //prov.put(ClientConstants.WSS_KEYSTORE_PASSWORD, "welcome1"); > > > prov.getRequestContext().put("ws-security.store.bytes.in.attachment", > "false"); > //prov.getRequestContext().put("mtom-enabled", "false"); > > > //prov.getRequestContext().put("org.apache.cxf.http.no_io_exceptions", > "true"); > > //prov.getRequestContext().put("org.apache.cxf.transport.no_io_exceptions", > "true"); //for the latest cxf version > if(supplierheaders !=null && supplierheaders.size() > 0){ > prov.getRequestContext().putAll(supplierheaders); > for(Map.Entry<String, String> entry : > supplierheaders.entrySet()){ > headers.put(entry.getKey(), > Arrays.asList(entry.getValue())); > } > } > Authenticator myAuth = new Authenticator() { > @Override > protected PasswordAuthentication > getPasswordAuthentication() { > return new PasswordAuthentication(username, > password.toCharArray()); > } > }; > Authenticator.setDefault(myAuth); > > } > if(useAuthorizationBasic){ > String authorization = new > sun.misc.BASE64Encoder().encode((username+":"+password).getBytes()); > headers.put("Authorization", Arrays.asList("Basic " + > authorization)); > req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers); > //MessageContext mctx = wsctx.getMessageContext(); > Map<String, List<String>> http_headers = (HashMap<String, > List<String>>) req_ctx.get(MessageContext.HTTP_REQUEST_HEADERS); > List list = (List) http_headers.get("Authorization"); > if (list == null || list.size() == 0) { > throw new RuntimeException("Authentication failed! This > WS needs BASIC Authentication!"); > } > String userpass = (String) list.get(0); > userpass = userpass.substring(5); > byte[] buf = > org.apache.commons.codec.binary.Base64.decodeBase64(userpass.getBytes()); > String credentials = new String(buf); > String usernamex = null; > String passwordx = null; > int p = credentials.indexOf(":"); > if (p > -1) { > usernamex = credentials.substring(0, p); > passwordx = credentials.substring(p+1); > } > else { > throw new RuntimeException("There was an error while > decoding the Authentication!"); > } > // This should be changed to a DB / Ldap authentication check > if (usernamex.equals(username) && passwordx.equals(password)) { > > //System.out.println("============== Authentication > Basic OK ============="); > } > else { > throw new RuntimeException("Authentication failed! > Wrong username / password!"); > } > } > //Client cl = ClientProxy.getClient(server); > org.apache.cxf.endpoint.Client cl = > org.apache.cxf.frontend.ClientProxy.getClient(server); > > //============================================================================================= > // Set up WS-Security Encryption > // Reference: https://ws.apache.org/wss4j/using.html > Map<String, Object> inProps = new HashMap<String, Object>(); > //props.put(WSHandlerConstants.USER, "testkey"); > //props.put(WSHandlerConstants.ACTION, WSHandlerConstants.ENCRYPT); > //props.put(WSHandlerConstants.PASSWORD_TYPE, "PasswordText"); > //props.put(WSHandlerConstants.ENC_PROP_FILE, > "clientKeystore.properties"); > //props.put(WSHandlerConstants.ENCRYPTION_PARTS, > "{Content}{http://schemas.xmlsoap.org/soap/envelope/}Body"); > //props.put(WSHandlerConstants.PW_CALLBACK_CLASS, > ClientPasswordCallback.class.getName()); > //props.put(WSHandlerConstants.ADD_INCLUSIVE_PREFIXES,false); > //props.put(ConfigurationConstants.EXPAND_XOP_INCLUDE_FOR_SIGNATURE, > false); > > //inProps.put("expandXOPIncludeForSignature", false); > //inProps.put("expandXOPInclude", false); > //WSS4JOutInterceptor wss4jOut = new WSS4JOutInterceptor(inProps); > //ClientProxy.getClient(client).getOutInterceptors().add(wss4jOut); > //cl.getInInterceptors().add(wss4jOut); > //cl.getOutInterceptors(); > > //============================================================================================== > /* > org.apache.cxf.endpoint.Endpoint cxfEndpoint = cl.getEndpoint(); > Map<String, Object> outProps= new HashMap<String, Object>(); > > outProps.put(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME_TOKEN + ' > ' + WSHandlerConstants.TIMESTAMP); > outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); > outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, > ClientPasswordHandler.class.getName()); > outProps.put(WSHandlerConstants.USER, username); > PhaseInterceptor<SoapMessage> wssOut = new > WSS4JOutInterceptor(outProps); > cxfEndpoint.getOutInterceptors().add(wssOut); > cxfEndpoint.getOutInterceptors().add(new SAAJOutInterceptor()); > */ > HTTPConduit httpConduit = (HTTPConduit) cl.getConduit(); > //disable ssl certificate handshake > if(ignoreSSLCertificate){ > String targetAddr = > httpConduit.getTarget().getAddress().getValue(); > if (targetAddr.toLowerCase().startsWith("https:")) { > //TRUST ALL CERTIFICATE Create a trust manager that > does not validate certificate chains > TrustManager[] trustAllCerts = new TrustManager[] { new > X509TrustManager() { > public java.security.cert.X509Certificate[] > getAcceptedIssuers() {return new java.security.cert.X509Certificate[0];} > public void > checkClientTrusted(java.security.cert.X509Certificate[] certs, String > authType) {} > public void > checkServerTrusted(java.security.cert.X509Certificate[] certs, String > authType) {} > } }; > //TRUST ALL HOST Ignore differences between given > hostname and certificate hostname > //HostnameVerifier hv = new HostnameVerifier(){public > boolean verify(String hostname, SSLSession session) { return true; }}; > //SSLContext sc = SSLContext.getInstance("SSL"); > //sc.init(null, trustAllCerts, new SecureRandom()); > > //hv.verify(wsdlURL.getHost(),sc.getClientSessionContext().getSession()); > TLSClientParameters tlsParams = new > TLSClientParameters(); > tlsParams.setTrustManagers(trustAllCerts);//TRUST ALL > CERTIFICATE > tlsParams.setDisableCNCheck(true); //TRUST ALL HOST > httpConduit.setTlsClientParameters(tlsParams); > > } > } > AuthorizationPolicy authorizationPolicy = > httpConduit.getAuthorization(); > authorizationPolicy.setUserName(username); > authorizationPolicy.setPassword(password); > HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy(); > httpClientPolicy.setConnectionTimeout(10000);//10sec > httpClientPolicy.setReceiveTimeout(60000); > > httpClientPolicy.setContentType("application/soap+xml"); > > //Attenzione per errore org.apache.cxf.transport.http.HTTPException: > HTTP response '415: Unsupported Media Type' > //qualcosa non va con encoding > //httpClientPolicy.setAcceptEncoding("UTF-8"); > //httpClientPolicy.setConnection(ConnectionType.CLOSE); > //httpClientPolicy.setMaxRetransmits(1); > httpConduit.setClient(httpClientPolicy); > return server; > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)