the transform feature is configured at your client and runs on your client.
you don't need to change anything at the server.
if you want a quick and good solution, that is the recommended way.
the only benefit of writing an interceptor will be that you will learn
a lot about how CXF works because you will be spending a long time
with it.

regards, aki


2015-06-15 14:42 GMT+02:00 "Ángel L. García Sánchez" <[email protected]>:
> Hi.
>
> I know you didn't told that. But i can't modify server response, the server
> is in a external company.
> I thought that write a custom interceptor maybe was a good solution. I have
> no more ideas.
>
> Thanks and bests regards.
>
> El 15/06/15 a las 14:17, Aki Yoshida escribió:
>
> I didn't tell you to write an interceptor.
> please see my previous reply.
>
> 2015-06-15 14:10 GMT+02:00 "Ángel L. García Sánchez" <[email protected]>:
>
> Hi.
>
> To avoid error with namespace I've writen a custom interceptor, now my
> client unmarshall the fault without namespace exception, but i get this
> another one:
>
> 14:06:44.658 [ERROR] [http-nio-8080-exec-2]
> es.pilli.teu.service.DefaultEnvioBoeService - Error al consultar el envío.
> javax.xml.ws.soap.SOAPFaultException: Invalid SOAP fault content
>     at
> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:161)
> ~[cxf-rt-frontend-jaxws-3.1.0.jar:3.1.0]
>     at com.sun.proxy.$Proxy84.consultaEnvio(Unknown Source) ~[na:na]
>     at
> es.pilli.teu.service.DefaultEnvioBoeService.consultarEnvio(DefaultEnvioBoeService.java:503)
> ~[main/:na]
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> ~[na:1.7.0_67]
>     at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> ~[na:1.7.0_67]
>     at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> ~[na:1.7.0_67]
>     at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_67]
>     at
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
> [spring-aop-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:201)
> [spring-aop-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at com.sun.proxy.$Proxy92.consultarEnvio(Unknown Source) [na:na]
>     at es.pilli.teu.web.EnvioController.crearEnvio(EnvioController.java:78)
> [main/:na]
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> ~[na:1.7.0_67]
>     at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> ~[na:1.7.0_67]
>     at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> ~[na:1.7.0_67]
>     at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_67]
>     at
> org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
> [spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at
> org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
> [spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at
> org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
> [spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at
> org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
> [spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at
> org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
> [spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at
> org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
> [spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at
> org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
> [spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at
> org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
> [spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at
> org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
> [spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at
> org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
> [spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
> [spring-webmvc-4.1.6.RELEASE.jar:4.1.6.RELEASE]
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
> [tomcat-embed-websocket-8.0.23.jar:8.0.23]
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1521)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1478)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> [na:1.7.0_67]
>     at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> [na:1.7.0_67]
>     at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
> [tomcat-embed-core-8.0.23.jar:8.0.23]
>     at java.lang.Thread.run(Thread.java:745) [na:1.7.0_67]
> Caused by: org.apache.cxf.binding.soap.SoapFault: Invalid SOAP fault content
>     at
> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:86)
> ~[cxf-rt-bindings-soap-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:52)
> ~[cxf-rt-bindings-soap-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:41)
> ~[cxf-rt-bindings-soap-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
> ~[cxf-rt-bindings-soap-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
> ~[cxf-rt-bindings-soap-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:802)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1642)
> ~[cxf-rt-transports-http-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1533)
> ~[cxf-rt-transports-http-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1336)
> ~[cxf-rt-transports-http-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:56)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:215)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:652)
> ~[cxf-rt-transports-http-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:516)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:425)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:326)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:279)
> ~[cxf-core-3.1.0.jar:3.1.0]
>     at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
> ~[cxf-rt-frontend-simple-3.1.0.jar:3.1.0]
>     at
> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:139)
> ~[cxf-rt-frontend-jaxws-3.1.0.jar:3.1.0]
>     ... 47 common frames omitted
>
>
> My custom interceptor code:
>
> package es.pilli.teu.ws;
>
> import javax.xml.namespace.QName;
> import javax.xml.stream.XMLStreamException;
> import javax.xml.stream.XMLStreamReader;
>
> import org.apache.cxf.binding.soap.Soap11;
> import org.apache.cxf.binding.soap.SoapFault;
> import org.apache.cxf.binding.soap.SoapMessage;
> import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
> import org.apache.cxf.common.i18n.Message;
> import org.apache.cxf.common.logging.LogUtils;
> import org.apache.cxf.interceptor.ClientFaultConverter;
> import org.apache.cxf.interceptor.Fault;
> import org.apache.cxf.phase.Phase;
> import org.apache.cxf.staxutils.StaxUtils;
> import org.w3c.dom.Element;
>
>
> public class SoapFaultInInterceptor extends AbstractSoapInterceptor {
>     private static final java.util.logging.Logger LOG =
> LogUtils.getL7dLogger(SoapFaultInInterceptor.class);
>
>     public SoapFaultInInterceptor() {
>         super(Phase.UNMARSHAL);
>         addBefore(ClientFaultConverter.class.getName());
>     }
>
>     @Override
>     public void handleMessage(SoapMessage message) throws Fault {
>         XMLStreamReader reader = message.getContent(XMLStreamReader.class);
>         message.setContent(Exception.class, unmarshalFault(message,
> reader));
>     }
>
>     public static SoapFault unmarshalFault(SoapMessage message,
> XMLStreamReader reader) {
>         String exMessage = "";
>         QName faultCode = null;
>         String role = null;
>         Element detail = null;
>
>         try {
>             while (reader.nextTag() == XMLStreamReader.START_ELEMENT) {
>                 if (reader.getLocalName().equals("faultcode")) {
>
>                     String value = reader.getElementText();
>                     int index = value.indexOf(":");
>
>                     if (index == -1) {
>                         faultCode = new QName(value);
>                     } else {
>                         String prefix = value.substring(0, index);
>                         String localName = value.substring(index + 1);
>                         String nsUri =
> "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";;
>
>                         faultCode = new QName(nsUri, localName, prefix);
>                     }
>                 } else if (reader.getLocalName().equals("faultstring")) {
>                     exMessage = reader.getElementText();
>                 } else if (reader.getLocalName().equals("faultactor")) {
>                     role = reader.getElementText();
>                 } else if (reader.getLocalName().equals("detail")) {
>                     //XMLStreamReader newReader = new
> DepthXMLStreamReader(reader);
>                     detail = StaxUtils.read(reader).getDocumentElement();
>                 }
>             }
>         } catch (XMLStreamException e) {
>             throw new SoapFault("Could not parse message.", e,
> message.getVersion().getSender());
>         }
>         // if the fault's content is invalid and faultCode is not found,
> blame the receiver
>         if (faultCode == null) {
>             faultCode = Soap11.getInstance().getReceiver();
>             exMessage = new Message("INVALID_FAULT", LOG).toString();
>         }
>         SoapFault fault = new SoapFault(exMessage, faultCode);
>         fault.setDetail(detail);
>         fault.setRole(role);
>
>         return fault;
>     }
> }
>
> Can anyone help me?
>
> Thanks and best regards.
>
>
>
>
> El 08/06/15 a las 17:40, "Ángel L. García Sánchez" escribió:
>
> Hi Aki.
>
> The problem is that i don't get access to server side.
> Can i avoid this error with namespace?
>
> Thanks and best regards.
>
> El 08/06/15 a las 15:26, Aki Yoshida escribió:
>
> The error message says your server is returning an invalid SOAP fault
> (the wsse prefix is not bound).
> It should be returning something like ...<faultcode
> xmlns:wssec="...">wsse:InvalidSecurityToken</faultcode> ....
>
> and your CXF client is complaining about it.
>
> 2015-06-08 12:51 GMT+02:00 "Ángel L. García Sánchez" <[email protected]>:
>
> Hi.
>
> I'm developing a web service client with Apache CXF 3.1.0 (also test
> with
> 2.7.16). When the soap message validation fails on server I get a soap
> fault
> like this:
>
> Payload: <?xml version="1.0" encoding="UTF-8"?>
> <SOAP-ENV:Envelope
>
> xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>wsse:InvalidSecurityToken</faultcode><faultstring>Se
> ha proporcionado un token de seguridad
>
> erróneo</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
>
> But when my client tries to unmarshall the fault I get this exception:
>
> java.lang.RuntimeException: Invalid QName in mapping:
> wsse:InvalidSecurityToken
>      at
> org.apache.cxf.staxutils.StaxUtils.readQName(StaxUtils.java:1839)
> ~[cxf-api-2.7.16.jar:2.7.16]
>      at
>
> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:64)
> ~[cxf-rt-bindings-soap-2.7.16.jar:2.7.16]
>      at
>
> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:51)
> ~[cxf-rt-bindings-soap-2.7.16.jar:2.7.16]
>      at
>
> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:40)
> ~[cxf-rt-bindings-soap-2.7.16.jar:2.7.16]
>      at
>
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
> [cxf-api-2.7.16.jar:2.7.16]
>      at
>
> org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113)
> [cxf-api-2.7.16.jar:2.7.16]
>      at
>
> org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
> [cxf-rt-bindings-soap-2.7.16.jar:2.7.16]
>      at
>
> org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
> [cxf-rt-bindings-soap-2.7.16.jar:2.7.16]
>      at
>
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
> [cxf-api-2.7.16.jar:2.7.16]
>      at
> org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:849)
> [cxf-api-2.7.16.jar:2.7.16]
> ............
>
> How to get around this error?
>
> Thanks and best regards.
>
>

Reply via email to