Ah, ok! It works indeed with the wrapped style.

Thanks, Dave

> -----Original Message-----
> From: Anne Thomas Manes [mailto:[EMAIL PROTECTED]
> Sent: Thursday, February 10, 2005 9:36 PM
> To: [EMAIL PROTECTED]
> Subject: Re: Can't invoke method with multiple arguments
>
>
> This is not a bug -- this is a requirement of SOAP. The child element
> of the SOAP body indicates to the SOAP processor how to handle the
> request. This child element must provide a unique signature so that
> the SOAP processor can figure it out. The SOAP specification doesn't
> specify how to process more than one child element in the SOAP body.
> The WS-I Basic Profile has clarified this point and specified a rule
> that says that the SOAP body must contain at most one child element.
>
> When using document/literal, you must wrap your parameters with a
> single element, and this element must be used as the one and only
> child element of the SOAP body. If you use the wrapped style, Axis
> will do this for you automatically.
>
> - Anne
>
>
> On Tue, 8 Feb 2005 17:17:01 +0100, David Werner
> <[EMAIL PROTECTED]> wrote:
> > Hallo Ioan,
> >
> > I'm quite stunned by this bug! Handling multiple parameters should be a
> > basic functionality.
> > In any case, many thanks for your reply! :-)
> >
> > Ciao, Dave
> >
> >
> > > -----Original Message-----
> > > From: Ioan Berbece [mailto:[EMAIL PROTECTED]
> > > Sent: Monday, February 07, 2005 8:50 PM
> > > To: [EMAIL PROTECTED]
> > > Subject: RE: Can't invoke method with multiple arguments
> > >
> > >
> > > Hi Dave,
> > >
> > > Last time I checked Axis 1.1 and Axis 1.2 RC2 didn't handle multiple
> > > message parts in a doc/lit web service. Take a look at this bug:
> > > http://issues.apache.org/jira/browse/AXIS-621
> > > which has an attachment for an attempted fix in Call.java
> (client side).
> > > I also attempted a fix for the server side in
> RPCProvider.java, but I'm
> > > not sure whether the fix is a proper one (although the
> functional tests
> > > pass with the fix in place in Axis 1.2 RC2).
> > > I have to say here that I'm a bit disappointed to see that
> this bug (and
> > > I believe there are others related) hasn't received the attention it
> > > requires (right now it seems it spans two versions: 1.1 and 1.2 - not
> > > sure what the story is in Axis 2.0).
> > > If you want my proposed fix email me privately.
> > >
> > > Thanks,
> > > IB
> > >
> > > -----Original Message-----
> > > From: David Werner [mailto:[EMAIL PROTECTED]
> > > Sent: February 7, 2005 1:50 PM
> > > To: [EMAIL PROTECTED]
> > > Subject: RE: Can't invoke method with multiple arguments
> > >
> > > Hallo,
> > >
> > > I also tried to invoke the same service with a Call object and
> > > explicitly
> > > set the type of the parameters. This time I got anothter exception:
> > > "org.xml.sax.SAXException: SimpleDeserializer encountered a child
> > > element,
> > > which is NOT expected, in something it was trying to deserialize."
> > > Does anyone have an idea ...?
> > >
> > > Bye, Dave
> > >
> > > --------------------
> > >  client code
> > > --------------------
> > >
> > > public class TestClient2
> > > {
> > >   public static void main(String [] args) {
> > >     try {
> > >        String endpoint =
> > >          "http://localhost:1234/axis1.2rc2/services/test";;
> > >
> > >        Service  service = new Service();
> > >        Call     call    = (Call) service.createCall();
> > >
> > >        call.setTargetEndpointAddress( new java.net.URL(endpoint) );
> > >        call.setOperationName(new QName("urn:TestNS", "printLongs") );
> > >
> > >        call.addParameter("in6",
> > >                          org.apache.axis.Constants.XSD_LONG,
> > >                          javax.xml.rpc.ParameterMode.IN);
> > >        call.addParameter("in7",
> > >                          org.apache.axis.Constants.XSD_LONG,
> > >                          javax.xml.rpc.ParameterMode.IN);
> > >        call.setReturnType(org.apache.axis.Constants.XSD_STRING);
> > >        String response = (String) call.invoke( new Object[] { 1L, 1L }
> > > );
> > >        System.out.println(response);
> > >     } catch (Exception e) {
> > >        System.err.println(e.toString());
> > >     }
> > >   }
> > > }
> > >
> > > --------------------
> > >  exception
> > > --------------------
> > >
> > > AxisFault
> > >  faultCode:
> > > {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
> > >  faultSubcode:
> > >  faultString: org.xml.sax.SAXException: SimpleDeserializer
> encountered a
> > > child element, which is NOT expected, in something it was trying to
> > > deserialize.
> > >  faultActor:
> > >  faultNode:
> > >  faultDetail:
> > >
> > > {http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException:
> > > SimpleDeserializer encountered a child element, which is NOT expected,
> > > in
> > > something it was trying to deserialize.
> > >   at
> > >
> org.apache.axis.encoding.ser.SimpleDeserializer.onStartChild(SimpleDeser
> > > iali
> > > zer.java:143)
> > >   at
> > >
> org.apache.axis.encoding.DeserializationContext.startElement(Deserializa
> > > tion
> > > Context.java:1031)
> > >   at
> > >
> org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:
> > > 165)
> > >   at
> > >
> org.apache.axis.message.MessageElement.publishToHandler(MessageElement.j
> > > ava:
> > > 1140)
> > >   at
> org.apache.axis.message.RPCElement.deserialize(RPCElement.java:238)
> > >   at org.apache.axis.message.RPCElement.getParams(RPCElement.java:386)
> > >   at
> > >
> org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.ja
> > > va:1
> > > 48)
> > >   at
> > >
> org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:319
> > > )
> > >   at
> > >
> org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.j
> > > ava:
> > > 32)
> > >   at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
> > >   at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
> > >   at
> > > org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:450)
> > >   at org.apache.axis.server.AxisServer.invoke(AxisServer.java:285)
> > >   at
> > >
> org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:653)
> > >   at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
> > >   at
> > >
> org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.j
> > > ava:
> > > 301)
> > >   at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
> > >   ....
> > >
> > >
> > >
> > > > -----Original Message-----
> > > > From: David Werner [mailto:[EMAIL PROTECTED]
> > > > Sent: Monday, February 07, 2005 3:35 PM
> > > > To: [EMAIL PROTECTED] Apache. Org
> > > > Subject: Can't invoke method with multiple arguments
> > > >
> > > >
> > > > Hi,
> > > >
> > > > I haven't realized the whole problem, when I submitted the mail
> > > > with subject
> > > > 'Problem with deserealizing boolean'. In fact, I can't invoke any
> > > method
> > > > with more than a single argument, independent of the arguments'
> > > (simple)
> > > > type! A java.lang.IllegalArgumentException is thrown, because
> > > > only the first
> > > > value can be deseserialized:
> > > >
> > > > "Tried to invoke method public java.lang.String
> > > > test.server.TestSoapBindingImpl.printLongs(long,long) with arguments
> > > > java.lang.Long,null. The arguments do not match the signature."
> > > >
> > > > Here's an example of a simple web service, that takes two longs and
> > > should
> > > > return a string.
> > > > At the end of the mail I copied a part of Axis' log file, where only
> > > the
> > > > first argument of printLongs is properly converted before the
> > > exception is
> > > > thrown.
> > > > I would be really glad, if someone could give me a hint of what I'm
> > > doing
> > > > wrong. ;-)
> > > >
> > > > BTW, I'm using Axis 1.2RC2, Tomcat 5.0.19 and JDK 1.5 on Win XP.
> > > >
> > > > Bye, Dave
> > > >
> > > > -------------------------
> > > >  service implementation
> > > > ------------------------
> > > > public class TestSoapBindingImpl implements test.server.Test{
> > > >
> > > >   public String printLongs(long long_1, long long_2){
> > > >     return "long_1 = " +long_1 +", long_2 = " +long_2;
> > > >   }
> > > >
> > > > }
> > > >
> > > > --------------------
> > > >  client
> > > > --------------------
> > > > public class TestClient {
> > > >
> > > >   public static void main (String[] args) throws Exception {
> > > >     TestService service = new TestServiceLocator();
> > > >     Test testProxy = service.gettest();
> > > >
> > > >     long longVal = 1L;
> > > >     response = testProxy.printLongs(longVal, longVal);
> > > >     System.out.println(response);
> > > >   }
> > > > }
> > > >
> > > > --------------------
> > > >  SOAP messsage
> > > > --------------------
> > > > <soapenv:Envelope
> > > > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
> > > > xmlns:xsd="http://www.w3.org/2001/XMLSchema";
> > > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
> > > >    <soapenv:Body>
> > > >       <in6 xmlns="urn:TestNS">1</in6>
> > > >       <in7 xmlns="urn:TestNS">1</in7>
> > > >    </soapenv:Body>
> > > > </soapenv:Envelope>
> > > >
> > > >
> > > > -----------------
> > > >  Axis' log file
> > > > -----------------
> > > >        ...
> > > > 17555  org.apache.axis.message.SAXOutputter
> > > >         - SAXOutputter.startElement ['urn:TestNS' in6]
> > > > 17555  org.apache.axis.i18n.ProjectResourceBundle
> > > >         -
> org.apache.axis.i18n.resource::handleGetObject(startElem00)
> > > > 17555  org.apache.axis.encoding.SerializationContext
> > > >         - Start element [urn:TestNS]:in6
> > > > 17555  org.apache.axis.message.SAXOutputter
> > > >         - SAXOutputter.characters ['1']
> > > > 17766  org.apache.axis.message.SAXOutputter
> > > >         - SAXOutputter.endElement ['urn:TestNS' in6]
> > > > 17766  org.apache.axis.i18n.ProjectResourceBundle
> > > >         - org.apache.axis.i18n.resource::handleGetObject(endElem00)
> > > > 17766  org.apache.axis.encoding.SerializationContext
> > > >         - End element in6
> > > > 17766  org.apache.axis.i18n.ProjectResourceBundle
> > > >         - org.apache.axis.i18n.resource::handleGetObject(empty00)
> > > > 17766  org.apache.axis.utils.NSStack
> > > >         - NSPop (empty)
> > > > 17766  org.apache.axis.i18n.ProjectResourceBundle
> > > >         - org.apache.axis.i18n.resource::handleGetObject(bodyIs00)
> > > > 17766  org.apache.axis.providers.java.RPCProvider
> > > >         - body is <in6 xmlns="urn:TestNS">1</in6>
> > > > 17766  org.apache.axis.i18n.ProjectResourceBundle
> > > >         -
> > > org.apache.axis.i18n.resource::handleGetObject(pushHandler00)
> > > > 17766  org.apache.axis.encoding.DeserializationContext
> > > >         - Pushing handler [EMAIL PROTECTED]
> > > > 17766  org.apache.axis.encoding.DeserializationContext
> > > >         - Enter: DeserializationContext::startPrefixMapping(,
> > > urn:TestNS)
> > > > 17766  org.apache.axis.utils.NSStack
> > > >         - NSPush (32)
> > > > 17766  org.apache.axis.utils.NSStack
> > > >         - NSPush (32)
> > > > 17766  org.apache.axis.encoding.DeserializationContext
> > > >         - Exit: DeserializationContext::startPrefixMapping()
> > > > 17766  org.apache.axis.encoding.DeserializationContext
> > > >         - Enter:
> DeserializationContext::startElement(urn:TestNS, in6)
> > > > 17766  org.apache.axis.message.RPCHandler
> > > >         - Enter: RPCHandler.onStartChild()
> > > > 17766  org.apache.axis.i18n.ProjectResourceBundle
> > > >         -
> > > org.apache.axis.i18n.resource::handleGetObject(typeFromAttr00)
> > > > 17766  org.apache.axis.message.RPCHandler
> > > >         - Type from attributes is:  null
> > > > 17876  org.apache.axis.message.RPCHandler
> > > >         - Exit: RPCHandler.onStartChild()
> > > > 17886  org.apache.axis.i18n.ProjectResourceBundle
> > > >         -
> > > org.apache.axis.i18n.resource::handleGetObject(pushHandler00)
> > > > 17886  org.apache.axis.encoding.DeserializationContext
> > > >         - Pushing handler
> > > > [EMAIL PROTECTED]
> > > > 17886  org.apache.axis.encoding.DeserializationContext
> > > >         - Exit: DeserializationContext::startElement()
> > > > 17886  org.apache.axis.encoding.DeserializationContext
> > > >         - Enter: DeserializationContext::endElement(urn:TestNS, in6)
> > > > 17886  org.apache.axis.i18n.ProjectResourceBundle
> > > >         -
> org.apache.axis.i18n.resource::handleGetObject(popHandler00)
> > > > 17886  org.apache.axis.encoding.DeserializationContext
> > > >         - Popping handler
> > > > [EMAIL PROTECTED]
> > > > 17886  org.apache.axis.i18n.ProjectResourceBundle
> > > >         -
> > > > org.apache.axis.i18n.resource::handleGetObject(setValueInTarget00)
> > > > 17886  org.apache.axis.encoding.DeserializerImpl
> > > >         - Set value 1 in target
> > > > [EMAIL PROTECTED]
> > > > 17886  org.apache.axis.i18n.ProjectResourceBundle
> > > >         - org.apache.axis.i18n.resource::handleGetObject(empty00)
> > > > 17886  org.apache.axis.utils.NSStack
> > > >         - NSPop (empty)
> > > > 17886  org.apache.axis.encoding.DeserializationContext
> > > >         - Popped element stack to
> > > org.apache.axis.message.SOAPBody:Body
> > > > 17886  org.apache.axis.encoding.DeserializationContext
> > > >         - Exit: DeserializationContext::endElement()
> > > > 17886  org.apache.axis.i18n.ProjectResourceBundle
> > > >         - org.apache.axis.i18n.resource::handleGetObject(convert00)
> > > > 17886  org.apache.axis.utils.JavaUtils
> > > >         - Trying to convert java.lang.Long to long
> > > > 17886  org.apache.axis.i18n.ProjectResourceBundle
> > > >         - org.apache.axis.i18n.resource::handleGetObject(value00)
> > > > 17886  org.apache.axis.providers.java.RPCProvider
> > > >         -   value:  1
> > > > 17886  org.apache.axis.i18n.ProjectResourceBundle
> > > >         -
> > > org.apache.axis.i18n.resource::handleGetObject(dispatchIAE00)
> > > > 17986  org.apache.axis.providers.java.RPCProvider
> > > >         - Tried to invoke method public java.lang.String
> > > > test.server.TestSoapBindingImpl.printLongs(long,long) with arguments
> > > > java.lang.Long,null.  The arguments do not match the signature.
> > > > java.lang.IllegalArgumentException
> > > >     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > > >     at
> > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorIm
> > > > pl.java:39
> > > > )
> > > >     at
> > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAc
> > > > cessorImpl
> > > > .java:25)
> > > >     at java.lang.reflect.Method.invoke(Method.java:585)
> > > >     at
> > > > org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvide
> > > > r.java:384
> > > > )
> > > >       at
> > > > org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvi
> > > > der.java:2
> > > > 81)
> > > >     at
> > > >
> > >
> org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:319
> > > )
> > > >     at
> > > > org.apache.axis.strategies.InvocationStrategy.visit(InvocationStra
> > > > tegy.java:
> > > > 32)
> > > >     at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
> > > >     at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
> > > >     at
> > > >
> org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:450)
> > > >     at org.apache.axis.server.AxisServer.invoke(AxisServer.java:285)
> > > >     at
> > > >
> > >
> org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:653)
> > > >     at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
> > > >     at
> > > > org.apache.axis.transport.http.AxisServletBase.service(AxisServlet
> > > > Base.java:
> > > > 301)
> > > >     at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
> > > >   ...
> > > >
> > >
> > >
> >
> >
>

Reply via email to