Maybe you can tell me where (which class/component) is responsible of striping off this content header type info in the soap response (see my xml response below that contains this info). As such that I can search why this doesn't occur?
For some reason it's not removed Basically what I did was following the upgrade steps: changes the namespace/packages (not using the new stax WSS4J interceptor). I think I am missing something (in the stacktrace I see that a Stax readers is processing the xml, but I am not sure that was already there in the 2.7.x verion) - Ed > -----Original Message----- > From: Ed Bras [mailto:z...@debrasjes.com] > Sent: woensdag 10 september 2014 18:23 > To: cohei...@apache.org > Cc: users@cxf.apache.org > Subject: RE: Cont: upgrading cxf client to 3.0.1 > > @Colm: thanks: > > > > > No I meant the opposite. SignedParts only means that a particular > header must be signed IF it is present. Hence the presence of the > header itself is optional. > Is this new in 3.0? As I remember that I got an exception in 2.X if a > header wasn't present, and that was the reason why David created this > interceptor constructor that I use. > > > With regards to the other issue, could you create a test-case + I'll > take a look? > > I appreciate the help, but would like to wait with this till a kind-of > of last-resort. It's heavily integrated in client code that I am not > allowed to share, with private key's and other stuff that are a bit > hard to simulate. I am also a bit behind on schedule for the client, so > I give it a few more tries else I have to revert back to the 2.X > version for the short time and will have a look at using version 3.0 > after the client dead lines. > > If you could point me in the right direction by looking at the > config/errors below, I would appreciate that. > > > > - Ed > > > > > > From: Colm O hEigeartaigh [mailto:cohei...@apache.org] > Sent: woensdag 10 september 2014 17:44 > To: Ed Bras > Cc: users@cxf.apache.org > Subject: Re: Cont: upgrading cxf client to 3.0.1 > > > > > If I understand you correctly it's not possible to use optional > header fields in the Signature with SecurityPolicy. > > As such I continue using the interceptor as explained by David (see > link below). > > No I meant the opposite. SignedParts only means that a particular > header must be signed IF it is present. Hence the presence of the > header itself is optional. > > With regards to the other issue, could you create a test-case + I'll > take a look? > > > Colm. > > > > On Wed, Sep 10, 2014 at 4:05 PM, Ed Bras <z...@debrasjes.com> wrote: > > Thanks @Colm > If I understand you correctly it's not possible to use optional header > fields in the Signature with SecurityPolicy. > As such I continue using the interceptor as explained by David (see > link below). > > However, when I use the new WSS4JStaxOutInterceptor interceptor it > doesn't contain all the Signature info. As such, for now I continue > using the WSS4JOutInterceptor that I was using before. It does contain > all the signed info. > However, I then get xml validation error, in the cxf client, when > reading the soap response from the remote end point. > This is because the response contains still some raw mime type kind of > info. See below for the exact output. > This error occurs when the LoggingIn interceptor tries to output the > message. > I tried to solve this by changing the order of the client interceptors, > but it has no effect. > (Btw: When I disable the LoggingIn interceptor, I get the same error, > but with different content (the sec:cipherSuitesFilter content), but it > also has the mime type header info) Below I also listed the client > Spring config (works in cxf 2.X). And below the exception. > How can I solve this? (how/when is this raw "mime type" info stripped > off) > > Note: When I use the WSS4JStaxOutInterceptor interceptor, I don't get > this mime-type kind of error. So I am not sure when direction to go: > Stax and solve the sign issues, or the none-stax and solve the mime > type issues :( Maybe I am mixing them both, but I can't seem to find > it. > > - Ed > > > The received response containing invalid xml output: > -------------------- > --uuid:36d7c0e6-ad6e-4382-99a3-8401418deee9 > Content-Type: text/xml; charset=UTF-8 > Content-Transfer-Encoding: binary > Content-ID: > <root.message @ cxf.apache.org> > > <?xml version="1.0" encoding="UTF-8"?> > <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema- > instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" > xmlns:date="http://exslt.org/dates-and-times" > xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"> > <soapenv:Header /> > <soapenv:Body> > ........... > ........... > </soapenv:Body> > </soapenv:Envelope> > -------------------- > > > The cxf client config: > -------------------- > <jaxws:client id="preProductionDigipoortAanleveren" > serviceClass="AanleverServiceV12" address="${url.delivery}"> > > <jaxws:inInterceptors> > <ref bean="preProductionSigningInterceptorIn"/> > <ref bean="preProductionWsaSignaturePartsInterceptor"/> > <ref bean="logInbound"/> > </jaxws:inInterceptors> > > <jaxws:outInterceptors> > <ref bean="preProductionSigningInterceptorOut"/> > <ref bean="preProductionWsaSignaturePartsInterceptor"/> > <ref bean="preProductionLoggingOutInterceptor" /> > <ref bean="logOutbound"/> > </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 <http://docs.oasis- > open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility- > 1.0.xsd%7dTimestamp> ; > > {Element}{http://schemas.xmlsoap.org/soap/envelope/}Body > <http://schemas.xmlsoap.org/soap/envelope/%7dBody> "/> > </jaxws:properties> > </jaxws:client> > > <bean id="logInbound" > class="org.apache.cxf.interceptor.LoggingInInterceptor" /> > <bean id="logOutbound" > class="org.apache.cxf.interceptor.LoggingOutInterceptor" /> > > <!-- It will dynamically set the WSA signing parts if required, > depending if they contain any value. See the class for details --> > <bean id="preProductionWsaSignaturePartsInterceptor" > class="SimpleDynamicWsaSignaturePartsInterceptor"/> > > > <bean id="preProductionSigningInterceptorOut" > class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"> > <!--bean id="preProductionSigningInterceptorOut" > class="org.apache.cxf.ws.security.wss4j.WSS4JStaxOutInterceptor"--> > <constructor-arg> > <map> > <entry key="action" value="Timestamp Signature"/> > <entry key="timeToLive" value="300" /> <!-- Timestamp > TTL in seconds, indicates how long the message is valid --> > <entry key="user" > value="${pre.production.delivery.keystore.private.sign.key.alias}"/> > > <entry key="passwordCallbackRef" value- > ref="preProductionPwdCallback"/> > <entry key="signatureKeyIdentifier" > value="DirectReference" /> > <entry key="signaturePropRefId" > value="cryptoProperties"/> > <entry key="cryptoProperties" value- > ref="preProductionCryptoProperties"/> > </map> > </constructor-arg> > </bean> > > <bean id="preProductionSigningInterceptorIn" > class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> > <!--bean id="preProductionSigningInterceptorIn" > class="org.apache.cxf.ws.security.wss4j.WSS4JStaxInInterceptor"--> > <constructor-arg> > <map> > <entry key="action" value="Timestamp Signature"/> > <entry key="signaturePropRefId" > value="cryptoProperties"/> > <entry key="cryptoProperties" value- > ref="preProductionCryptoProperties"/> > </map> > </constructor-arg> > </bean> > > <bean id="preProductionPwdCallback" > class="com.ited.cxf.ClientKeystorePasswordCallback"> > <property name="passwords"> > <util:map key-type="java.lang.String" value- > type="java.lang.String"> > <entry key="${private.sign.key.alias}" value="${ > private.sign.key.pwd}"/> > </util:map> > </property> > </bean> > > <util:properties id="preProductionCryptoProperties"> > <prop > key="org.apache.wss4j.crypto.merlin.keystore.file">${keystore.private}< > /prop> > <prop > key="org.apache.wss4j.crypto.merlin.keystore.password">${keystore.priva > te.pwd}</prop> > > <prop > key="org.apache.wss4j.crypto.merlin.truststore.file">${keystore.trusted > }</prop> > <prop > key="org.apache.wss4j.crypto.merlin.truststore.password">${keystore.tru > sted.pwd}</prop> > </util:properties> > > -------------------- > > > The stracktrace: > ------------------- > at > org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMe > ssage(ReadHeadersInterceptor.java:259) ~[cxf-rt-bindings-soap- > 3.0.1.jar:3.0.1] > at > org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMe > ssage(ReadHeadersInterceptor.java:62) ~[cxf-rt-bindings-soap- > 3.0.1.jar:3.0.1] > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptor > Chain.java:307) [cxf-core-3.0.1.jar:3.0.1] > at > org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:798) > ~[cxf-core-3.0.1.jar:3.0.1] > at > org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRes > ponseInternal(HTTPConduit.java:1636) ~[cxf-rt-transports-http- > 3.0.1.jar:3.0.1] > at > org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRes > ponse(HTTPConduit.java:1525) ~[cxf-rt-transports-http-3.0.1.jar:3.0.1] > at > org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTT > PConduit.java:1330) ~[cxf-rt-transports-http-3.0.1.jar:3.0.1] > at > org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutp > utStream.java:56) ~[cxf-core-3.0.1.jar:3.0.1] > at > org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:215) > ~[cxf-core-3.0.1.jar:3.0.1] > at > org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) > ~[cxf-core-3.0.1.jar:3.0.1] > at > org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:638) > ~[cxf-rt-transports-http-3.0.1.jar:3.0.1] > at > org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEnding > Interceptor.handleMessage(MessageSenderInterceptor.java:62) ~[cxf-core- > 3.0.1.jar:3.0.1] > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptor > Chain.java:307) [cxf-core-3.0.1.jar:3.0.1] > at > org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514) ~[cxf- > core-3.0.1.jar:3.0.1] > at > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423) ~[cxf- > core-3.0.1.jar:3.0.1] > at > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:326) ~[cxf- > core-3.0.1.jar:3.0.1] > at > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:279) ~[cxf- > core-3.0.1.jar:3.0.1] > at > org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) > ~[cxf-rt-frontend-simple-3.0.1.jar:3.0.1] > at > org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:137) > ~[cxf-rt-frontend-jaxws-3.0.1.jar:3.0.1] > at com.sun.proxy.$Proxy72.aanleveren(Unknown Source) ~[na:na] > .... > ... > Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected > character '-' (code 45) in prolog; expected '<' > at [row,col {unknown-source}]: [3,1] > at > com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:64 > 7) ~[woodstox-core-asl-4.4.0.jar:4.4.0] > at > com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java > :2054) ~[woodstox-core-asl-4.4.0.jar:4.4.0] > at > com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1131) > ~[woodstox-core-asl-4.4.0.jar:4.4.0] > at > com.ctc.wstx.sr.BasicStreamReader.nextTag(BasicStreamReader.java:1154) > ~[woodstox-core-asl-4.4.0.jar:4.4.0] > at > org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMe > ssage(ReadHeadersInterceptor.java:158) ~[cxf-rt-bindings-soap- > 3.0.1.jar:3.0.1] > ... 58 common frames omitted > ------------------- > > > > > > -----Original Message----- > > From: Colm O hEigeartaigh [mailto:cohei...@apache.org] > > Sent: woensdag 10 september 2014 10:41 > > To: Ed Bras > > Cc: users@cxf.apache.org > > Subject: Re: Cont: upgrading cxf client to 3.0.1 > > > > > > However WS-SecurityPolicy "SignedParts" should meet your > > > > requirements > > > How can I indicate that a certain signed part (like the RelatesTo > > > field) is optional? > > > > > > I thought this isn't possible and this was the reason of David's > > solution: > > > > > > http://davidvaleri.wordpress.com/2010/09/15/signing-ws-addressing- > > head > > > ers-in-apache-cxf/ > > > > > > > No, SignedParts only signs an Element (or enforces that it is > signed) > > if it is present in the request. > > > > Colm. > > > > > > > > > > -----Original Message----- > > > > From: Colm O hEigeartaigh [mailto:cohei...@apache.org] > > > > Sent: dinsdag 9 september 2014 19:47 > > > > To: users@cxf.apache.org > > > > Subject: Re: Cont: upgrading cxf client to 3.0.1 > > > > > > > > OPTIONAL_SIGNATURE_PARTS only works with the older approach of > > > > specifying "actions" for security - it doesn't work with WS- > > > > SecurityPolicy. However WS-SecurityPolicy "SignedParts" should > > > > meet your requirements. With regards to your other question, I > > > > think you need to create a testcase that reproduces the > problem... > > > > > > > > Colm. > > > > > > > > On Tue, Sep 9, 2014 at 4:37 PM, Ed Bras <z...@debrasjes.com> > wrote: > > > > > > > > > Please some advice on the following cxf client config: > > > > > > > > > > After upgrading to 3.0.1. The security isn't included as it > > should. > > > > > To solve this I currently try to use WS-SecurityPolicy auto > > config > > > > > such that it's automatically included. > > > > > Before I did this manual as I have optional filled fields that > > > > > needed to be included in the signature, I used the solution as > > explained in: > > > > > > > > > > http://davidvaleri.wordpress.com/2010/09/15/signing-ws- > > addressing- > > > > head > > > > > ers-in > > > > > -apache-cxf/ > > > > > I want to use the new WSS4J 2.0 OPTIONAL_SIGNATURE_PARTS as an > > > > alternative. > > > > > > > > > > Anyway: for some reason the policy info isn't used from the > > > > > wsdl, as such not used/included in the soap message. > > > > > I think because the wsdl location isn't known, so I added the > > > > > wsdLocation to the client, but then it complaints it can't find > > > > > the service definition. > > > > > How do I solve this? See the config below. > > > > > > > > > > Note: I define the serviceClass and address manually in the > > config > > > > > below as the Service and Port name in the wsdl are the same and > > > > > CXF didn't like that (at least not with version 2.X). > > > > > In the past I dropped a question about it in SO: > > > > > > > > > > http://stackoverflow.com/questions/13591514/how-to-deal-with- > > same- > > > > serv > > > > > ice-an > > > > > d-port-name-in-cxf > > > > > > > > > > > > > > > The client config snippet: > > > > > ------------------- > > > > > <jaxws:client id="preProductionClient" > > > > > serviceClass="com.bla.service.DeliveryServiceV12" > > > > > > > > > > address="https://preprod.bla.nl/wus/2.0/deliveryservice/1.2" > > > > > wsdlLocation="/wsdl/DeliverPreProd_1.2.wsdl"> > > > > > ------------ > > > > > > > > > > > > > > > The exception: > > > > > -------------- > > > > > Caused by: > > > > org.apache.cxf.service.factory.ServiceConstructionException: > > > > > Could not find definition for service {http:// > > > > > > > > > > > > https://preprod.bla.nl/wus/2.0/deliveryservice/1.2/}DeliveryServiceV12 > <https://preprod.bla.nl/wus/2.0/deliveryservice/1.2/%7dDeliveryServiceV > 12> . > > > > > -------------- > > > > > > > > > > - Ed > > > > > > > > > > > > > > > > > > > > > > -- > > > > Colm O hEigeartaigh > > > > > > > > Talend Community Coder > > > > http://coders.talend.com > > > > > > > > > > > > -- > > Colm O hEigeartaigh > > > > Talend Community Coder > > http://coders.talend.com > > > > > -- > Colm O hEigeartaigh > > Talend Community Coder > http://coders.talend.com