[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - XMLEncoder stops serializing at PersistentBag collection

forumer do-not-reply at jboss.com
Mon Feb 5 10:45:25 EST 2007


I have this class which is a composite of other classes. One of the composite, Role is itself a composite of class, Recipient. But the XMLEncoder stops at Role designating it as PersistentBag. Apparently, XMLEncoder doesn't go any further because it is not a bean.

Has anybody developed a persistentDelegate to deal with PersistentDelegate and "unravel" XML all the way to the edge of the object graph?

Thanks in Advance.


Here is the "central" class:


  | 
  | public class ServiceNotification implements Serializable
  | {
  | private long id;
  | private List<Role> roles;
  | private Application application;
  | private Event event;
  | private String name;
  | 
  | public ServiceNotification(){}
  | public ServiceNotification(Application app, Event event, String name)
  | {
  | this.application = app;
  | this.event = event;
  | this.name = name;
  | }
  | 
  | @Id
  | @GeneratedValue
  | public long getId()
  | {
  | return id;
  | }
  | public void setId(long id)
  | {
  | this.id = id;
  | }
  | 
  | @OneToOne(fetch = FetchType.EAGER, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
  | public Application getApplication()
  | {
  | return application;
  | }
  | public void setApplication(Application application)
  | {
  | this.application = application;
  | }
  | 
  | @OneToOne(fetch = FetchType.EAGER, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
  | public Event getEvent()
  | {
  | return event;
  | }
  | public void setEvent(Event event)
  | {
  | this.event = event;
  | }
  | 
  | @OneToMany(fetch = FetchType.EAGER, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
  | public List<Role> getRoles()
  | {
  | return roles;
  | }
  | public void setRoles(List<Role> roles)
  | {
  | this.roles = roles;
  | }
  | 
  | 
  | 

Role contains recipients


  | 
  | public class Role implements Serializable
  | {
  | private long id;
  | private String name;
  | private List<Recipient> recipients = new ArrayList<Recipient>();
  | 
  | public Role(){}
  | public Role(long id){this.id = id;}
  | public Role(String name){this.name = name;}
  | 
  | @Id
  | @GeneratedValue
  | public long getId()
  | {
  | return id;
  | }
  | 
  | public void setId(long id)
  | {
  | this.id = id;
  | }
  | 
  | /**
  | * @return Returns the role_name.
  | */
  | public String getName()
  | {
  | return name;
  | }
  | 
  | /**
  | * @return Returns the recipients.
  | */
  | @ManyToMany(fetch = FetchType.EAGER, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
  | @JoinTable
  | (
  | name="ROLE_RECIPIENT",
  | joinColumns=@JoinColumn(name="ROLE_ID", referencedColumnName="ID"), 
  | inverseJoinColumns=@JoinColumn(name="RECIPIENT_ID", referencedColumnName="ID")
  | )
  | public List<Recipient> getRecipients()
  | {
  | return recipients;
  | }
  | 
  | /**
  | * @param recipients The recipients to set.
  | */
  | public void setRecipients(List<Recipient> recipients)
  | {
  | this.recipients = recipients;
  | }
  | 
  | 
  | /**
  | * @param role_name The role_name to set.
  | */
  | public void setRole_name(String name)
  | {
  | this.name = name;
  | }
  | 
  | public void setName(String name)
  | {
  | this.name = name;
  | }
  | 
  | 
  | 

The XML output is:


  | 
  | <?xml version="1.0" encoding="UTF-8"?> 
  | <java version="1.5.0_06" class="java.beans.XMLDecoder"> 
  | <object class="java.util.ArrayList"> 
  | <void method="add"> 
  | <object id="ServiceNotification0" class="examplen.ServiceNotification"> 
  | <void property="application"> 
  | <object class="examplen.Application"> 
  | <void property="id"> 
  | <long>1</long> 
  | </void> 
  | <void property="name"> 
  | <string>FLEET_MANAGER</string> 
  | </void> 
  | </object> 
  | </void> 
  | <void property="event"> 
  | <object class="examplen.Event"> 
  | <void property="action"> 
  | <string>TO BE DETERMINED</string> 
  | </void> 
  | <void property="description"> 
  | <string>An airplane in the database has been changed</string> 
  | </void> 
  | <void property="id"> 
  | <long>1</long> 
  | </void> 
  | <void property="type"> 
  | <string>AIRPLANE_CHANGE</string> 
  | </void> 
  | </object> 
  | </void> 
  | <void property="id"> 
  | <long>1</long> 
  | </void> 
  | <void property="roles"> 
  | <object class="org.hibernate.collection.PersistentBag"> 
  | <void property="owner"> 
  | <object idref="ServiceNotification0"/> 
  | </void> 
  | </object> 
  | </void> 
  | </object> 
  | </void> 
  | </object> 
  | </java> 
  | 
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4011401#4011401

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4011401



More information about the jboss-user mailing list