Hello Martin,
Let me first summarize what I think you say your problem is. If I got it
wrong, no need to read the rest of this e-mail :)
You have POJOs generated by Hibernate. You want to have a method in your
web service that takes these POJOs as arguments, so that data can be
exchanged between the client and database with the least hassle.
However, after generating the WSDD and Java classes from the WSDL that
you generated from your interface, you notice that some Java types of
the fields in the Javabeans changed. Right?
First of all, the web service is a middle layer and I wonder whether it
is a good idea to expose classes that depend so much on your schema
directly to your clients. A little change to your DB schema would give
you a lot of maintenance.
As there are no XML types that map to java.util.Set, java.util.Date,
you'd either have to look at your schema or Hibernate to see if you
can't have your Hibernate generated POJOs use Java types that can be
mapped to, or write adapters. I'd go for the latter solution, as it has
the added advantage of separating the DB and client layers.
Good luck,
Dies
Martin Wunderlich wrote:
Hello Vartan,
Thank you very much for your help and your suggestion.
In the meantime, I seem to have identified the root cause of my
problems and it seems to be on a conceptual level rather than a coding
level. Taking a closer a look at the classes generated by WSDL2Java I
noticed that the utility will also produce its own versions of any
objects (POJOs) that serve as complex type arguments. A number of
important changes are made there: final static constants are removed,
(de)serializers are added, java.util.Date get converted to Calendar
type, Sets are converted to object arrays.
This
is worsened by the fact that I am using Hibernate for the persistence
of these objects and they were auto-generated from the database. I am
a bit lost now how to deal with this situation. It seems that I have
to create and maintain two versions of the same object type, one for
the web service and one for the persistence layer or perhaps work with
some sort of adapter class, thereby tripling all the efforts. Seems like too
much
maintenance hassle than I would want to deal with.
Are there any
established best practices for how to deal with such a situation?
Cheers,
Martin