You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Daniel Kulp <dk...@apache.org> on 2008/02/28 21:08:56 UTC
Maps and Interfaces as params/returns sample....
I just wanted to let everyone know that I've deployed a new CXF 2.1
snapshot that has an updated java_first_jaxws sample that includes using
an interface and a Map object as parameters/returns to methods on the
interface.
Since those have been common "issues" lately, I'd greatly appreciate it
if folks could give it a quick look and make any suggestions and
comments on how to make it even more useful.
Download the latest from:
http://people.apache.org/repo/m2-snapshot-repository/org/apache/cxf/apache-cxf/2.1-incubator-SNAPSHOT/
--
J. Daniel Kulp
Principal Engineer, IONA
dkulp@apache.org
http://www.dankulp.com/blog
RE: Maps and Interfaces as params/returns sample....
Posted by Ayush Gupta <ay...@inquisant.com>.
Yes, that makes sense since it is the concrete class which does take over. I
did wish that Jaxb was smarter about handling interfaces.
Thanks for explaining!
-ayush
-----Original Message-----
From: Daniel Kulp [mailto:dkulp@apache.org]
Sent: Friday, February 29, 2008 1:11 PM
To: cxf-user@incubator.apache.org
Cc: Ayush Gupta
Subject: Re: Maps and Interfaces as params/returns sample....
Right... That's the limitation of how the XmlJavaTypeAdapter stuff
works. It's the concrete class that COMPLETELY drives the generated
schema and what gets written to the wire. All the JAXB annotations go
on that class, not the interface (other than the TypeAdapater
annotation, although that could be put on the method/param instead).
That is actually why the Map example works. The "Map" interface really
doesn't provide any useful information to create a nice schema.
However, the concrete JAXB beans that the TypeAdapter will map it to
does provide that ability. Thus, if you look at the schema that is
generated for the map in my example, instead of generic <key> and
<value> elements, it has nice descriptive <id> and <user> elements. The
entry bean I created has the XmlElement annotations on it to make the
schema nicer.
Anyway, it does seem a bit backwords for the straight interface thing,
but that's a limitation of how JAXB handles it. The TypeAdapters
basically just provide a way for you to "intercept" the objects and map
them to something JAXB will understand. JAXB then just uses those new
objects for everything it deals with.
Dan
On Friday 29 February 2008, Ayush Gupta wrote:
> Daniel,
>
> I tried this and am indeed able to use interfaces as parameters.
>
> However, I did encounter one problem: "The marshalling is being done
> based on the concrete class of passed object and not based on the
> interface itself"
>
> So, consider this example:
> - Lets say that UserImpl has a few additional properties like userId
> and userSalary (with getters/setters) which are not present in the
> User Interface.
> - When a client passes an instance of UserImpl to the service (as the
> User interface) only name ought to be marshaled and not userId or
> userSalary.
>
> The intent of wrapping UserImpl around an interface would be to
> encapsulate some of the properties in UserImpl which are not pertinent
> to User interface. Marshalling those "extra" properties defeats that
> intent.
>
> I did discover that one way to hide userId and userSalary was to mark
> the setters of those two in UserImpl with the XmlTransient annotation
> but that does not feel so optimal.
>
> -ayush
>
> -----Original Message-----
> From: Daniel Kulp [mailto:dkulp@apache.org]
> Sent: Thursday, February 28, 2008 12:09 PM
> To: cxf-user@incubator.apache.org
> Cc: cxf-dev@incubator.apache.org
> Subject: Maps and Interfaces as params/returns sample....
>
>
> I just wanted to let everyone know that I've deployed a new CXF 2.1
> snapshot that has an updated java_first_jaxws sample that includes
> using an interface and a Map object as parameters/returns to methods
> on the interface.
>
> Since those have been common "issues" lately, I'd greatly appreciate
> it if folks could give it a quick look and make any suggestions and
> comments on how to make it even more useful.
>
> Download the latest from:
> http://people.apache.org/repo/m2-snapshot-repository/org/apache/cxf/ap
>ache-c xf/2.1-incubator-SNAPSHOT/
--
J. Daniel Kulp
Principal Engineer, IONA
dkulp@apache.org
http://www.dankulp.com/blog
Re: Maps and Interfaces as params/returns sample....
Posted by Daniel Kulp <dk...@apache.org>.
Right... That's the limitation of how the XmlJavaTypeAdapter stuff
works. It's the concrete class that COMPLETELY drives the generated
schema and what gets written to the wire. All the JAXB annotations go
on that class, not the interface (other than the TypeAdapater
annotation, although that could be put on the method/param instead).
That is actually why the Map example works. The "Map" interface really
doesn't provide any useful information to create a nice schema.
However, the concrete JAXB beans that the TypeAdapter will map it to
does provide that ability. Thus, if you look at the schema that is
generated for the map in my example, instead of generic <key> and
<value> elements, it has nice descriptive <id> and <user> elements. The
entry bean I created has the XmlElement annotations on it to make the
schema nicer.
Anyway, it does seem a bit backwords for the straight interface thing,
but that's a limitation of how JAXB handles it. The TypeAdapters
basically just provide a way for you to "intercept" the objects and map
them to something JAXB will understand. JAXB then just uses those new
objects for everything it deals with.
Dan
On Friday 29 February 2008, Ayush Gupta wrote:
> Daniel,
>
> I tried this and am indeed able to use interfaces as parameters.
>
> However, I did encounter one problem: "The marshalling is being done
> based on the concrete class of passed object and not based on the
> interface itself"
>
> So, consider this example:
> - Lets say that UserImpl has a few additional properties like userId
> and userSalary (with getters/setters) which are not present in the
> User Interface.
> - When a client passes an instance of UserImpl to the service (as the
> User interface) only name ought to be marshaled and not userId or
> userSalary.
>
> The intent of wrapping UserImpl around an interface would be to
> encapsulate some of the properties in UserImpl which are not pertinent
> to User interface. Marshalling those "extra" properties defeats that
> intent.
>
> I did discover that one way to hide userId and userSalary was to mark
> the setters of those two in UserImpl with the XmlTransient annotation
> but that does not feel so optimal.
>
> -ayush
>
> -----Original Message-----
> From: Daniel Kulp [mailto:dkulp@apache.org]
> Sent: Thursday, February 28, 2008 12:09 PM
> To: cxf-user@incubator.apache.org
> Cc: cxf-dev@incubator.apache.org
> Subject: Maps and Interfaces as params/returns sample....
>
>
> I just wanted to let everyone know that I've deployed a new CXF 2.1
> snapshot that has an updated java_first_jaxws sample that includes
> using an interface and a Map object as parameters/returns to methods
> on the interface.
>
> Since those have been common "issues" lately, I'd greatly appreciate
> it if folks could give it a quick look and make any suggestions and
> comments on how to make it even more useful.
>
> Download the latest from:
> http://people.apache.org/repo/m2-snapshot-repository/org/apache/cxf/ap
>ache-c xf/2.1-incubator-SNAPSHOT/
--
J. Daniel Kulp
Principal Engineer, IONA
dkulp@apache.org
http://www.dankulp.com/blog
RE: Maps and Interfaces as params/returns sample....
Posted by Ayush Gupta <ay...@inquisant.com>.
Daniel,
I tried this and am indeed able to use interfaces as parameters.
However, I did encounter one problem: "The marshalling is being done based
on the concrete class of passed object and not based on the interface
itself"
So, consider this example:
- Lets say that UserImpl has a few additional properties like userId and
userSalary (with getters/setters) which are not present in the User
Interface.
- When a client passes an instance of UserImpl to the service (as the User
interface) only name ought to be marshaled and not userId or userSalary.
The intent of wrapping UserImpl around an interface would be to encapsulate
some of the properties in UserImpl which are not pertinent to User
interface. Marshalling those "extra" properties defeats that intent.
I did discover that one way to hide userId and userSalary was to mark the
setters of those two in UserImpl with the XmlTransient annotation but that
does not feel so optimal.
-ayush
-----Original Message-----
From: Daniel Kulp [mailto:dkulp@apache.org]
Sent: Thursday, February 28, 2008 12:09 PM
To: cxf-user@incubator.apache.org
Cc: cxf-dev@incubator.apache.org
Subject: Maps and Interfaces as params/returns sample....
I just wanted to let everyone know that I've deployed a new CXF 2.1
snapshot that has an updated java_first_jaxws sample that includes using
an interface and a Map object as parameters/returns to methods on the
interface.
Since those have been common "issues" lately, I'd greatly appreciate it
if folks could give it a quick look and make any suggestions and
comments on how to make it even more useful.
Download the latest from:
http://people.apache.org/repo/m2-snapshot-repository/org/apache/cxf/apache-c
xf/2.1-incubator-SNAPSHOT/
--
J. Daniel Kulp
Principal Engineer, IONA
dkulp@apache.org
http://www.dankulp.com/blog
RE: Maps and Interfaces as params/returns sample....
Posted by Ayush Gupta <ay...@inquisant.com>.
Sweet! Thanks for looking at this so promptly.
I'll try this tomorrow.
-ayush
-----Original Message-----
From: Daniel Kulp [mailto:dkulp@apache.org]
Sent: Thursday, February 28, 2008 12:09 PM
To: cxf-user@incubator.apache.org
Cc: cxf-dev@incubator.apache.org
Subject: Maps and Interfaces as params/returns sample....
I just wanted to let everyone know that I've deployed a new CXF 2.1
snapshot that has an updated java_first_jaxws sample that includes using
an interface and a Map object as parameters/returns to methods on the
interface.
Since those have been common "issues" lately, I'd greatly appreciate it
if folks could give it a quick look and make any suggestions and
comments on how to make it even more useful.
Download the latest from:
http://people.apache.org/repo/m2-snapshot-repository/org/apache/cxf/apache-c
xf/2.1-incubator-SNAPSHOT/
--
J. Daniel Kulp
Principal Engineer, IONA
dkulp@apache.org
http://www.dankulp.com/blog