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 Glen Mazza <gl...@gmail.com> on 2009/06/03 17:20:23 UTC
Need help working with xsi:type and ADB
Hello, I'm writing a client of a web service WSDL that uses xsi:type[1],
which is a method of dynamically changing the type of element being used.
(I'm using Axis2 with ADB). The WSDL just asks for a RequestQuery, as
defined below:
<element name="MyRequestParameters">
<complexType>
<sequence>
<element name="RequestQuery" type="abc:RequestQuery"/>
</sequence>
</complexType>
</element>
where RequestQuery is:
<xs:complexType name="RequestQuery">
<xs:sequence>
<xs:element name="reqVal" type="xsd:string">
</xs:sequence>
</xs:complexType>
But request query has a derived type that I need to use, say
FinancialRequestQuery:
<xs:complexType name="FinancialRequestQuery">
<xs:complexContent>
<xs:extension base="abc:RequestQuery">
<xs:sequence>
<xs:element name="finanReqVal" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
Over the wire, however, instead of sending a FinancialRequestQuery I have to
use a RequestQuery with xsi:type as follows:
<RequestQuery xsi:type="abc:FinancialRequestQuery">
<reqVal>hello</reqVal>
<abc:finanReqVal>how are you</abc:finanReqVal>
</RequestQuery>
ADB binding does not provide me the necessary setters for this though--I'm
provided a method to set reqVal (because it's normally part of Request) but
not finanReqVal (because it's only allowed here because of the xsi:type
changing it to the derived FinancialRequestQuery type.)
What I guess I need to do is, (1) given an ADB generated object such as
RequestQuery, to manually construct an xsi:type attribute and add it to that
element; and (2) to manually construct an <abc:finanReqVal> child element
and add it to the ADB RequestQuery object. Does anyone have quick code
snippets on how to do that? (Other ideas or suggestions for working with
xsi:type also welcome.)
Thanks,
Glen
[1] http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st1.html
--
View this message in context: http://www.nabble.com/Need-help-working-with-xsi%3Atype-and-ADB-tp23853502p23853502.html
Sent from the Axis - User mailing list archive at Nabble.com.
Re: Need help working with xsi:type and ADB
Posted by Glen Mazza <gl...@gmail.com>.
I think I can answer my own question now. The ADBBean generated,
RequestQuery in my example below, already had a nice addExtraAttributes()
method for me to add the attribute but not an addExtraElement(OMElement)
method to add the extra element--that's because my actual WSDL had an
<xsd:anyAttribute/> (causing the former method to appear) but no <xsd:any/>
sequence element. I placed the latter in to the WSDL, and wsdl2java created
a setExtraElement(OMElement) method for me.
Glen Mazza wrote:
>
> Hello, I'm writing a client of a web service WSDL that uses xsi:type[1],
> which is a method of dynamically changing the type of element being used.
> (I'm using Axis2 with ADB). The WSDL just asks for a RequestQuery, as
> defined below:
>
> <element name="MyRequestParameters">
> <complexType>
> <sequence>
> <element name="RequestQuery" type="abc:RequestQuery"/>
> </sequence>
> </complexType>
> </element>
>
> where RequestQuery is:
> <xs:complexType name="RequestQuery">
> <xs:sequence>
> <xs:element name="reqVal" type="xsd:string">
> </xs:sequence>
> </xs:complexType>
>
> But request query has a derived type that I need to use, say
> FinancialRequestQuery:
>
> <xs:complexType name="FinancialRequestQuery">
> <xs:complexContent>
> <xs:extension base="abc:RequestQuery">
> <xs:sequence>
> <xs:element name="finanReqVal" type="xs:string"/>
> </xs:sequence>
> </xs:extension>
> </xs:complexContent>
> </xs:complexType>
>
> Over the wire, however, instead of sending a FinancialRequestQuery I have
> to use a RequestQuery with xsi:type as follows:
>
> <RequestQuery xsi:type="abc:FinancialRequestQuery">
> <reqVal>hello</reqVal>
> <abc:finanReqVal>how are you</abc:finanReqVal>
> </RequestQuery>
>
> ADB binding does not provide me the necessary setters for this though--I'm
> provided a method to set reqVal (because it's normally part of Request)
> but not finanReqVal (because it's only allowed here because of the
> xsi:type changing it to the derived FinancialRequestQuery type.)
>
> What I guess I need to do is, (1) given an ADB generated object such as
> RequestQuery, to manually construct an xsi:type attribute and add it to
> that element; and (2) to manually construct an <abc:finanReqVal> child
> element and add it to the ADB RequestQuery object. Does anyone have quick
> code snippets on how to do that? (Other ideas or suggestions for working
> with xsi:type also welcome.)
>
> Thanks,
> Glen
>
> [1] http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st1.html
>
>
--
View this message in context: http://www.nabble.com/Need-help-working-with-xsi%3Atype-and-ADB-tp23853502p23888560.html
Sent from the Axis - User mailing list archive at Nabble.com.