Hi,
I hoped the info below would be enough. Here the cxf client config and code of 
usage.
Spring config: I have 3 cxf spring config files, listed below:
A) cxf-general.xml that includes the B) cxf-client.xml and C) cxf-tls.xml

I hope you can see the cause of this error (see subject mail). If more 
config/code is needed, please let me know.


Code usage:
------------------
        private final DeliveryService digiDelivery; // injected by Spring, 
contained in client spring config below.
        private Response deliver(final Request request) {
                return this.digiDelivery.deliver(request);
        }

// The class DeliveryService is generated:

@WebService(targetNamespace = "http://Bla/1.2/";, name = "DeliveryService")
@XmlSeeAlso({ObjectFactory.class })
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface DeliveryService {

        @WebResult(name = "response", targetNamespace = "http://Bla/1.2/";, 
partName = "response")
        @Action(output = "http://Bka/1.2/DeliveryService/deliveryResponse";, 
fault = { @FaultAction(className = DeliveryServiceFault.class, value = 
"http://Bla/1.2/DeliveryService/delivery/Fault/";) })
        @WebMethod(action = "http://Bla/1.2/DeliveryService/Request";)
        public Response aanleveren(@WebParam(partName = "request", name = 
"request", targetNamespace = "http://Bla/services/1.2/";) Request request) 
throws AanleverServiceFault;
}
------------------



A) CXF-general.xml:
------------------
        <import resource="cxf-tls.xml" />
        <import resource="cxf-client.xml" />

        <!-- General CXF config:
                1) http://cxf.apache.org/docs/configuration.html
        -->
     <cxf:bus>
        <cxf:features>
            <cxf:logging/>
            
            <policy:policies/>
            
            <!-- WS-addressing required, see 2) -->
            <wsa:addressing/> <!-- see: 
http://en.wikipedia.org/wiki/WS-Addressing -->
        </cxf:features>
    </cxf:bus>
------------------



B) CXF-tls.xml:
----------------------
    <http:conduit name="{http://bla/1.2/}AanleverService_V1_2Port.http-conduit";>
                <http:tlsClientParameters>
                        
                        <!-- "keyPassword" is the password to access/retrieve 
the private key in the key store it self -->
                        <sec:keyManagers 
keyPassword="${tls.keystore.private.key.pwd}" > 
                        <!-- The keystore that contains our private key to 
encrypt send data (1 key only) -->
                                <sec:keyStore 
resource="${tls.keystore.private}" password="${tls.keystore.private.pwd}" /> 
                        </sec:keyManagers>
                        
                        <sec:trustManagers> 
                        <!-- This list of certificates that is used to decide 
whether or not to trust certificates -->
                                <sec:keyStore 
resource="${tls.keystore.trusted}" password="${tls.keystore.trusted.pwd}"/>
                        </sec:trustManagers>
                        
                        <sec:cipherSuitesFilter>
                                <sec:include>.*_EXPORT_.*</sec:include>
                                <sec:include>.*_EXPORT1024_.*</sec:include>
                                <sec:include>.*_WITH_DES_.*</sec:include>
                                <sec:include>.*_WITH_AES_.*</sec:include>
                                <sec:include>.*_WITH_NULL_.*</sec:include>
                                <sec:exclude>.*_DH_anon_.*</sec:exclude>
                        </sec:cipherSuitesFilter>
                </http:tlsClientParameters>
    </http:conduit>
----------------------



C) CXF client spring config (don't own the server side):
----------------------
         <jaxws:client id="digiDelivery" serviceClass="DeliverService" 
address="${ deliver.url}">
        <jaxws:inInterceptors> 
            <ref bean="SigningInterceptorIn"/>
            <ref bean="wsaSignaturePartsInterceptor"/>
        </jaxws:inInterceptors>
        
        <jaxws:outInterceptors>
            <ref bean="SigningInterceptorOut"/>
                        <ref bean="wsaSignaturePartsInterceptor"/>
        </jaxws:outInterceptors>

        <jaxws:properties>
                <entry key="mtom-enabled" value="true"/> 
          <entry key="signatureParts" 
value="{Element}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}Timestamp;
                                                
{Element}{http://schemas.xmlsoap.org/soap/envelope/}Body"/>
        </jaxws:properties>
        
        <!--Tried this, but had no effect: jaxws:binding>
                  <soap:soapBinding version="1.1"/> 
                    </jaxws:binding-->
    </jaxws:client>

        <!-- It will dynamically set the WSA signing parts if required, 
depending if they contain any value. 
  See the class for details -->
        <bean id="wsaSignaturePartsInterceptor" 
class="DynamicWsaSignaturePartsInterceptor"/>
    <!-- Required to Sign an outgoing message.  -->  
    <bean id="SigningInterceptorOut" 
class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
        <constructor-arg>
            <map>
                <entry key="action" value="Timestamp Signature"/>
                <entry key="timeToLive" value="300" /> 
                <entry key="user" 
value="${deliver.keystore.private.sign.key.alias}"/>
                
                <!-- Used to retrieve the passwords of an alias. -->
                <entry key="passwordCallbackRef" value-ref="pwCallback"/> 

                 <!-- Required to send the signature certificate a long with 
the message -->
                <entry key="signatureKeyIdentifier" value="DirectReference" />

                                        <!-- A reference to the Crypto security 
properties -->                
                <entry key="signaturePropRefId" value="cryptoProperties"/>
                <entry key="cryptoProperties" value-ref="cryptoProperties"/>
            </map>
        </constructor-arg>
    </bean>
    
    <!-- Required to validate an incoming signed message. -->  
    <bean id="SigningInterceptorIn" 
class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
        <constructor-arg>
            <map>
                <entry key="action" value="Timestamp Signature"/>
                <entry key="signaturePropRefId" value="cryptoProperties"/>
                <entry key="cryptoProperties" value-ref="cryptoProperties"/>
            </map>
        </constructor-arg>
    </bean>

        <!-- A callback that returns the keystore password of an alias. -->
        <bean id="pwCallback" class="ClientKeystorePasswordCallback">
           <property name="passwords">
             <util:map key-type="java.lang.String" 
value-type="java.lang.String">
               <entry key="${deliver.keystore.private.sign.key.alias}" 
value="${deliver.keystore.private.sign.key.pwd}"/>
             </util:map>
           </property>
        </bean>

        <!-- Ref: 
                1) http://ws.apache.org/wss4j/config.html
                2) https://sites.google.com/site/ddmwsst/ws-security-impl  -->
        <util:properties id="cryptoProperties">
        <!-- The private keystore info to sign the message -->
        <prop 
key="org.apache.ws.security.crypto.merlin.keystore.file">${deliver.keystore.private}</prop>
        <prop 
key="org.apache.ws.security.crypto.merlin.keystore.password">${deliver.keystore.private.pwd}</prop>
        <!-- The trusted keystore info for unsigning received messages -->
        <prop 
key="org.apache.ws.security.crypto.merlin.truststore.file">${deliver.keystore.trusted}</prop>
        <prop 
key="org.apache.ws.security.crypto.merlin.truststore.password">${deliver.keystore.trusted.pwd}</prop>
        </util:properties>

----------------------


> -----Original Message-----
> From: Freeman Fang [mailto:[email protected]]
> Sent: woensdag 8 mei 2013 5:00
> To: [email protected]
> Subject: Re: A SOAP 1.2 message is not valid when sent to a SOAP 1.1
> only endpoint
> 
> Hi,
> 
> You need append your client side configuration and code so that we can
> take a look
> -------------
> Freeman(Yue) Fang
> 
> Red Hat, Inc.
> FuseSource is now part of Red Hat
> Web: http://fusesource.com | http://www.redhat.com/
> Twitter: freemanfang
> Blog: http://freemanfang.blogspot.com
> http://blog.sina.com.cn/u/1473905042
> weibo: @Freeman??
> 
> On 2013-5-8, at ??2:20, Ed Bras wrote:
> 
> > Hi All,
> > I don't know what I changed anymore :(... But I have ended up with
> > this exception which I don't seem to solve:
> > ---
> > Caused by: javax.xml.ws.soap.SOAPFaultException: A SOAP 1.2 message
> is
> > not valid when sent to a SOAP 1.1 only endpoint.
> > ---
> >
> > I am using CXF 2.7.4 and have the classes generated from the wsdl. I
> > am using the MTOM and WSS4JOutInterceptor for signing outgoing
> messages.
> >
> > The wsdl contains things like:
> > ----
> > <wsdl:definitions ... xmlns:soap11="http ... > <soap11:binding
> > <soap11:operation soap11:address
> > ----
> >
> > So that all sound like soap 1.1, but somehow soap 1.2 is being used
> in
> > the client for the created message. I have added this in my jaxws
> > client config, but it had no effect.
> > ----
> > <jaxws:binding>
> >        <soap:soapBinding version="1.1"/> </jaxws:binding>
> > ----
> >
> > Why does CXF try to use soap 1.2 at all?
> >
> > Please some advice on how to solve this?
> > - Ed
> >


Reply via email to