Hi and thanks for your reply. I'm sorry but I wasn't able to build a test case based on the given examples. The error isn't reproducible with the simple spring example because it is related to the SOAPHandler provided by the seamframework. The interceptor chain was changed by this handler in a way I didn't understood:
Interceptor chain without org.jboss.seam.webservice.SOAPRequestHandler: org.apache.cxf.interceptor.AttachmentInInterceptor org.apache.cxf.transport.https.CertConstraintsInterceptor org.apache.cxf.interceptor.StaxInInterceptor org.apache.cxf.binding.soap.saaj.SAAJInInterceptor$SAAJPreInInterceptor org.apache.cxf.frontend.WSDLGetInterceptor org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor org.apache.cxf.binding.soap.interceptor.SoapActionInInterceptor org.apache.cxf.binding.soap.interceptor.StartBodyInterceptor org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor org.apache.cxf.binding.soap.interceptor.MustUnderstandInterceptor ... Interceptor chain with org.jboss.seam.webservice.SOAPRequestHandler: ... org.apache.cxf.interceptor.AttachmentInInterceptor org.apache.cxf.transport.https.CertConstraintsInterceptor org.apache.cxf.interceptor.StaxInInterceptor org.apache.cxf.binding.soap.saaj.SAAJInInterceptor$SAAJPreInInterceptor org.apache.cxf.frontend.WSDLGetInterceptor org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor org.apache.cxf.binding.soap.interceptor.SoapActionInInterceptor org.apache.cxf.binding.soap.interceptor.StartBodyInterceptor org.apache.cxf.binding.soap.interceptor.MustUnderstandInterceptor org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor org.apache.cxf.jaxws.handler.logical.LogicalHandlerInInterceptor org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor ... I think the error is related to the different position of the MustUnderstandInterceptor or the LogicalHandlerInInterceptor. Using the SOAPHandler caused the firstChild-Property of the Node given to WSS4JInInterceptor.advanceBody being null and so no parameters were found afterwards. After removing the handler (removing the <jaxws:handler> tag) and adding a custom Interceptor for starting / finishing the lifecycle of seam it works like charm. Thanks, Dirk -----Ursprüngliche Nachricht----- Von: Colm O hEigeartaigh [mailto:[email protected]] Gesendet: Freitag, 6. Mai 2011 16:09 An: [email protected] Betreff: Re: WSS4JInInceptor breaks recieved SOAPMessage Hi, Could you supply a test-case for this? Colm. On Thu, May 5, 2011 at 2:46 PM, Dirk Rudolph <[email protected]> wrote: > Hi @all, > > > > I added the WSS4JInInterceptor to the endpoint configured as spring bean but > this caused a different processing of values received in the soap body. Can > anyone give me a hint what the problem in my configuration is. > > > > Additional informations: > > The hole service is working without the interceptor and with methods > requiring no parameters. > > I'm using cxf 2.4 with WSS4J 1.6 and UsernameToken authentication. > > > > Thanks, > > Dirk > > > > Endpoint config: > > <jaxws:endpoint id="PersonenSucheServiceEndpoint" > > implementor="#core_ws_PersonenSucheService" > address="/PersonenSuche"> > > <jaxws:inInterceptors> > > <bean > class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> > > <constructor-arg> > > <map> > > <entry key="action" value="UsernameToken" > /> > > <entry key="passwordType" > value="PasswordDigets" /> > > <entry key="passwordCallbackRef"> > > <ref > bean="core_ws_security_WebServiceAuthenticationCallback" /> > > </entry> > > </map> > > </constructor-arg> > > </bean> > > </jaxws:inInterceptors> > > <jaxws:handlers> > > <bean id="seamHandler" > class="org.jboss.seam.webservice.SOAPRequestHandler" /> > > </jaxws:handlers> > > <jaxws:features> > > <bean > class="org.apache.cxf.transport.common.gzip.GZIPFeature" /> > > <bean class="org.apache.cxf.feature.LoggingFeature" /> > > </jaxws:features> > > </jaxws:endpoint> > > > > SoapMessage: > > <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:ws="http://ws.core.ebbi.mms_dresden.de/"> > > <soapenv:Header><wsse:Security > xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecuri > ty-secext-1.0.xsd"><wsse:UsernameToken wsu:Id="UsernameToken-77" > xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurit > y-utility-1.0.xsd"><wsse:Username>[email protected]</wsse:Username>< > wsse:Password > Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token > -profile-1.0#PasswordText">*****</wsse:Password><wsse:Nonce > EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-m > essage-security-1.0#Base64Binary">ebrntIcuiXDmA0Mk9tC72Q==</wsse:Nonce><wsu: > Created>2011-05-05T13:40:07.949Z</wsu:Created></wsse:UsernameToken></wsse:Se > curity></soapenv:Header> > > <soapenv:Body> > > <ws:findPersonen> > > <ws:query>'az'</ws:query> > > </ws:findPersonen> > > </soapenv:Body> > > </soapenv:Envelope> > > > > ServiceInterface (only the head and the method) > > > > @WebService > > public interface PersonenSucheService { > > @WebMethod(action = "findPersonen") > > WSPerson[] findPersonen(@WebParam( > > name = "query", > > targetNamespace = NAMESPACE > > ) String query); > > } > > > > Stacktrace: > > org.apache.cxf.interceptor.Fault: wrong number of arguments while invoking > public de.mms_dresden.ebbi.core.ws.WSPerson[] > de.mms_dresden.ebbi.core.ws.impl.PersonenSucheServiceImpl.findPersonen(java. > lang.String) with params null. > > at > org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.j > ava:159) > > at > org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMet > hodInvoker.java:86) > > at > org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:1 > 33) > > at > org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:61) > > at > org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:7 > 5) > > at > org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInt > erceptor.java:58) > > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) > > at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) > > at java.util.concurrent.FutureTask.run(FutureTask.java:138) > > at > org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.jav > a:37) > > at > org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceIn > vokerInterceptor.java:106) > > at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain > .java:263) > > at > org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationOb > server.java:118) > > at > org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDes > tination.java:208) > > at > org.apache.cxf.transport.servlet.ServletController.invokeDestination(Servlet > Controller.java:223) > > at > org.apache.cxf.transport.servlet.ServletController.invoke(ServletController. > java:205) > > at > org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServ > let.java:113) > > at > org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractH > TTPServlet.java:184) > > at > org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServ > let.java:107) > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) > > at > org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPSer > vlet.java:163) > > at > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) > > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler > .java:1221) > > at > org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:8 > 3) > > at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60) > > at > org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:6 > 9) > > at > de.mms_dresden.ebbi.core.fe.impl.security.SessionIdFilter.doFilter(SessionId > Filter.java:99) > > at > org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:6 > 9) > > at > de.mms_dresden.ebbi.core.fe.impl.security.UrlValidationFilter.doFilter(UrlVa > lidationFilter.java:54) > > at > org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:6 > 9) > > at > org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64) > > at > org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:6 > 9) > > at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45) > > at > org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:6 > 9) > > at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40) > > at > org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:6 > 9) > > at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158) > > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler > .java:1212) > > at > de.mms_dresden.ebbi.core.fe.impl.security.SessionFilter.doFilter(SessionFilt > er.java:135) > > at > org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler > .java:1212) > > at > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) > > at > org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) > > at > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) > > at > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) > > at > org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) > > at > org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerColl > ection.java:230) > > at > org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:11 > 4) > > at > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) > > at org.mortbay.jetty.Server.handle(Server.java:326) > > at > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) > > at > org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java: > 945) > > at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) > > at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) > > at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) > > at > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) > > at > org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582 > ) > > Caused by: java.lang.IllegalArgumentException: wrong number of arguments > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 > ) > > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl > .java:25) > > at java.lang.reflect.Method.invoke(Method.java:597) > > at > org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInv > oker.java:173) > > at > org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:8 > 9) > > ... 53 more > >
