You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by "Ángel L. García Sánchez" <el...@gmail.com> on 2015/06/08 12:51:39 UTC

Error when parsing a SOAP Fault: Invalid QName in mapping

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.

Re: Error when parsing a SOAP Fault: Invalid QName in mapping

Posted by Aki Yoshida <el...@gmail.com>.
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" <el...@gmail.com>:
> 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" <el...@gmail.com>:
>
> 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" <el...@gmail.com>:
>
> 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.
>
>

Re: Error when parsing a SOAP Fault: Invalid QName in mapping

Posted by "Ángel L. García Sánchez" <el...@gmail.com>.
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" <el...@gmail.com>:
>> 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" <el...@gmail.com>:
>>>>> 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.
>>>


Re: Error when parsing a SOAP Fault: Invalid QName in mapping

Posted by Aki Yoshida <el...@gmail.com>.
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" <el...@gmail.com>:
> 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" <el...@gmail.com>:
>>>>
>>>> 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.
>>
>>
>

Re: Error when parsing a SOAP Fault: Invalid QName in mapping

Posted by "Ángel L. García Sánchez" <el...@gmail.com>.
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" 
>> <el...@gmail.com>:
>>> 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.
>


Re: Error when parsing a SOAP Fault: Invalid QName in mapping

Posted by Aki Yoshida <el...@gmail.com>.
Hi,
take a look at cxf's transform feature here
http://cxf.apache.org/docs/transformationfeature.html#TransformationFeature-Replacingtextcontent

you need there
<entry key="faultcode" value="faultcode=SOAP-ENV:Client"/>

this will map the original invalid fault from the server into the
following valid fault so that it can be accepted by the cxf client
<SOAP-ENV:Fault><faultcode>SOAP-ENV:Client</faultcode><faultstring>Se
ha proporcionado un token de seguridad
erróneo</faultstring></SOAP-ENV:Fault>

regards, aki

2015-06-08 17:40 GMT+02:00 "Ángel L. García Sánchez" <el...@gmail.com>:
> 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" <el...@gmail.com>:
>>>
>>> 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.
>
>

Re: Error when parsing a SOAP Fault: Invalid QName in mapping

Posted by "Ángel L. García Sánchez" <el...@gmail.com>.
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" <el...@gmail.com>:
>> 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.


Re: Error when parsing a SOAP Fault: Invalid QName in mapping

Posted by "Ángel L. García Sánchez" <el...@gmail.com>.
Hi Colm.

I can't get access to server side. I only develop the client.

Thanks and best regards.

El 08/06/15 a las 15:28, Colm O hEigeartaigh escribió:
>
> What is the stacktrace of the exception on the service side? Is it in 
> code that you wrote or in CXF/WSS4J?
>
> Colm.
>
> On Mon, Jun 8, 2015 at 2:26 PM, Aki Yoshida <elakito@gmail.com 
> <ma...@gmail.com>> wrote:
>
>     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"
>     <elpilli@gmail.com <ma...@gmail.com>>:
>     > 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.
>
>
>
>
> -- 
> Colm O hEigeartaigh
>
> Talend Community Coder
> http://coders.talend.com


Re: Error when parsing a SOAP Fault: Invalid QName in mapping

Posted by Colm O hEigeartaigh <co...@apache.org>.
What is the stacktrace of the exception on the service side? Is it in code
that you wrote or in CXF/WSS4J?

Colm.

On Mon, Jun 8, 2015 at 2:26 PM, Aki Yoshida <el...@gmail.com> wrote:

> 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" <el...@gmail.com>:
> > 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.
>



-- 
Colm O hEigeartaigh

Talend Community Coder
http://coders.talend.com

Re: Error when parsing a SOAP Fault: Invalid QName in mapping

Posted by Aki Yoshida <el...@gmail.com>.
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" <el...@gmail.com>:
> 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.