I am trying to get a simple SOAP client working based off a WSDL that has 
various policies defined.

- I do not own the service and have no way to modify it.
- Spring is not involved in anyway and will not be.
- Using jaxws-maven-plugin to generate the proxy code. Version 2.4.1
- Using version 3.1.6 of CXF
- Including the following dependencies: cxf-rt-rs-client, cxf-rt-security, 
cxf-rt-ws-policy, cxf-rt-ws-security, cxf-rt-frontend-jaxws, 
cxf-rt-features-logging

(The JAX-RS client dependency is included because this app will call a REST 
service after getting a response from the SOAP service. The JAX-RS stuff is 
working fine).

The SOAP message generated by CXF appears to be properly formed. I can 
successfully send the exact same message to the service endpoint using cURL and 
get the expected response. I can see in the logging that CXF is receiving the 
same response as cURL, but then blowing up on:

org.apache.cxf.ws.policy.PolicyVerificationInInterceptor handle SEVERE: Inbound 
policy verification failed: These policy alternatives can not be satisfied:
org.apache.cxf.ws.policy.PolicyException: These policy alternatives can not be 
satisfied: 
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}HttpBasicAuthentication

The response from the SOAP service does not include the Authorization header. 
Is that why this is happening? Why does CXF care about authentication on the 
inbound message? My client doesn’t have or require authentication… the service 
does.

Stepping through in the debugger shows that the AssertionInfoMap has 
ServiceModelPolicyProvider and Wsdl11AttachmentPolicyProvider instances 
available, but nothing referring to HTTP Basic Auth. Am I missing a dependency?

Here is my client code

public static void main(String[] args) {
        // Get a proxy for the SOAP endpoint. This is generated from their WSDL 
file as part of the Maven build.
        Zcustomer1 soap = new Zcustomer1();
        ZUDSCUSTOMER1 port = soap.getZcustomer1();
        
        LoggingInInterceptor logInbound = new LoggingInInterceptor();
        logInbound.setPrettyLogging(true);
        LoggingOutInterceptor logOutbound = new LoggingOutInterceptor();
        logOutbound.setPrettyLogging(true);
        
        Client cxf = ClientProxy.getClient(port);
        cxf.getInInterceptors().add(logInbound);
        cxf.getOutInterceptors().add(logOutbound);
        
        // The SOAP service uses HTTP Basic Authentication
        Map<String, Object> requestContext = ((BindingProvider) 
port).getRequestContext();
        requestContext.put(BindingProvider.USERNAME_PROPERTY, "username");
        requestContext.put(BindingProvider.PASSWORD_PROPERTY, "password");
        
        // Invoke the SOAP service
        String iKUNNR = "foo";
        KNA1 response = port.zudsCUSTOMER1(iKUNNR);
}


Here is the WSDL

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions targetNamespace="urn:sap-com:document:sap:rfc:functions" 
                                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
                                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
                                  
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
                                  
xmlns:wsoap12="http://schemas.xmlsoap.org/wsdl/soap12/"; 
                                  
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"; 
                                  
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"; 
                                  
xmlns:tns="urn:sap-com:document:sap:rfc:functions" 
                                  
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"; 
                                  
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";>

        <wsp:UsingPolicy wsdl:required="true"/>
        <wsp:Policy wsu:Id="BN__zcustomer1">
                <wsp:ExactlyOne>
                        <wsp:All>
                                <wsp:All 
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy";>
                                        <sp:TransportBinding 
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702";>
                                                <wsp:Policy>
                                                        <sp:TransportToken>
                                                                <wsp:Policy>
                                                                        
<wsp:Policy>
                                                                                
<sp:HttpBasicAuthentication/>
                                                                        
</wsp:Policy>
                                                                </wsp:Policy>
                                                        </sp:TransportToken>
                                                        <sp:AlgorithmSuite>
                                                                <wsp:Policy>
                                                                        
<sp:Basic128Rsa15/>
                                                                </wsp:Policy>
                                                        </sp:AlgorithmSuite>
                                                        <sp:Layout>
                                                                <wsp:Policy>
                                                                        
<sp:Strict/>
                                                                </wsp:Policy>
                                                        </sp:Layout>
                                                </wsp:Policy>
                                        </sp:TransportBinding>
                                </wsp:All>
                        </wsp:All>
                </wsp:ExactlyOne>
        </wsp:Policy>
        <wsdl:types>
                <xsd:schema attributeFormDefault="qualified" 
targetNamespace="urn:sap-com:document:sap:rfc:functions">
                        <xsd:simpleType name="char10">
                                <xsd:restriction base="xsd:string">
                                        <xsd:maxLength value="10"/>
                                </xsd:restriction>
                        </xsd:simpleType>
                        <xsd:complexType name="KNA1">
                                <xsd:sequence>
                                        <xsd:element name="KUNNR" 
type="tns:char10"/>
                                </xsd:sequence>
                        </xsd:complexType>
                        <xsd:element name="ZUDS_CUSTOMER1">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element name="I_KUNNR" 
type="tns:char10"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="ZUDS_CUSTOMER1Response">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element name="O_KNA1" 
type="tns:KNA1"/>
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                </xsd:schema>
        </wsdl:types>
        <wsdl:message name="ZUDS_CUSTOMER1">
                <wsdl:part name="parameters" element="tns:ZUDS_CUSTOMER1"/>
        </wsdl:message>
        <wsdl:message name="ZUDS_CUSTOMER1Response">
                <wsdl:part name="parameter" 
element="tns:ZUDS_CUSTOMER1Response"/>
        </wsdl:message>
        <wsdl:portType name="ZUDS_CUSTOMER1">
                <wsdl:operation name="ZUDS_CUSTOMER1">
                        <wsdl:input message="tns:ZUDS_CUSTOMER1"/>
                        <wsdl:output message="tns:ZUDS_CUSTOMER1Response"/>
                </wsdl:operation>
        </wsdl:portType>
        <wsdl:binding name="zcustomer1" type="tns:ZUDS_CUSTOMER1">
                <wsp:Policy>
                        <wsp:PolicyReference URI="#BN__zcustomer1"/>
                </wsp:Policy>
                <soap:binding transport="http://schemas.xmlsoap.org/soap/http"; 
style="document"/>
                <wsdl:operation name="ZUDS_CUSTOMER1">
                        <soap:operation 
soapAction="urn:sap-com:document:sap:rfc:functions:ZUDS_CUSTOMER1:ZUDS_CUSTOMER1Request"
 style="document"/>
                        <wsdl:input>
                                <soap:body use="literal"/>
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal"/>
                        </wsdl:output>
                </wsdl:operation>
        </wsdl:binding>
        <wsdl:service name="zcustomer1">
                <wsdl:port name="zcustomer1" binding="tns:zcustomer1">
                        <soap:address location="http://0.0.0.0/zcustomer1"/>
                </wsdl:port>
        </wsdl:service>
</wsdl:definitions>



Reply via email to