Hello,
I am using CXF with my JAX-WS WSDL-first web service. My schema
specifies a mandatory custom credentials element in the SOAP header.
With CXF 2.0.2, if the client sent a request that was missing that
custom credentials element in the header, it would come into the
implementation code as null. This was good, because I could handle it
as I wanted to from there.
With CXF 2.0.3, it never even makes it to my implementation code.
Instead, a soap:server fault is automatically sent back to the client.
The message of the fault says:
wrong number of arguments while invoking public
com.mycompany.MyOperationResponseType
com.mycompany.MyWebServiceImpl.myOperation(com.mycompany.MyOperationType
,com.mycompany.UserCredentialsType) throws com.mycompany.MyFault with
params [EMAIL PROTECTED]
I'd really like to have control over this-I actually prefer not to send
back a fault, but rather to respond in a different way. In addition, if
I *did* want to send back a fault, I wouldn't want the fault message to
contain my class names-and I would probably want to return my custom
fault type in the fault details as well.
Is this by design, or is this a regression? Is anyone aware of a
workaround for this?
I have also pasted the stacktrace below. Thanks for your help!
-Chris
Nov 15, 2007 4:34:58 PM org.apache.cxf.phase.PhaseInterceptorChain
doIntercept
INFO: Interceptor has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: wrong number of arguments while
invoking public com
.mycompany.MyOperationResponseType com.mycompany.MyWebServiceImpl.myOpe
ration(com.mycompany.MyOperationType,com.mycompany.UserCredentialsType)
thro
ws com.mycompany.MyFault with params
[EMAIL PROTECTED]
at
org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractIn
voker.java:109)
at
org.apache.cxf.jaxws.JAXWSMethodInvoker.createFault(JAXWSMethodInvoke
r.java:76)
at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker
.java:101)
at
org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.jav
a:100)
at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker
.java:68)
at
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInv
okerInterceptor.java:56)
at
org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecu
tor.java:37)
at
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(Se
rviceInvokerInterceptor.java:92)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept
orChain.java:207)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainIniti
ationObserver.java:73)
at
org.apache.cxf.transport.servlet.ServletDestination.doMessage(Servlet
Destination.java:79)
at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(
ServletController.java:256)
at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletCont
roller.java:160)
at
org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCX
FServlet.java:170)
at
org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost(AbstractCX
FServlet.java:148)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:491
)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:3
67)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.jav
a:185)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:1
81)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:6
89)
at
org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:391)
at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHand
lerCollection.java:146)
at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.
java:114)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1
39)
at org.mortbay.jetty.Server.handle(Server.java:285)
at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:45
7)
at
org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnectio
n.java:765)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:628)
at
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)
at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:357)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.ja
va:329)
at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool
.java:475)
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(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(Abst
ractInvoker.java:124)
at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker
.java:82)
... 31 more