You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by John Thompson <tj...@googlemail.com> on 2006/08/03 00:11:41 UTC

Incorrect setting of server side arguments

hi!
   I am a newbie to Axis....so sorry if this is a pretty obvious fix.

I have defined a ws service and client that exchange an object that contains
two strings.

The service is invoked without a problem and the service executes and returns

without any fault being created. The problem is that the Java object
after deserialization is
corrupted with the pair of strings each set to the same value...which
is the 2nd string of the pair.

There is no fault or error signaled.


Axis Version 1.4 under Linux SuSe 10.1

--- The type (which I simplified because this appears in a larger example.

public class xxid
{
    private String s1;
    private String s2;

    ...sets and gets for the class.

}

---

It is invoked using an Axis call using the code from the user tutorial.

---

The service is pretty simple

public class example
{
    public String useService(xxid xxidDetails)

    {
         return "s1 is = " + xxidDetails.getS1() +
                 " S2 = " + xxidDetails.getS2();
    }
}
---

The WSDL is straightforward

<element name="xxiddetails">

  <complexType>
    <sequence>
       <element name="s1" type="xsd:string"/>
       <element name="s2" type="xsd:string"/>
    </sequence>

  </complexType>
</element>
---

and has a deployment descriptor (as per tutorial) with a service definition...


<service name="example" provider="java:RPC" use="literal" style="document">

        <parameter name="className" value="org.simple.example"/>
        <wsdlFile>/wsdl/example.wsdl</wsdlFile>
        <parameter name="allowedMethods" value="*"/>

        <typeMapping
              type="java:org.simple.xxid"
              qname="org.simple.xxid"
              serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

              deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
              encodingStyle=""
        />
</service>

----

The soap on the wire looks ok to me also....

----
<?xml version="1.0" encoding="UTF-8"?>
   <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>
         <useService xsi:type="org.simple.xxid" xmlns="">
            <s1 xsi:type="xsd:string">First</s1>
            <s2 xsi:type="xsd:string">second</s2>

         </useService>
      </soapenv:Body>
   </soapenv:Envelope>
----

Anyone any thoughts as to what is the problem? (As I said the service is
invoked and executes correctly

it is just that the server end object value is corrupted.)

thanks...

TJ

Re: Incorrect setting of server side arguments

Posted by John Thompson <tj...@googlemail.com>.
This is FYI...in case anyone else observes this,,,

(Sorry to Anne BTW  because my typo of  xxiddetails that she refers to
...there is indeed a typo but only in the email..not in the code.)

The problem I encountered is resolved and the code now works....my
error was that I accidentally deleted the default constructor for the
org.simple.xxid type....and the problem is resolved by restoring
it...trivial but timeconsuming :-)

thanks for the help.

On 03/08/06, Anne Thomas Manes <at...@gmail.com> wrote:
> The problem that I see is that the WSDD specifies a different local
> name than the one specified in the WSDL. The WSDD qname is
> null}"org.simple.xxid". The WSDL qname is
> [targetnamespace]}xxiddetails. That's the reason that your SOAP
> message contains the xsi:type attribute:
>
>       <useService xsi:type="org.simple.xxid" xmlns="">
>
> The qname specified in your WSDD typeMapping must correspond to qname
> of the WSDL message element.
>
> Because it doesn't know the type you're sending, it doesn't know how
> to interpret it.
>
> Anne
>
> On 8/3/06, John Thompson <tj...@googlemail.com> wrote:
> > The QName is created without a NS (see soap snippet because this is
> > just a test example...) and adding one does not make a difference to
> > the behaviour described in the message below.
> >
> > As I said,,, no error or fault is reported...the only sign of a
> > problem is that a call
> >
> > useService ( {"one" , "two" } )
> >
> > creates an object on the server side as
> >
> > {"two" "two"}
> >
> > This behaviour is repeated for 2+ arguments with the last argument
> > setting all values  to its value.
> >
> > thanks in any case Anne.
> >
> > On 02/08/06, Anne Thomas Manes <at...@gmail.com> wrote:
> >
> >
> > > Your typeMapping is wrong. The qname attribute must refer to the
> > > qualified name of the element that will appear in the SOAP message
> > > (the xxiddetails element). It should look something like this:
> > >
> > >         <typeMapping
> > >               type="java:org.simple.xxid"
> > >               qname="ns:xxiddetails"
> > >               xmlns:ns="[your-schemas-targetNamespace]"
> > >
> > > serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
> > >
> > > deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
> > >               encodingStyle=""
> > >         />
> > >
> > > On 8/2/06, John Thompson <tj...@googlemail.com> wrote:
> > > >
> > > > hi!
> > > >  I am a newbie to Axis....so sorry if this is a pretty obvious fix.
> > > >
> > > > I have defined a ws service and client that exchange an object that
> > > contains
> > > > two strings.
> > > >
> > > > The service is invoked without a problem and the service executes and
> > > > returns
> > > >
> > > >
> > > > without any fault being created. The problem is that the Java object
> after
> > > > deserialization is
> > > > corrupted with the pair of strings each set to the same value...which
> is
> > > the
> > > > 2nd string of the pair.
> > > >
> > > > There is no fault or error signaled.
> > > >
> > > >
> > > >
> > > > Axis Version 1.4 under Linux SuSe 10.1
> > > >
> > > > --- The type (which I simplified because this appears in a larger
> example.
> > > >
> > > > public class xxid
> > > > {
> > > >  private String s1;
> > > >  private String s2;
> > > >
> > > >
> > > >  ...sets and gets for the class.
> > > >
> > > > }
> > > >
> > > > ---
> > > >
> > > > It is invoked using an Axis call using the code from the user
> tutorial.
> > > >
> > > > ---
> > > >
> > > > The service is pretty simple
> > > >
> > > > public class example
> > > > {
> > > >  public String useService(xxid xxidDetails)
> > > >
> > > >
> > > >  {
> > > >  return "s1 is = " + xxidDetails.getS1() +
> > > >  " S2 = " + xxidDetails.getS2();
> > > >  }
> > > > }
> > > > ---
> > > >
> > > > The WSDL is straightforward
> > > >
> > > > <element name="xxiddetails">
> > > >
> > > >
> > > >  <complexType>
> > > >  <sequence>
> > > >  <element name="s1" type="xsd:string"/>
> > > >  <element name="s2" type="xsd:string"/>
> > > >  </sequence>
> > > >
> > > >
> > > >  </complexType>
> > > > </element>
> > > > ---
> > > >
> > > > and has a deployment descriptor (as per tutorial) with a service
> > > > definition...
> > > >
> > > >
> > > > <service name="example" provider="java:RPC" use="literal"
> > > style="document">
> > > >
> > > >
> > > >  <parameter name="className" value="org.simple.example"/>
> > > >  <wsdlFile>/wsdl/example.wsdl</wsdlFile>
> > > >  <parameter name="allowedMethods" value="*"/>
> > > >
> > > >
> > > >  <typeMapping
> > > >  type="java:org.simple.xxid"
> > > >  qname="org.simple.xxid"
> > > > serializer="org.apache.axis.encoding.ser.BeanSerializerFactory
> > > > "
> > > >
> > > > deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
> > > >  encodingStyle=""
> > > >  />
> > > > </service>
> > > >
> > > > ----
> > > >
> > > > The soap on the wire looks ok to me also....
> > > >
> > > >
> > > > ----
> > > > <?xml version="1.0" encoding="UTF-8"?>
> > > >  <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>
> > > >
> > > >  <useService xsi:type="org.simple.xxid" xmlns="">
> > > >  <s1 xsi:type="xsd:string">First</s1>
> > > >  <s2 xsi:type="xsd:string">second</s2>
> > > >
> > > >
> > > >  </useService>
> > > >  </soapenv:Body>
> > > >  </soapenv:Envelope>
> > > > ----
> > > >
> > > > Anyone any thoughts as to what is the problem? (As I said the service
> is
> > > > invoked and executes correctly
> > > >
> > > >
> > > > it is just that the server end object value is corrupted.)
> > > >
> > > > thanks...
> > > >
> > > > TJ
> > > >
> > > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> > > For additional commands, e-mail: axis-user-help@ws.apache.org
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> > For additional commands, e-mail: axis-user-help@ws.apache.org
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-user-help@ws.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org


Re: Incorrect setting of server side arguments

Posted by Anne Thomas Manes <at...@gmail.com>.
The problem that I see is that the WSDD specifies a different local
name than the one specified in the WSDL. The WSDD qname is
null}"org.simple.xxid". The WSDL qname is
[targetnamespace]}xxiddetails. That's the reason that your SOAP
message contains the xsi:type attribute:

      <useService xsi:type="org.simple.xxid" xmlns="">

The qname specified in your WSDD typeMapping must correspond to qname
of the WSDL message element.

Because it doesn't know the type you're sending, it doesn't know how
to interpret it.

Anne

On 8/3/06, John Thompson <tj...@googlemail.com> wrote:
> The QName is created without a NS (see soap snippet because this is
> just a test example...) and adding one does not make a difference to
> the behaviour described in the message below.
>
> As I said,,, no error or fault is reported...the only sign of a
> problem is that a call
>
> useService ( {"one" , "two" } )
>
> creates an object on the server side as
>
> {"two" "two"}
>
> This behaviour is repeated for 2+ arguments with the last argument
> setting all values  to its value.
>
> thanks in any case Anne.
>
> On 02/08/06, Anne Thomas Manes <at...@gmail.com> wrote:
>
>
> > Your typeMapping is wrong. The qname attribute must refer to the
> > qualified name of the element that will appear in the SOAP message
> > (the xxiddetails element). It should look something like this:
> >
> >         <typeMapping
> >               type="java:org.simple.xxid"
> >               qname="ns:xxiddetails"
> >               xmlns:ns="[your-schemas-targetNamespace]"
> >
> > serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
> >
> > deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
> >               encodingStyle=""
> >         />
> >
> > On 8/2/06, John Thompson <tj...@googlemail.com> wrote:
> > >
> > > hi!
> > >  I am a newbie to Axis....so sorry if this is a pretty obvious fix.
> > >
> > > I have defined a ws service and client that exchange an object that
> > contains
> > > two strings.
> > >
> > > The service is invoked without a problem and the service executes and
> > > returns
> > >
> > >
> > > without any fault being created. The problem is that the Java object after
> > > deserialization is
> > > corrupted with the pair of strings each set to the same value...which is
> > the
> > > 2nd string of the pair.
> > >
> > > There is no fault or error signaled.
> > >
> > >
> > >
> > > Axis Version 1.4 under Linux SuSe 10.1
> > >
> > > --- The type (which I simplified because this appears in a larger example.
> > >
> > > public class xxid
> > > {
> > >  private String s1;
> > >  private String s2;
> > >
> > >
> > >  ...sets and gets for the class.
> > >
> > > }
> > >
> > > ---
> > >
> > > It is invoked using an Axis call using the code from the user tutorial.
> > >
> > > ---
> > >
> > > The service is pretty simple
> > >
> > > public class example
> > > {
> > >  public String useService(xxid xxidDetails)
> > >
> > >
> > >  {
> > >  return "s1 is = " + xxidDetails.getS1() +
> > >  " S2 = " + xxidDetails.getS2();
> > >  }
> > > }
> > > ---
> > >
> > > The WSDL is straightforward
> > >
> > > <element name="xxiddetails">
> > >
> > >
> > >  <complexType>
> > >  <sequence>
> > >  <element name="s1" type="xsd:string"/>
> > >  <element name="s2" type="xsd:string"/>
> > >  </sequence>
> > >
> > >
> > >  </complexType>
> > > </element>
> > > ---
> > >
> > > and has a deployment descriptor (as per tutorial) with a service
> > > definition...
> > >
> > >
> > > <service name="example" provider="java:RPC" use="literal"
> > style="document">
> > >
> > >
> > >  <parameter name="className" value="org.simple.example"/>
> > >  <wsdlFile>/wsdl/example.wsdl</wsdlFile>
> > >  <parameter name="allowedMethods" value="*"/>
> > >
> > >
> > >  <typeMapping
> > >  type="java:org.simple.xxid"
> > >  qname="org.simple.xxid"
> > > serializer="org.apache.axis.encoding.ser.BeanSerializerFactory
> > > "
> > >
> > > deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
> > >  encodingStyle=""
> > >  />
> > > </service>
> > >
> > > ----
> > >
> > > The soap on the wire looks ok to me also....
> > >
> > >
> > > ----
> > > <?xml version="1.0" encoding="UTF-8"?>
> > >  <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>
> > >
> > >  <useService xsi:type="org.simple.xxid" xmlns="">
> > >  <s1 xsi:type="xsd:string">First</s1>
> > >  <s2 xsi:type="xsd:string">second</s2>
> > >
> > >
> > >  </useService>
> > >  </soapenv:Body>
> > >  </soapenv:Envelope>
> > > ----
> > >
> > > Anyone any thoughts as to what is the problem? (As I said the service is
> > > invoked and executes correctly
> > >
> > >
> > > it is just that the server end object value is corrupted.)
> > >
> > > thanks...
> > >
> > > TJ
> > >
> > >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> > For additional commands, e-mail: axis-user-help@ws.apache.org
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-user-help@ws.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org


Re: Incorrect setting of server side arguments

Posted by John Thompson <tj...@googlemail.com>.
The QName is created without a NS (see soap snippet because this is
just a test example...) and adding one does not make a difference to
the behaviour described in the message below.

As I said,,, no error or fault is reported...the only sign of a
problem is that a call

useService ( {"one" , "two" } )

creates an object on the server side as

{"two" "two"}

This behaviour is repeated for 2+ arguments with the last argument
setting all values  to its value.

thanks in any case Anne.

On 02/08/06, Anne Thomas Manes <at...@gmail.com> wrote:


> Your typeMapping is wrong. The qname attribute must refer to the
> qualified name of the element that will appear in the SOAP message
> (the xxiddetails element). It should look something like this:
>
>         <typeMapping
>               type="java:org.simple.xxid"
>               qname="ns:xxiddetails"
>               xmlns:ns="[your-schemas-targetNamespace]"
>
> serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
>
> deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
>               encodingStyle=""
>         />
>
> On 8/2/06, John Thompson <tj...@googlemail.com> wrote:
> >
> > hi!
> >  I am a newbie to Axis....so sorry if this is a pretty obvious fix.
> >
> > I have defined a ws service and client that exchange an object that
> contains
> > two strings.
> >
> > The service is invoked without a problem and the service executes and
> > returns
> >
> >
> > without any fault being created. The problem is that the Java object after
> > deserialization is
> > corrupted with the pair of strings each set to the same value...which is
> the
> > 2nd string of the pair.
> >
> > There is no fault or error signaled.
> >
> >
> >
> > Axis Version 1.4 under Linux SuSe 10.1
> >
> > --- The type (which I simplified because this appears in a larger example.
> >
> > public class xxid
> > {
> >  private String s1;
> >  private String s2;
> >
> >
> >  ...sets and gets for the class.
> >
> > }
> >
> > ---
> >
> > It is invoked using an Axis call using the code from the user tutorial.
> >
> > ---
> >
> > The service is pretty simple
> >
> > public class example
> > {
> >  public String useService(xxid xxidDetails)
> >
> >
> >  {
> >  return "s1 is = " + xxidDetails.getS1() +
> >  " S2 = " + xxidDetails.getS2();
> >  }
> > }
> > ---
> >
> > The WSDL is straightforward
> >
> > <element name="xxiddetails">
> >
> >
> >  <complexType>
> >  <sequence>
> >  <element name="s1" type="xsd:string"/>
> >  <element name="s2" type="xsd:string"/>
> >  </sequence>
> >
> >
> >  </complexType>
> > </element>
> > ---
> >
> > and has a deployment descriptor (as per tutorial) with a service
> > definition...
> >
> >
> > <service name="example" provider="java:RPC" use="literal"
> style="document">
> >
> >
> >  <parameter name="className" value="org.simple.example"/>
> >  <wsdlFile>/wsdl/example.wsdl</wsdlFile>
> >  <parameter name="allowedMethods" value="*"/>
> >
> >
> >  <typeMapping
> >  type="java:org.simple.xxid"
> >  qname="org.simple.xxid"
> > serializer="org.apache.axis.encoding.ser.BeanSerializerFactory
> > "
> >
> > deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
> >  encodingStyle=""
> >  />
> > </service>
> >
> > ----
> >
> > The soap on the wire looks ok to me also....
> >
> >
> > ----
> > <?xml version="1.0" encoding="UTF-8"?>
> >  <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>
> >
> >  <useService xsi:type="org.simple.xxid" xmlns="">
> >  <s1 xsi:type="xsd:string">First</s1>
> >  <s2 xsi:type="xsd:string">second</s2>
> >
> >
> >  </useService>
> >  </soapenv:Body>
> >  </soapenv:Envelope>
> > ----
> >
> > Anyone any thoughts as to what is the problem? (As I said the service is
> > invoked and executes correctly
> >
> >
> > it is just that the server end object value is corrupted.)
> >
> > thanks...
> >
> > TJ
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-user-help@ws.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org


Re: Incorrect setting of server side arguments

Posted by Anne Thomas Manes <at...@gmail.com>.
Your typeMapping is wrong. The qname attribute must refer to the
qualified name of the element that will appear in the SOAP message
(the xxiddetails element). It should look something like this:

        <typeMapping
              type="java:org.simple.xxid"
              qname="ns:xxiddetails"
              xmlns:ns="[your-schemas-targetNamespace]"
              serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
              deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
              encodingStyle=""
        />

On 8/2/06, John Thompson <tj...@googlemail.com> wrote:
>
> hi!
>  I am a newbie to Axis....so sorry if this is a pretty obvious fix.
>
> I have defined a ws service and client that exchange an object that contains
> two strings.
>
> The service is invoked without a problem and the service executes and
> returns
>
>
> without any fault being created. The problem is that the Java object after
> deserialization is
> corrupted with the pair of strings each set to the same value...which is the
> 2nd string of the pair.
>
> There is no fault or error signaled.
>
>
>
> Axis Version 1.4 under Linux SuSe 10.1
>
> --- The type (which I simplified because this appears in a larger example.
>
> public class xxid
> {
>  private String s1;
>  private String s2;
>
>
>  ...sets and gets for the class.
>
> }
>
> ---
>
> It is invoked using an Axis call using the code from the user tutorial.
>
> ---
>
> The service is pretty simple
>
> public class example
> {
>  public String useService(xxid xxidDetails)
>
>
>  {
>  return "s1 is = " + xxidDetails.getS1() +
>  " S2 = " + xxidDetails.getS2();
>  }
> }
> ---
>
> The WSDL is straightforward
>
> <element name="xxiddetails">
>
>
>  <complexType>
>  <sequence>
>  <element name="s1" type="xsd:string"/>
>  <element name="s2" type="xsd:string"/>
>  </sequence>
>
>
>  </complexType>
> </element>
> ---
>
> and has a deployment descriptor (as per tutorial) with a service
> definition...
>
>
> <service name="example" provider="java:RPC" use="literal" style="document">
>
>
>  <parameter name="className" value="org.simple.example"/>
>  <wsdlFile>/wsdl/example.wsdl</wsdlFile>
>  <parameter name="allowedMethods" value="*"/>
>
>
>  <typeMapping
>  type="java:org.simple.xxid"
>  qname="org.simple.xxid"
> serializer="org.apache.axis.encoding.ser.BeanSerializerFactory
> "
>
> deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
>  encodingStyle=""
>  />
> </service>
>
> ----
>
> The soap on the wire looks ok to me also....
>
>
> ----
> <?xml version="1.0" encoding="UTF-8"?>
>  <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>
>
>  <useService xsi:type="org.simple.xxid" xmlns="">
>  <s1 xsi:type="xsd:string">First</s1>
>  <s2 xsi:type="xsd:string">second</s2>
>
>
>  </useService>
>  </soapenv:Body>
>  </soapenv:Envelope>
> ----
>
> Anyone any thoughts as to what is the problem? (As I said the service is
> invoked and executes correctly
>
>
> it is just that the server end object value is corrupted.)
>
> thanks...
>
> TJ
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-user-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-user-help@ws.apache.org