Thanks for your comments Anne, what you're saying makes since to me.
Some of the data I'll be transferring is raw XML so SOAP sounds like a
reasonable protocol for that. However, other data is in the form of Java
objects and it would be nice if it could be transferred and received as
a Java object. How do I specify data binding for those objects (such as
the one below)? is this done through the services.xml file?
I do think that SOAP is the best protocol for what I need. However, if I
was to look into using anther protocols do you know of any that you can
recommend? I could always open an HTTP connection to a Java servlet and
pass the data as a serialized Java object, I'm not sure what the
advantages or disadvantages are for doing this?
Thanks again,
David
-----Original Message-----
From: Anne Thomas Manes [mailto:[EMAIL PROTECTED]
Sent: Saturday, December 16, 2006 12:01 PM
To: [email protected]
Subject: Re: Questions about Axis2
David,
The first thing you need to understand is that SOAP is not an
especially good protocol for transferring language-specific
collections. If your goal is to implement a Java-to-Java client/server
application, perhaps you should consider using a different protocol --
one that supports the Java type system. SOAP used the XML Schema type
system. For best results using SOAP, your service interface should use
types that map reasonably well to the XML Schema type system. (i.e.,
don't try to use Vector or List to generate your interface -- use
simple arrays instead)
The next thing you need to understand is that there is a layer of
indirection between the data/object model used by the server and
data/object model used by the client. Just because you use
language-specific collections on the server to generate your WSDL
interface, those collections are not apparent to the client. The
client only sees the schema representation of the objects. If you want
your client to convert that schema into the same Java object types
that you use on the server, then you need to specify the data binding
mapping rather than using a tool like wsdl2java to generate it.
Anne
On 12/16/06, Vanfleet, David <[EMAIL PROTECTED]> wrote:
Hi,
I'm new to both Axis2 and web services and I'm having a hard time
grasping
all the various types of databinding that can be created (POJO, AXIOM,
ADB,
XMLBeans and JiBX). I have a couple of general questions about Axis2
and web
services.
I need to create a service that can pass complex objects between the
client
and the server. Something like my modified weather example below.
My questions about this are as follows:
1) In the testing I've done I noticed that it fails when there are any
java.util.Vector or java.util.List objects within the object being
transferred. I have seen several other posts about this but with no
responses. Does anyone know why this is the case? How can I get around
this?
I read that using an ArrayList object will work which I did verify,
but I
need to be able to user List and Vectors.
2) In the following modified Weather class where I have an ArrayList
called
children with its set and get methods (this is from the
sample.pojo.rpcclient package distributed with Axis2). When I send
this
weather class on a round trip to the WeatherService service calling
the
setWeather then the getWeather methods, then I take the returned
weather
class and call it's getChildren method I end up with an ArrayList of
OMEElement objects rather than Weather objects as I wanted. I
understand
that everything is converted to XML during transport, but how do I get
these
elements mapped back into the Weather class?
package sample.pojo.data;
import java.util.ArrayList;
public class Weather{
float temperature;
String forecast;
boolean rain;
float howMuchRain;
ArrayList<Weather> children=null;
public Weather() {
children=new ArrayList<Weather>();
}
public Weather(String forecast) {
children=new ArrayList<Weather>();
this.forecast=forecast;
}
.
.
.
public void setChildren(ArrayList<Weather> c) {
children=c;
}
public void addChild(Weather w) {
children.add(w);
}
public ArrayList<Weather> getChildren() {
return children;
}
}
3) Based on needing to transfer this kind of object what type of
databinding
would be best for me to use. Are there some that would work better
than
others, In my testing I'm using this POJO sample? But I'm thinking
that I
should use ADB or XMLBean. Any suggestions?
4) The client that will be accessing this service will be running
within
both a standalone application and a Java applet. For the sake of the
Java
applet I would like the client footprint to be as small as possible.
Based
on this requirement are there some databindings that have a smaller
footprint than others?
I realized that I'm not grasping all the concepts that I need to
understand
here, I'm not even sure I'm asking the right questions? I have been
looking
at the documentation and samples that come with Axis2. Are there any
other
good resources that I can look at that might help me out here, such as
some
good tutorials or FAQ's. Some more good code samples would be helpful
tool.
Any comments offered would be greatly appreciated.
Thanks,
David
---------------------------------------------------------------------
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]