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