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 Patrick Herber <pa...@arpage.ch> on 2004/09/22 13:53:40 UTC

"Strange" format of RPC/encoded messages

Hi,

I created a simple web service with style RPC/encoded, which receives and
returns complex objects (a request containing an array of sub-requests,
which in turn contain arrays of sub-sub-requests and the same structure for
the response). It works fine (for the moment), however I see that the
generated message (I see it on the SOAPMonitor) is (for me) something
strange. In fact the child collections are not directed included in their
parents but referenced, like:

    <doctorResponse soapenc:arrayType="ns2:DigniResponseDoctorRPC[1]"
xsi:type="soapenc:Array">
      <item href="#id2"/>
    </doctorResponse>

The same happens also for "xsd:int" elements like:

  <requestResponseCode href="#id1"/>
  ...
  <multiRef id="id1" soapenc:root="0" 
        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
        xsi:type="xsd:int" 
 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">0</multiRef>

This makes it difficult for a human to read these messages.

Could you kindly tell me whether this is the normal behavior of RPC/encoded
messages or if it is due to a problem/mistake in my WSDL definition?
I join a simple Response message and an extract of my WSDL file (schema and
message definitions).

Thanks a lot for your help!

Regards,
Patrick


<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>
  <ns1:validateResponse 
        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
        xmlns:ns1="urn:ch.arpage.digni.rpc">
    <response href="#id0"/>
  </ns1:validateResponse>
  <multiRef id="id0" soapenc:root="0" 
        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
        xsi:type="ns2:DigniResponseRPC"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
        xmlns:ns2="urn:ch.arpage.digni.rpc">
    <insuranceEAN xsi:type="xsd:string">7612345678901</insuranceEAN>
    <insuranceRequestId xsi:type="xsd:string">123</insuranceRequestId>
    <responseDate
xsi:type="xsd:dateTime">2004-09-22T11:19:24.574Z</responseDate>
    <requestResponseCode href="#id1"/>
    <doctorResponse soapenc:arrayType="ns2:DigniResponseDoctorRPC[1]"
xsi:type="soapenc:Array">
      <item href="#id2"/>
    </doctorResponse>
  </multiRef>
  <multiRef id="id1" soapenc:root="0" 
        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
        xsi:type="xsd:int" 
 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">0</multiRef>
  <multiRef id="id2" soapenc:root="0" 
        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
        xsi:type="ns3:DigniResponseDoctorRPC" 
        xmlns:ns3="urn:ch.arpage.digni.rpc" 
        xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
    <doctorEAN xsi:type="xsd:string">1108</doctorEAN>
    <doctorResponseCode href="#id3"/>
    <positionResponse xsi:type="ns3:DigniResponsePositionRPC"
xsi:nil="true"/>
  </multiRef>
  <multiRef id="id3" soapenc:root="0" 
        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
        xsi:type="xsd:int" 
 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">100</multiRef>
</soapenv:Body>
</soapenv:Envelope>


SCHEMA DEFINITION (EXTRACT):
===========================

   <complexType name="DigniResponsePositionRPC">
    <sequence>
     <element name="tarmedKey" nillable="true" type="xsd:string"/>
     <element name="invoiceDate" nillable="true" type="xsd:date"/>
     <element name="responseCode" type="xsd:int"/>
    </sequence>
   </complexType>
   <complexType name="DigniResponsePositionRPCList">
    <complexContent>
     <restriction base="soapenc:Array">
      <attribute ref="soapenc:arrayType"
wsdl:arrayType="impl:DigniResponsePositionRPC[]"/>
     </restriction>
    </complexContent>
   </complexType>
   <complexType name="DigniResponseDoctorRPC">
    <sequence>
     <element name="doctorEAN" nillable="true" type="xsd:string"/>
     <element name="doctorResponseCode" type="xsd:int"/>
     <element name="positionResponse" nillable="true"
type="impl:DigniResponsePositionRPCList"/>
    </sequence>
   </complexType>
   <complexType name="DigniResponseDoctorRPCList">
    <complexContent>
     <restriction base="soapenc:Array">
      <attribute ref="soapenc:arrayType"
wsdl:arrayType="impl:DigniResponseDoctorRPC[]"/>
     </restriction>
    </complexContent>
   </complexType>
   <complexType name="DigniResponseRPC">
    <sequence>
     <element name="insuranceEAN" nillable="true" type="xsd:string"/>
     <element name="insuranceRequestId" nillable="true" type="xsd:string"/>
     <element name="responseDate" nillable="true" type="xsd:dateTime"/>
     <element name="requestResponseCode" type="xsd:int"/>
     <element name="doctorResponse" nillable="true"
type="impl:DigniResponseDoctorRPCList"/>
    </sequence>
   </complexType>


MESSAGE DEFINITION
==================

   <wsdl:message name="validateResponse">
      <wsdl:part name="response" type="impl:DigniResponseRPC"/>
   </wsdl:message>





Re: "Strange" format of RPC/encoded messages

Posted by Venkat Reddy <vr...@gmail.com>.
You could probably turn it off by setting a property in
server-config.wsdd to false.

<deployment ...>
 <globalConfiguration>
  .........
  .........
  <parameter name="sendMultiRefs" value="false"/>

BTW, Multirefing has some advantages such as reducing duplication of
data, better modeling for message etc.

-- Venkat


On Wed, 22 Sep 2004 13:53:40 +0200, Patrick Herber <pa...@arpage.ch> wrote:
> Hi,
> 
> I created a simple web service with style RPC/encoded, which receives and
> returns complex objects (a request containing an array of sub-requests,
> which in turn contain arrays of sub-sub-requests and the same structure for
> the response). It works fine (for the moment), however I see that the
> generated message (I see it on the SOAPMonitor) is (for me) something
> strange. In fact the child collections are not directed included in their
> parents but referenced, like:
> 
>    <doctorResponse soapenc:arrayType="ns2:DigniResponseDoctorRPC[1]"
> xsi:type="soapenc:Array">
>      <item href="#id2"/>
>    </doctorResponse>
> 
> The same happens also for "xsd:int" elements like:
> 
>  <requestResponseCode href="#id1"/>
>  ...
>  <multiRef id="id1" soapenc:root="0"
>        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>        xsi:type="xsd:int"
> 
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">0</multiRef>
> 
> This makes it difficult for a human to read these messages.
> 
> Could you kindly tell me whether this is the normal behavior of RPC/encoded
> messages or if it is due to a problem/mistake in my WSDL definition?
> I join a simple Response message and an extract of my WSDL file (schema and
> message definitions).
> 
> Thanks a lot for your help!
> 
> Regards,
> Patrick
> 
> <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>
>  <ns1:validateResponse
>        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>        xmlns:ns1="urn:ch.arpage.digni.rpc">
>    <response href="#id0"/>
>  </ns1:validateResponse>
>  <multiRef id="id0" soapenc:root="0"
>        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>        xsi:type="ns2:DigniResponseRPC"
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
>        xmlns:ns2="urn:ch.arpage.digni.rpc">
>    <insuranceEAN xsi:type="xsd:string">7612345678901</insuranceEAN>
>    <insuranceRequestId xsi:type="xsd:string">123</insuranceRequestId>
>    <responseDate
> xsi:type="xsd:dateTime">2004-09-22T11:19:24.574Z</responseDate>
>    <requestResponseCode href="#id1"/>
>    <doctorResponse soapenc:arrayType="ns2:DigniResponseDoctorRPC[1]"
> xsi:type="soapenc:Array">
>      <item href="#id2"/>
>    </doctorResponse>
>  </multiRef>
>  <multiRef id="id1" soapenc:root="0"
>        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>        xsi:type="xsd:int"
> 
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">0</multiRef>
>  <multiRef id="id2" soapenc:root="0"
>        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>        xsi:type="ns3:DigniResponseDoctorRPC"
>        xmlns:ns3="urn:ch.arpage.digni.rpc"
>        xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
>    <doctorEAN xsi:type="xsd:string">1108</doctorEAN>
>    <doctorResponseCode href="#id3"/>
>    <positionResponse xsi:type="ns3:DigniResponsePositionRPC"
> xsi:nil="true"/>
>  </multiRef>
>  <multiRef id="id3" soapenc:root="0"
>        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>        xsi:type="xsd:int"
> 
> xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">100</multiRef>
> </soapenv:Body>
> </soapenv:Envelope>
> 
> SCHEMA DEFINITION (EXTRACT):
> ===========================
> 
>   <complexType name="DigniResponsePositionRPC">
>    <sequence>
>     <element name="tarmedKey" nillable="true" type="xsd:string"/>
>     <element name="invoiceDate" nillable="true" type="xsd:date"/>
>     <element name="responseCode" type="xsd:int"/>
>    </sequence>
>   </complexType>
>   <complexType name="DigniResponsePositionRPCList">
>    <complexContent>
>     <restriction base="soapenc:Array">
>      <attribute ref="soapenc:arrayType"
> wsdl:arrayType="impl:DigniResponsePositionRPC[]"/>
>     </restriction>
>    </complexContent>
>   </complexType>
>   <complexType name="DigniResponseDoctorRPC">
>    <sequence>
>     <element name="doctorEAN" nillable="true" type="xsd:string"/>
>     <element name="doctorResponseCode" type="xsd:int"/>
>     <element name="positionResponse" nillable="true"
> type="impl:DigniResponsePositionRPCList"/>
>    </sequence>
>   </complexType>
>   <complexType name="DigniResponseDoctorRPCList">
>    <complexContent>
>     <restriction base="soapenc:Array">
>      <attribute ref="soapenc:arrayType"
> wsdl:arrayType="impl:DigniResponseDoctorRPC[]"/>
>     </restriction>
>    </complexContent>
>   </complexType>
>   <complexType name="DigniResponseRPC">
>    <sequence>
>     <element name="insuranceEAN" nillable="true" type="xsd:string"/>
>     <element name="insuranceRequestId" nillable="true" type="xsd:string"/>
>     <element name="responseDate" nillable="true" type="xsd:dateTime"/>
>     <element name="requestResponseCode" type="xsd:int"/>
>     <element name="doctorResponse" nillable="true"
> type="impl:DigniResponseDoctorRPCList"/>
>    </sequence>
>   </complexType>
> 
> MESSAGE DEFINITION
> ==================
> 
>   <wsdl:message name="validateResponse">
>      <wsdl:part name="response" type="impl:DigniResponseRPC"/>
>   </wsdl:message>
> 
>