You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Thomas G Lawless <tg...@us.ibm.com> on 2009/08/13 21:30:30 UTC

OpenJPA and JAXB


I have been experimenting with OpenJPA and JAXB with regard to storing and
retrieving XML from an DB2 9.7 database and I've run into a problem.  I've
gone through the steps of creating a simple XML schema and generating the
Java classes using xjc.  I have followed the steps in the OpenJPA manual so
I have not defined a name space in the schema and I have added the
@XmlRootElement annotation to the generated root class.  I have created
sample code that successfully creates an instance of my entity with the
JAXB property and I can persist the entity to the database.  I can also
retrieve the entity from the database and the XML is unmarshalled
successfully as long as I use a single instance of the EntityManager to do
both tasks.  What I've found is if I use a separate instance on
EntityManager to retrieve the entity, I receive an error along the line of
this:

org.apache.openjpa.persistence.PersistenceException:
javax.xml.bind.JAXBElement incompatible with.....

This only happens if I use a instance of EntityManager that is different
then the instance used to persist the original record.  For example, if I
do the following:

EntityManagerFactory emFactory = .......
EntityManager em = emFactory............
em.getTransaction().begin();............
/*.
      Create the instance of the JAXB class and the entity.
      Populate both classes with data.
      Set the JAXB property of the entity class
*/

em.persist(.....);
em.getTransaction().commit();

MyEntity entity = em.find(.......);


The above code executes without error.  I've checked the db record and it
is correct.  I have also validated the XML in the db against the schema
used to generate the JAXB classes and there are no issues there either.  If
I run another program that tries to retrieve the same entity as above....
i.e.

EntityManagerFactory emFactory = .......
EntityManager em = emFactory...........

MyEntity entity = em.find(.......);....


the exception noted above is thrown.  I am currently using OpenJPA 1.2.1
and JAXB 2.0.5.  I have also tried this with JAXB 2.1.12 and I receive the
same result.  Am I doing something wrong?  Could this be a bug in OpenJPA?

Re: OpenJPA and JAXB

Posted by Pinaki Poddar <pp...@apache.org>.
Hi,
  You may find these URLs relevant..

[1] http://n2.nabble.com/Fluid,-SDO-persistence-with-JPA-td2992382.html
[2] http://people.apache.org/~ppoddar/fluid/site/welcome.html


Thomas G Lawless wrote:
> 
> 
> 
> I have been experimenting with OpenJPA and JAXB with regard to storing and
> retrieving XML from an DB2 9.7 database and I've run into a problem.  I've
> gone through the steps of creating a simple XML schema and generating the
> Java classes using xjc.  I have followed the steps in the OpenJPA manual
> so
> I have not defined a name space in the schema and I have added the
> @XmlRootElement annotation to the generated root class.  I have created
> sample code that successfully creates an instance of my entity with the
> JAXB property and I can persist the entity to the database.  I can also
> retrieve the entity from the database and the XML is unmarshalled
> successfully as long as I use a single instance of the EntityManager to do
> both tasks.  What I've found is if I use a separate instance on
> EntityManager to retrieve the entity, I receive an error along the line of
> this:
> 
> org.apache.openjpa.persistence.PersistenceException:
> javax.xml.bind.JAXBElement incompatible with.....
> 
> This only happens if I use a instance of EntityManager that is different
> then the instance used to persist the original record.  For example, if I
> do the following:
> 
> EntityManagerFactory emFactory = .......
> EntityManager em = emFactory............
> em.getTransaction().begin();............
> /*.
>       Create the instance of the JAXB class and the entity.
>       Populate both classes with data.
>       Set the JAXB property of the entity class
> */
> 
> em.persist(.....);
> em.getTransaction().commit();
> 
> MyEntity entity = em.find(.......);
> 
> 
> The above code executes without error.  I've checked the db record and it
> is correct.  I have also validated the XML in the db against the schema
> used to generate the JAXB classes and there are no issues there either. 
> If
> I run another program that tries to retrieve the same entity as above....
> i.e.
> 
> EntityManagerFactory emFactory = .......
> EntityManager em = emFactory...........
> 
> MyEntity entity = em.find(.......);....
> 
> 
> the exception noted above is thrown.  I am currently using OpenJPA 1.2.1
> and JAXB 2.0.5.  I have also tried this with JAXB 2.1.12 and I receive the
> same result.  Am I doing something wrong?  Could this be a bug in OpenJPA?
> 


-----
Pinaki 
-- 
View this message in context: http://n2.nabble.com/OpenJPA-and-JAXB-tp3440312p3448776.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.