[ 
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();
        
//==============================================================================================
            
        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


{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}



> 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();
>         
> //==============================================================================================
>           
>       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)

Reply via email to