cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robert Oliver (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CXF-2451) Unable to call no-arg methods when using implicit headers - getting params [null]
Date Wed, 08 Aug 2012 20:51:22 GMT

    [ https://issues.apache.org/jira/browse/CXF-2451?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13431366#comment-13431366
] 

Robert Oliver commented on CXF-2451:
------------------------------------

I believe I am running into this issue (or one that very closely matches the description)
using CXF 2.6.1.  Has this not been addressed yet in that version?  I am using -exsh true
to include the header as a parameter for my no-arg methods but it is still being omitted from
the SOAP payload.  If I step into the WrapperClassOutIntercepter.handleMessage() (client-side)
and force MessageContentList.hasValue() to return true for the header param it is correctly
included in the SOAP payload.  My guess is that this has something to do with the MessagePartInfo.getIndex()
(it is returning 1 even though it is the first item in the message parts list) but I'm not
yet familiar enough with CXF to know if I'm barking up the wrong tree.
                
> Unable to call no-arg methods when using implicit headers - getting params [null]
> ---------------------------------------------------------------------------------
>
>                 Key: CXF-2451
>                 URL: https://issues.apache.org/jira/browse/CXF-2451
>             Project: CXF
>          Issue Type: Bug
>    Affects Versions: 2.2.3
>         Environment: ALL
>            Reporter: Arik Gorelik
>            Assignee: Daniel Kulp
>             Fix For: 2.1.7, 2.2.4
>
>
> Hello,
> I am a developer using CXF 2.2.3. I am currently running into an issue when trying to
call a NO-ARG method getFoo() 
> while using implicit headers defined ONLY at the wsdl:binding section. 
> Each header has a SEPARATE wsdl:message defined and headers elements are NOT part of
the getFooRequest wsdl:message. 
> The generated code looks correct (using wsdl2java); however, invoking the method results
in the error message in the following soap fault message:
>          <faultstring>wrong number of arguments while invoking public com.test.services.v29.FooResponse
com.test.services.v29.TestServiceImpl.getFoo() throws com.test.services.v29.TestException
with params [null].</faultstring>
> Here is the stack trace:
> WARNING: Application has thrown exception, unwinding now
> org.apache.cxf.interceptor.Fault: wrong number of arguments while invoking public com.test.services.v29.FooResponse
com.test.services.v29.TestServiceImpl.getFoo() throws com.test.services.v29.TestException
with params [null].
> 	at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:152)
> 	at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:83)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:126)
> 	at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:55)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:68)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.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.java:37)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:98)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:104)
> 	at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:99)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:452)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:196)
> 	at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:220)
> 	at org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java:153)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
> ....
> 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(AbstractInvoker.java:166)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:82)
> 	... 33 more
> Request is:
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v29="http://test.com/services/v29">
>    <soapenv:Header>
>       <v29:testHeader1>1234</v29:testHeader1>
>       <v29:testHeader2>abcd</v29:testHeader2>
>    </soapenv:Header>
>    <soapenv:Body>
>       <v29:getFoo/>
>    </soapenv:Body>
> </soapenv:Envelope>
> Generated code is:
>     @WebResult(name = "response", targetNamespace = "http://test/services/v29")
>     @RequestWrapper(localName = "getFoo", targetNamespace = "http://test.com/services/v29",
className = "com.test.services.v29.GetFoo")
>     @ResponseWrapper(localName = "getFooResponse", targetNamespace = "http://test.com/services/v29",
className = "com.test.services.v29.GetFooResponse")
>     @WebMethod(action = "http://test.com/services/v29/messages/getFoo")
>     public com.test.services.v29.FooResponse getFo() throws TestException;
> Here is there wsdl:binding for the operation
> 		<wsdl:operation name="getFoo">
> 			<soap:operation soapAction="" />
> 			<wsdl:input name="getFooRequest">
> 				<soap:header part="testHeader1" message="tns:testHeader1" use="literal" />
> 				<soap:header part="testHeader2" message="tns:testHeader2" use="literal" />
> 				<soap:body use="literal" parts="parameters" />
> 			</wsdl:input>
> 			<wsdl:output name="getFooResponse">
> 				<soap:body use="literal" />
> 			</wsdl:output>
> 			<wsdl:fault name="TestException">
> 				<soap:fault name="TestException" use="literal" />
> 			</wsdl:fault>
> 		</wsdl:operation>
> Here are the wsdl:message for the operation from above:
> 	<wsdl:message name="testHeader1">
> 		<wsdl:part element="impl:testHeader1" name="testHeader1" />
> 	</wsdl:message>
> 	<wsdl:message name="testHeader2">
> 		<wsdl:part element="impl:testHeader2" name="testHeader2" />
> 	</wsdl:message>
> 	...
> 	<wsdl:message name="getFooRequest">
> 		<wsdl:part element="impl:getFoo" name="parameters" />
> 	</wsdl:message>
> 	<wsdl:message name="getFooResponse">
> 		<wsdl:part element="impl:getFooResponse" name="parameters" />
> 	</wsdl:message>
> If I remove the implicit headers, the generated code is the same and I am able to invoke
the method with the same request. Please help. I hope I provided all the required information.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message