WebService (JSR181) with soap header as INOUT parameter
-------------------------------------------------------
Key: XFIRE-777
URL: http://jira.codehaus.org/browse/XFIRE-777
Project: XFire
Issue Type: Bug
Components: Core
Affects Versions: 1.2.2
Environment: Windows 2003, JBOSS 4.0.3SP1, XFire 1.2.2, String 2.0
Reporter: Victor Trakhtenberg
Assigned To: Dan Diephouse
Attachments: XFireProblem.war, XFireProblem.zip
I'm developing web service using XFire,Spring JSR181 implementation.
I need to use SOAP header in mode INOUT.
I've define the following operation in web service interface:
@WebMethod(operationName = "op")
@WebResult(name = "opRes")
public String op(@WebParam(name = "ws_header", header = true, mode =
WebParam.Mode.INOUT)Holder<SessionInfoHeader> ws_header);
The implementation is simple it just prints some string.
(see attached ServiceAWS.java,ServiceAImpl.java)
The problem is that I have a following exception:
Please see attache the eclipse project XFireProblem.zip the war as it was
deployed in JBoss.
I've used the client: com.jacada.ServiceAClient
the exception is:
java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.codehaus.xfire.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:54)
at
org.codehaus.xfire.service.binding.ServiceInvocationHandler.sendMessage(ServiceInvocationHandler.java:271)
at
org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:84)
at
org.codehaus.xfire.service.binding.ServiceInvocationHandler.execute(ServiceInvocationHandler.java:132)
at
org.codehaus.xfire.service.binding.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:107)
at
org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at
org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)
at
org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
at
org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:301)
at
org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:130)
at
org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at
org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:159)
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at
org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Unknown Source)
java.lang.IllegalArgumentException: wrong number of arguments
(I will provide the stack trace later).
I saw in org.codehaus.xfire.service.binding.ServiceInvocationHandler class in
protected Object[] fillInHolders(MessageContext context,OperationInfo opInfo,
MessageInfo inMsg, MessageInfo outMsg, MessagePartContainer headerMsg,
MessagePartContainer outHeaderMsg, List params) method calculation of the
number of the parameters:
int outSize = 0;
if (outMsg != null)
{
outSize = outHeaderMsg.size() + outMsg.size();
if (outSize != 0) outSize--;
}
int total = inMsg.size() + headerMsg.size() + outSize;
In my case for method "op" which takes only one parameter (the header) the
value of total is 2.
Later the allocated array
Object[] newParams = new Object[total];
used in Java reflection to find the method, BUT there's no method with 2
parameters, but only with one parameter.
So it seems that there's a bug here.
I don't understand why does outSize participates in calculation of total.
Would it be correct to make the line:
int total = inMsg.size() + headerMsg.size();
May the problem in some other place.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email