axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ioan Berbece" <iberb...@kana.com>
Subject RE: Can't invoke method with multiple arguments
Date Mon, 07 Feb 2005 19:49:32 GMT
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:dave@uni-koblenz.de] 
Sent: February 7, 2005 1:50 PM
To: axis-user@ws.apache.org
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:dave@uni-koblenz.de]
> Sent: Monday, February 07, 2005 3:35 PM
> To: Axis-User@Ws. 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 org.apache.axis.message.RPCHandler@82d210
> 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
> org.apache.axis.encoding.ser.SimpleDeserializer@2c9103
> 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
> org.apache.axis.encoding.ser.SimpleDeserializer@2c9103
> 17886  org.apache.axis.i18n.ProjectResourceBundle
>         -
> org.apache.axis.i18n.resource::handleGetObject(setValueInTarget00)
> 17886  org.apache.axis.encoding.DeserializerImpl
>         - Set value 1 in target
> org.apache.axis.encoding.MethodTarget@1e46a68
> 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)
>   ...
>


Mime
View raw message