axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Amila Suriarachchi" <amilasuriarach...@gmail.com>
Subject Re: [Axis2] Soap Encoding support with ADB
Date Fri, 04 Jan 2008 10:18:36 GMT
On Jan 4, 2008 1:45 PM, Amila Suriarachchi <amilasuriarachchi@gmail.com>
wrote:

>
>
> On Jan 3, 2008 7:59 PM, Anne Thomas Manes <atmanes@gmail.com> wrote:
>
> > Amila,
> >
> > SOAP encoding is much more likely to be used in a code-first scenario,
> > but you must make sure that it also works in a WSDL-first scenario.
> >
> > Regarding one of your questions, you would never see an element
> > defined as follows:
> >
> > <s:element name="TestSoapElement2">
> > >         <s:complexType>
> > >             <s:sequence>
> > >                 <s:element name="param1" type="s:string"/>
> > >                 <s:element name="param2" type="soapenc:Array"/>
> > >             </s:sequence>
> > >         </s:complexType>
> > >     </s:element>
> >
>
> In the soap encoding schema Array is defined as a complex type. Then why
> it is wrong to use it as a type?
>
> Anyway in the article you given it has mentioned like this.
>
> The WSDL specification requires that arrays be based on the SOAP 1.1encoding schema.
It also requires that arrays use the name
> ArrayOfXXX, where XXX is the type of item in the array.
>
> Does WSDL specification say something like this? For me it is an
> customized type they have come up with
> to solve the problem we have. They have define some convention to
> determine the array type. But I think
> we need to come up with some generalized approach to support any schema.
> Like I have given above.
>

I check with the Axis  1.x generated wsdls and  microsofts' interop sites
wsdls.
for axis 1.x
<complexType name="ArrayOf_xsd_string">
    <complexContent>
    <restriction base="soapenc:Array">
          <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
     </restriction>
    </complexContent>
</complexType>

and for interop site
<xs:complexType name="ArrayOfInt">
    <xs:complexContent mixed="false">
    <xs:restriction base="q1:Array">
   <xs:attribute a:arrayType="xs:int[]" ref="q1:arrayType"/>
  </xs:restriction>
</xs:complexContent>
</xs:complexType>

so it is a general convention every one uses. Therefore I think adding
support for this generic convention solves our problem. And we can keep what
existing thing to support soap encoding in a generic way.

Any thoughts?

thanks,
Amila.

>
>
> I'll have a look at the wsdls generated by Axis 1.x with soap encoding and
> the corresponding java classes generated by the wsdl2java tool.
>
>
> [1] http://schemas.xmlsoap.org/soap/encoding/
>
> Amila.
>
> >
> >
> > First off, you would define a named complexType rather than an
> > element. And second, you never define an element simply as
> > soapenc:Array. The ComplexType would look something like this:
> >
> >  <s:complexType name="TestSoapType2">
> >     <s:sequence>
> >          <s:element name="param1" type="soapenc:string"/>
> >          <s:element name="param2" type="tns:ArrayofString"/>
> >     </s:sequence>
> >  </s:complexType>
> >
> > <complexType name="ArrayOfString">
> >   <complexContent>
> >      <restriction base="soapenc:Array">
> >         <attribute ref="soapenc:arrayType"
> >            wsdl:arrayType="string[]"/>
> >      </restriction>
> >   </complexContent>
> > </complexType>
> >
> > Or even more likely, you wouldn't define the "TestSoapType2" type --
> > you would simply reference the child types in the WSDL message
> > description:
> >
> > <w:message name="TestInput">
> >   <w:part name="param1" type="soapenc:string"/>
> >   <w:part name="param2" type="tns:ArrayofString"/>
> > </w:message>
> >
> > You might find this article helpful:
> > http://www.developer.com/services/article.php/10928_1602051_3
> >
> > You also might spend a little time playing with Axis generating some
> > RPC/encoded services to get a better sense of how the environment
> > works.
> >
> > Anne
> >
> > On Jan 3, 2008 1:51 AM, Amila Suriarachchi <amilasuriarachchi@gmail.com>
> > wrote:
> > > hi tom,
> > >
> > > I went through the Axis user guide[1] and as I understood Axis 1.x has
> > used
> > > soap encoding in the
> > > code first approach to support Arrays. I think this is where both you
> > and
> > > glen has misunderstood.
> > >
> > > in that case if I have a class like this
> > >
> > > public class Test {
> > >  private int[] testArray;
> > > public void setTestArray(int[] param){
> > >      testArray = param;
> > > }
> > >
> > > public int[] getTestArray(){
> > >     return testArray;
> > > }
> > >
> > > }
> > >
> > > in this case as Axis 1.x has done users must be given the chance to
> > deal
> > > with the standard types and it is
> > > almost useless to ask to deal with a new type. Further as I guess it
> > uses
> > > org.apache.axis.providers.java.RPCProvider as in Axis2
> > RPCMessageReceiver.
> > > BTW one question. Why Axis 1.x use soap encoding for this? why it
> > simply
> > > generate something
> > > like this
> > > <element name="testArray" minOccurs="0" maxOccurs="unbounded"/>
> > > it is always better to use POX rather than encoding types isn't it?
> > >
> > > So we won't be able to use the Axis 1.x code for this.
> > >
> > > But In the contract first approach people always have to deal with the
> >
> > > generated classes. So I believe in this
> > > case I don't think it is a problem. Here the main idea is to access a
> > > service already deployed with soap:encoding.
> > >
> > > So it would only be used at client side.
> > >
> > > [1]
> > >
> > http://ws.apache.org/axis/java/user-guide.html#ConsumingWebServicesWithAxis
> > >
> > > thanks,
> > > Amila.
> > >
> > >
> > >
> > > On Jan 3, 2008 10:53 AM, Amila Suriarachchi <
> > amilasuriarachchi@gmail.com>
> > > wrote:
> > > > hi tom,
> > > > thanks you your reply. if you have already working with axis 1.xcould
you
> > > please help on answering these
> > > > questions?
> > > >
> > > >
> > > >
> > > > On Jan 3, 2008 4:06 AM, Tom Jordahl < tjordahl@adobe.com> wrote:
> > > >
> > > > > +1 on Glen's -1 of using a whole new set of types to support SOAP
> > > > > encoding.  A String must map to a soapenc:string and a Array[]
> > must map
> > > > > to a SOAP encoded array.
> > > >
> > > >
> > > > In axis 1.x is it use in code first or contract first (i.e.
> > wsdl2java)
> > > approach? Here what I am trying to do is to
> > > > use it with the wsdl2java tool. i.e with the contract first
> > approach.
> > > >
> > > > So the main question is what is the generated method signature for
> > > >
> > > > <s:element name="TestSoapElement2">
> > > > >         <s:complexType>
> > > > >             <s:sequence>
> > > > >                 <s:element name="param1" type="s:string"/>
> > > > >                 <s:element name="param2" type="soapenc:Array"/>
> > > > >             </s:sequence>
> > > > >         </s:complexType>
> > > > >     </s:element>
> > > >
> > > > this type of element. what is the type of param2 in Axis 1.x? Here
> > in code
> > > generation
> > > > time I do not know the type of the array. That is why I set it as a
> > new
> > > type letting users to define it.
> > > >
> > > >
> > > >
> > > > >
> > > > >
> > > > > I would also argue for "full" multiref support, as servers will be
> > > > > sending this back to Axis2 clients, right?
> > > >
> > > >
> > > > I agree. I'll add this feature as I have describe earlier.
> > > >
> > > >
> > > > >
> > > > >
> > > > > Amila, please feel free to use the Axis 1.x code base as a
> > reference for
> > > > > how to do any of this.  Please also feel free to NOT to duplicate
> > the
> > > > > Array serialization/deserialization bugs. :-)
> > > >
> > > >
> > > > For the moment in Axis 2 ADB is also in a very stable state.  so
> > using
> > > already existing ADB logic
> > > > won't give any serializing de serializing issues.
> > > >
> > > > Thanks,
> > > > Amila.
> > > >
> > > >
> > > >
> > > >
> > > > >
> > > > >
> > > > > --
> > > > > Tom Jordahl
> > > > > Axis 1.x guy
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > -----Original Message-----
> > > > > From: Glen Daniels [mailto:glen@thoughtcraft.com ]
> > > > > Sent: Friday, December 28, 2007 1:49 AM
> > > > > To: axis-dev@ws.apache.org
> > > > > Subject: Re: [Axis2] Soap Encoding support with ADB
> > > > >
> > > > > Hey Amila:
> > > > >
> > > > > >     won't need them.  But for SOAP 1.1, the situation is
> > different.
> > > > > The
> > > > > >     encoding spec says you MUST encode all complex object types
> > as
> > > > > top-level
> > > > > >     members of the serialization.  Therefore ALL conforming
SOAP
> > 1.1
> > > > > >     encoding implementations will be putting out stuff that
> > looks like
> > > > > this:
> > > > > >
> > > > > >     <soap:body>
> > > > > >       <operation>
> > > > > >         <arg1 href="#obj1"/>
> > > > > >       </operation>
> > > > > >       <multiref id="obj1">
> > > > > >         <name>the real argument</name>
> > > > > >         <color>blue</color>
> > > > > >       </multiref>
> > > > > >     </soap:body>
> > > > > >
> > > > > > is this means it is allowed to have more than one xml element
in
> > the
> > > > > > soap:body ?
> > > > >
> > > > > Yes.  But - I was incorrect about the MUST above!  My hands were
> > typing
> > > > > a little ahead of my brain there. :)  Multirefs are not in fact
> > > > > *required* by SOAP 1.1 section 5, but some implementations (Axis
> > 1.X
> > > > > included) will by default serialize all complex objects as
> > multirefs
> > > > > since it speeds writing (if you don't do it that way you have to
> > walk
> > > > > the entire data graph to see what objects are referred to multiple
> > times
> > > > >
> > > > > before serializing).
> > > > >
> > > > > > I have to think about bit. We can resolve the problem with
> > parsing as
> > > > > I
> > > > > > have mentioned earlier but can not think about a way to
> > serialize with
> > > > >
> > > > > > multirefs.
> > > > >
> > > > > Again, my bad - we're not forced to do so, so it's ok for us not
> > to, as
> > > > > long as we accept that we're not going to be able to do real
> > graphs.  If
> > > > >
> > > > > no one wants this particular functionality, I'm fine with punting
> > on it.
> > > > >
> > > > > Your idea about parsing the XML to remove the hrefs and generate
a
> > > > > larger "virtual" expanded document on the reading side should work
> > fine,
> > > > >
> > > > > although it will potentially cause repeated data if a multiref is
> > used
> > > > > many times.  Probably not a big deal.  I'll respond to the rest of
> > your
> > > > > other note in another message.
> > > > >
> > > > > Thanks,
> > > > > --Glen
> > > > >
> > > > >
> > ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
> > > > > For additional commands, e-mail: axis-dev-help@ws.apache.org
> > > > >
> > > > >
> > > > >
> > ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
> > > > > For additional commands, e-mail: axis-dev-help@ws.apache.org
> > > > >
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Amila Suriarachchi,
> > > > WSO2 Inc.
> > >
> > >
> > >
> > > --
> > > Amila Suriarachchi,
> > > WSO2 Inc.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
> > For additional commands, e-mail: axis-dev-help@ws.apache.org
> >
> >
>
>
> --
> Amila Suriarachchi,
> WSO2 Inc.




-- 
Amila Suriarachchi,
WSO2 Inc.

Mime
View raw message