Hi,

What's the 
DynamicWsaSignaturePartsInterceptor 
like?

Also, could you please append the client code where you send out request?

Btw, now MTOM + WS-Security does not work together in CXF,  please remove 
<entry key="mtom-enabled" value="true"/>  from your configuration to see if it 
helps
-------------
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-9, at 下午3:15, Ed Bras wrote:

> 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