Hi Nadeem,

If I modify my service and make well-typed class arrays, I need a custom
deserializer at the client end, right? In that case our existing
Axis1.xclient code will break....Did I get you properly?

Chinmoy

On Mon, Mar 24, 2008 at 2:54 PM, Hoda, Nadeem [USA] <[EMAIL PROTECTED]>
wrote:

>
> Hello Chinmoy,
>
> If it is at all possible, I would highly suggest slightly modifying the
> implementation of the services to include well-typed class arrays instead of
> Object arrays. This change will help you solve this issue at hand and help
> you in the future when SOAP stacks change and future needs to support
> multiple clients.
>
> We have dealt with business clients using "any" type, and it has caused us
> major interop issues.
>
> Thanks,
>
> Nadeem
>
>  ------------------------------
>  *From:* Chinmoy Chakraborty [mailto:[EMAIL PROTECTED]
> *Sent:* Monday, March 24, 2008 12:54 PM
>
> *To:* [email protected]
> *Subject:* Re: How to return Object[] from axis2
>
>   Hi Nadeem,
>
> Thanks for your reply. I understand the interop problem you are talking
> about and the problem related to Axis2 with Axis 1.x client.
>
> In our existing web services we are using Axis1.x in both ends and
> Object[] worked fine for us. Now we want to upgrade to Axis2 keeping our
> Axis1.x clients unaffecteted. In our application we have a service and
> it's return type is *Object[String, String, Object[String, String,
> Object[]]]*, inside which we send 'String'.
>
> As you told and Deepal also pointed to test it with Axis2 to Axis2 and it
> might work but as you explained 'any' type is probably creating the problem.
> I am looking for some kind of solution that works with Axis1.x client
> without any modification. Is there any way to make Axis2 work with 
> Axis1.xclient without writing any custom deserializer in (
> Axis1.x) client side? (My wild guess is Axis2 and Axis1.x do not deal with
> Array in the same manner)
> WSDL in axis2 for the service that return Object[]
> -----------------------------------------------------------------------
> <xs:schema xmlns:ns="*return_object_array*" attributeFormDefault="*
> qualified*" elementFormDefault="*qualified*" targetNamespace="*
> return_object_array*">   <xs:element name="*returnObjectArray*">
>   <xs:complexType>
>   <xs:sequence>
>  * * <xs:element minOccurs="*0*" name="*authToken*" nillable="*true*" type
> ="*xs:string*" />
> * * </xs:sequence>
> * * </xs:complexType>
> * * </xs:element>
>   <xs:element name="*returnObjectArrayResponse*">
>   <xs:complexType>
>   <xs:sequence>
>  * * <xs:element maxOccurs="*unbounded*" minOccurs="*0*" 
> name="*return*"nillable
> ="*true*" type="*xs:anyType*" />
> * * </xs:sequence>
> * * </xs:complexType>
> * * </xs:element>
> * * </xs:schema>
>
>
> WSDL in axis1.4 for the service that return Object[]
> --------------------------------------------------------------------------
> <schema targetNamespace="
> http://localhost:8080/webservices/services/return_object_array";
>
> xmlns="http://www.w3.org/2001/XMLSchema";>
>   <import namespace="http://schemas.xmlsoap.org/soap/encoding/"; />
> <complexType name="ArrayOf_xsd_anyType">
>   <complexContent>
>   <restriction base="soapenc:Array">
>   <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[]" />
>   </restriction>
>   </complexContent>
>   </complexType>
>   </schema>
>   </wsdl:types>
>  <wsdl:message name="returnObjectArrayResponse">
>   <wsdl:part name="returnObjectArrayReturn"
> type="impl:ArrayOf_xsd_anyType" />
>   </wsdl:message>
>
> Chinmoy
>
> On Sun, Mar 23, 2008 at 12:34 PM, Hoda, Nadeem [USA] <[EMAIL PROTECTED]>
> wrote:
>
> >
> > Hello Chinmoy,
> >
> > Though Axis2 might support Object[] in its services, this is far from a
> > best practice.
> >
> > The WSDL should always be strongly-typed with respect to all data
> > constructs contained within it. All data types should have a schema within
> > the WSDL (this is automatic for strongly-typed POJO services).
> >
> > As you can see, Axis2 to Axis2 communication will probably work for your
> > web services, but when you move to Axis1.X or .NET clients, you will
> > probably have to custom deserialize the "any" type (thus defeating the
> > purpose of web service standards, interop expectations, etc...)
> >
> > Instead of Object[], you should try custom classes that define what you
> > need. Object arrays might be convenient, but they will greatly affect
> > interop as you are already seeing.
> >
> > Thanks,
> >
> > Nadeem
> >
> >
> >
> >
> >
> >  ------------------------------
> >  *From:* Chinmoy Chakraborty [mailto:[EMAIL PROTECTED]
> > *Sent:* Thursday, March 20, 2008 10:01 PM
> > *To:* [email protected]
> > *Subject:* Re: How to return Object[] from axis2
> >
> >   Hi Deepal,
> >
> > Thnaks a lot for your response. I can use Axis2 in our client side but
> > we need to make it work with Axis 1.4 to support backward
> > compatibility. I checked axis2 and found that it supports Object array as
> > return type however, it does not work with following return type (Object
> > array of Objejectarray of Object array):
> >
> > public Object[] returnObjectArray(String authToken) {
> >         Object[] retVal = new Object[3];
> >         Object[] args = new Object[3];
> >         args[0] = new Object[] {"Arg1", "Arg2", "Arg3"};
> >         args[1] = new Object[] {"Arg1", "Arg2", "Arg3"};
> >         args[2] = new Object[] {"Arg1", "Arg2", "Arg3"};
> >         retVal[0] = new Object[] {"RetVal1", "Retval2", authToken,
> > args};
> >         retVal[1] = new Object[] {"RetVal3", "Retval4", authToken,
> > args};
> >         retVal[2] = new Object[] {"RetVal5", "Retval6", authToken,
> > args};
> >         return retVal;
> >     }
> >
> > Please let me know how I can make axis2 work with axis 1.4 for the above
> > mentioned return type!!
> >
> > Chinmoy
> >
> >
> >
> >
> > On Thu, Mar 20, 2008 at 10:30 PM, Deepal jayasinghe <[EMAIL PROTECTED]>
> > wrote:
> >
> > > Hi Chinmoy ,
> > > If you do not mind , try to use Axis2 in the client side . If it is
> > > working then the problem should be there in either Axis1 or the way
> > > Axis2 serialize that message .
> > >
> > > Thank you!
> > > Deepal
> > > > Thanks a lot Deepal for your reply. I have a made a test service
> > > that
> > > > returns an object array. I can see the correct SOAP through the
> > > > SOAPMonitor (that Axis2 is returning) but in axis 1.4 client I am
> > > > getting following exception:
> > > >
> > > > 23938 ERROR [http8080-Processor23]
> > > > org.apache.axis.client.Call     - Exception:
> > > > org.xml.sax.SAXException: Found character data inside an array
> > > element
> > > > while deserializing
> > > >  at
> > > > org.apache.axis.encoding.ser.ArrayDeserializer.characters(
> > > ArrayDeserializer.java:502)
> > > >  at
> > > > org.apache.axis.encoding.DeserializationContext.characters(
> > > DeserializationContext.java:966)
> > > >  at
> > > > org.apache.axis.message.SAX2EventRecorder.replay(
> > > SAX2EventRecorder.java:177)
> > > >  at
> > > > org.apache.axis.message.MessageElement.publishToHandler(
> > > MessageElement.java:1141)
> > > >  at org.apache.axis.message.RPCElement.deserialize(RPCElement.java
> > > :345)
> > > >  at org.apache.axis.message.RPCElement.getParams(RPCElement.java
> > > :384)
> > > >  at org.apache.axis.client.Call.invoke(Call.java:2467)
> > > >  at org.apache.axis.client.Call.invoke(Call.java:2366)
> > > > .........................
> > > >
> > > > How can resolve above issue?
> > > >
> > > > Chinmoy
> > > >
> > > > On Wed, Mar 19, 2008 at 7:43 PM, Deepal jayasinghe <
> > > [EMAIL PROTECTED]
> > > > <mailto:[EMAIL PROTECTED]>> wrote:
> > > >
> > > >     Yes Axis2 support Object arrays. The error may be due to some
> > > issue in
> > > >     your code , however we can help you to fix that if you can send
> > > us the
> > > >     code or create a JIRA attaching test code.
> > > >
> > > >     Thank you!
> > > >     Deepal
> > > >     > Hi All,
> > > >     >
> > > >     > I am using hitting Axis2 with axis 1.4 client. I have a
> > > service
> > > >     which
> > > >     > returns Object[].
> > > >     >
> > > >     > With axis 1.4 in both ends it worked well. But in axis2 it
> > > gives
> > > >     > Nullpointer exception when the service tried to return
> > > Object[]
> > > >     > (object array).
> > > >     >
> > > >     > Does axis2 support object array as return type? If yes then
> > > how
> > > >     can I
> > > >     > make it work with old axis1.4 client? its necessary to support
> > > old
> > > >     > axis1.4 because lots of our customers are using axis1.4 client
> > > >     and we
> > > >     > need to make it backward compatible.
> > > >     >
> > > >     > Chinmoy
> > > >
> > > >
> > > >
> > > >
> > > ---------------------------------------------------------------------
> > > >     To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > >     <mailto:[EMAIL PROTECTED]>
> > > >     For additional commands, e-mail: [EMAIL PROTECTED]
> > > >     <mailto:[EMAIL PROTECTED]>
> > >  >
> > > >
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> >
>

Reply via email to