IllegalArgumentException: wrong number of arguments with Dispatch/Provider 
service
----------------------------------------------------------------------------------

                 Key: CXF-3502
                 URL: https://issues.apache.org/jira/browse/CXF-3502
             Project: CXF
          Issue Type: Bug
          Components: JAX-WS Runtime
    Affects Versions: 2.3.4, 2.4
            Reporter: jimma
            Assignee: jimma
             Fix For: 2.4.1, 2.3.5


If the part contains a header and it's partIndex is 0, there are two empty 
object will be added to the parameter list to call the provider invoke method. 
WSDL:
<wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
xmlns:tns="http://apache.org/header_test/rpc"; 
xmlns:x1="http://apache.org/header_test/rpc/types"; 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
targetNamespace="http://apache.org/header_test/rpc"; name="TestHeaderWSDL">
    <wsdl:types>
        <schema targetNamespace="http://apache.org/header_test/rpc/types"; 
xmlns="http://www.w3.org/2001/XMLSchema"; 
xmlns:x1="http://apache.org/header_test/rpc/types"; 
elementFormDefault="qualified">
            <element name="headerMessage">
                <complexType>
                    <sequence>
                        <element name="headerVal" type="string"/>
                    </sequence>
                </complexType>
            </element>
        </schema>
    </wsdl:types>
    <wsdl:message name="testHeader1Request">
        <wsdl:part name="inHeader" element="x1:headerMessage"/>
        <wsdl:part name="in" type="xsd:string"/>        
    </wsdl:message>
    <wsdl:message name="testHeader1Response">
        <wsdl:part name="out" type="xsd:string"/>
    </wsdl:message>

    <wsdl:message name="testInOutHeaderRequest">
        <wsdl:part name="in" type="xsd:string"/>
        <wsdl:part name="inOutHeader" element="x1:headerMessage"/>
    </wsdl:message>
    <wsdl:message name="testInOutHeaderResponse">
        <wsdl:part name="out" type="xsd:string"/>
        <wsdl:part name="inOutHeader" element="x1:headerMessage"/>
    </wsdl:message>

    <wsdl:portType name="TestRPCHeader">
        <wsdl:operation name="testHeader1">
            <wsdl:input name="testHeader1Request" 
message="tns:testHeader1Request"/>
            <wsdl:output name="testHeader1Response" 
message="tns:testHeader1Response"/>
        </wsdl:operation>
        <wsdl:operation name="testInOutHeader">
            <wsdl:input name="testInOutHeaderRequest" 
message="tns:testInOutHeaderRequest"/>
            <wsdl:output name="testInOutHeaderResponse" 
message="tns:testInOutHeaderResponse"/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="TestHeader_SOAPRPCBinding" type="tns:TestRPCHeader">
        <soap:binding style="rpc" 
transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="testHeader1">
            <soap:operation/>
            <wsdl:input name="testHeader1Request">
                <soap:body message="tns:testHeader1Request" parts="in" 
use="literal" namespace="http://apache.org/header_test"/>
                <soap:header message="tns:testHeader1Request" part="inHeader" 
use="literal"/>
            </wsdl:input>
            <wsdl:output name="testHeader1Response">
                <soap:body message="tns:testHeader1Response" use="literal" 
namespace="http://apache.org/header_test"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="testInOutHeader">
            <soap:operation/>
            <wsdl:input>
                <soap:body message="tns:testInOutHeaderRequest" parts="in" 
use="literal" namespace="http://apache.org/header_test"/>
                <soap:header message="tns:testInOutHeaderRequest" 
part="inOutHeader" use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body message="tns:testInOutHeaderResponse" parts="out" 
use="literal" namespace="http://apache.org/header_test"/>
                <soap:header message="tns:testInOutHeaderRequest" 
part="inOutHeader" use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="SOAPRPCHeaderService">
        <wsdl:port name="SoapRPCHeaderPort" 
binding="tns:TestHeader_SOAPRPCBinding">
            <soap:address 
location="http://localhost:9104/SoapHeaderRPCContext/SoapHeaderRPCPort"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

Error message:
org.apache.cxf.interceptor.Fault: wrong number of arguments while invoking 
public abstract java.lang.Object javax.xml.ws.Provider.invoke(java.lang.Object) 
with params 
[com.sun.xml.internal.messaging.saaj.soap.ver1_1.Message1_1Impl@543cb1, 
javax.xml.transform.dom.DOMSource@5cc942].
        at 
org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:159)
        at 
org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:86)
        at 
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:133)
        at 
org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:60)
        at 
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
        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:106)
        at 
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
        at 
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
        at 
org.apache.cxf.transport.local.LocalConduit$1$1.run(LocalConduit.java:132)
        at java.lang.Thread.run(Thread.java:662)
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:173)
        at 
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
        ... 12 more


--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to