Hi Ramesh,

Sorry to get back on this late.

I noticed that the same code behave differently when invoked standalone(from
main()), or from the service.

From standalone, the xsi:type are in the XML properly(same as your test).
While from service, the xsi:type attribute are missing. Please see attached
file test program. They are calling the same method(populateAddress().

I am just wondering if there is any setting on the service side that may
influence the generation of the xsi:type?

Below are the XML output from two cases and the populateAddress method.

Thanks,
-Bo

XML dump  when running from main(). xsi:type is generated.

<xsd:getAddressesResponse xmlns:xsd="http://quickstart.samples/xsd";>
   <xsd:addresses xsi:type="xsd:US-Address" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance";>
       <xsd:city>Sunnyvale</xsd:city>
       <xsd:name>XYZ</xsd:name>
       <xsd:state>CA</xsd:state>
       <xsd:zip>94087</xsd:zip>
   </xsd:addresses>
   <xsd:addresses xsd:export-code="66553322" xsi:type="xsd:EU-Address"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
       <xsd:city>Hongkong</xsd:city>
       <xsd:name>XYZ</xsd:name>
       <xsd:postcode>2300331 E.C</xsd:postcode>
   </xsd:addresses>
</xsd:getAddressesResponse>

XML dump when running as service. xsi:type is missing.

<xsd:getAddressesResponse xmlns:xsd="http://quickstart.samples/xsd";>
   <xsd:addresses>
       <xsd:city>Sunnyvale</xsd:city>
       <xsd:name>XYZ</xsd:name>
       <xsd:state>CA</xsd:state>
       <xsd:zip>94087</xsd:zip>
   </xsd:addresses>
   <xsd:addresses xsd:export-code="66553322">
       <xsd:city>Hongkong</xsd:city>
       <xsd:name>XYZ</xsd:name>
       <xsd:postcode>2300331 E.C</xsd:postcode>
   </xsd:addresses>
</xsd:getAddressesResponse>

The populateAddress method.

private static void populateAddress(GetAddressesResponseDocument resDoc) {
       // TODO Auto-generated method stub
       GetAddressesResponseDocument.GetAddressesResponse res =
           resDoc.addNewGetAddressesResponse();
       samples.quickstart.service.xmlbeans.xsd.Address[] addArray = new
samples.quickstart.service.xmlbeans.xsd.Address[2];
       samples.quickstart.service.xmlbeans.xsd.USAddress addr =
samples.quickstart.service.xmlbeans.xsd.USAddress.Factory.newInstance();

       //samples.quickstart.service.xmlbeans.xsd.USAddress addr =
samples.quickstart.service.xmlbeans.xsd.USAddress.Factory.newInstance();
       addr.setName("XYZ");
       addr.setCity("Sunnyvale");
       addr.setState(USState.CA);
       addr.setZip(new BigInteger("94087"));


       //samples.quickstart.service.xmlbeans.xsd.EUAddress addr1 =
(EUAddress) res.addNewAddresses().changeType(EUAddress.type);
       samples.quickstart.service.xmlbeans.xsd.EUAddress addr1 =
samples.quickstart.service.xmlbeans.xsd.EUAddress.Factory.newInstance();
       addr1.setName("XYZ");
       addr1.setCity("Hongkong");
       addr1.setExportCode(new BigInteger("66553322"));
       addr1.setPostcode("2300331 E.C");

       addArray[0] = addr;
       addArray[1] = addr1;

       res.setAddressesArray(addArray);

       XmlOptions ops = new XmlOptions();
       ops.setSavePrettyPrint();
       ops.setSavePrettyPrintIndent(4);
       //String xmlStr = res.xmlText(ops);
       //System.out.println("Response Element String: \n" + xmlStr);
       String xmlStr1 = resDoc.xmlText(ops);
       System.out.println("Response Document String: \n" + xmlStr1);
   }



On 1/8/07, Ramesh Gurunathan <[EMAIL PROTECTED]> wrote:

Hi Bo,

Sorry for getting back so late. I missed your mail from my email pool.

I indeed used axis2 1.1 and with xbean-2.2.0.jar that is shipped with
the release. This is what I did to prove that polymorphism in XML
works. My schema defines three complex types - BaseAddress, USAddress,
and UKAddress. The second item extends first and the third item
extends second. There is an element called 'UpdateCustomerAddress'
that includes, by signature, type BaseAddress unbounded. The element
could be used in the WSDL messages, but I didn't want go there.

Now I complied the schema using the schema compiler tool from XML
beans. (It makes no difference whether you use WSDL2Java of axis2 or
directly compile using scomp of XML beans).

I then wrote a test class, which uses the XML beans classes generated
classes, to verify the runtime object type for the address property in
UpdateCustomerAddress document. Please refer to the attachment for the
schema and test class.

In essence, the test class creates an XML programmatically, which
contains a BaseAddress, an USAddress, and UKAddress all bound to the
addresses property. Then it dumps the objects into XML, re-parses it,
and examines the objects using instanceof operator to ensure that the
types are correctly created. The test output is also in the
attachment.

TIP: I am not sure if this is significant, but ensure that your
schema's elementFormDefault is "qualified"

I hope this helps you.

Ramesh

On 1/9/07, Bo Xie <[EMAIL PROTECTED]> wrote:
> Hi Ramesh,
>
>      Did you by any chance use Axis2 1.1.1 instead of 1.1 for your
testing?
> If you indeed used 1.1 only, can you give some details on how did you
test
> the instanceof? BTW, I opened AXIS2-1938 for this issue before saw your
last
> reply.
>
>  Thanks,
>  -Bo
>
>
> On 1/5/07, Bo Xie <[EMAIL PROTECTED]> wrote:
> > Hi Ramesh,
> >
> >     It is comforting to know it actually works. Thanks for trying it
out.
> >
> >     I was using axis2. 1.1 and I just reinstall the axis2 1.1 and
tried it
> again, still get the same problem. I have two question.
> >     1. When you mentioned XML Bean 2.2.0, it is the one
xbean-2.2.0.jar
> comes with the axis2 package, not an outside jar, right?
> >     2. Do you mind share the test wsdl and the source file that you
did
> the instanceof test. I would like to see if I am not doing the right
thing
> using the generated object. Did you see the xsi:type in the soap message
for
> both directions?
> >
> > Thanks,
> > -Bo
> >
> >
> >
> > On 1/5/07, Ramesh Gurunathan < [EMAIL PROTECTED]> wrote:
> > > Hi Guys,
> > >
> > > I tested this today against axis2 1.1 [XML beans 2.2.0]. It actually
> > > works. The instanceof check passes. I then switched to Debug
> > > perspective to introspect the object type, everything looks perfect.
> > >
> > > Bo - Try again and see if you can duplicate the problem in axis2 1.1
> > >
> > > Ramesh
> > >
> > > On 1/4/07, Ajith Ranabahu <[EMAIL PROTECTED]> wrote:
> > > > Hi,
> > > >
> > > > > Hi Ajith,
> > > > >
> > > > >    The Address class only has getter and setter for name, city
etc.
> No
> > > > > getAddress. Do you see this ignoring of xsi:type in creating
> instance as a
> > > > > bug?
> > > >
> > > > Yep. It is a bug. But AFAIK it was reported to be working. In any
case
> > > > you can file a Jira with your schema.
> > > >
> > > > Ajith
> > > >
> > > >
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > >
> > >
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> >
> >
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Attachment: StockQuoteServiceSkeleton.java
Description: Binary data

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to