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.