another "ugly" solution is the following:

instad of 

  | @XmlIDREF
  | 
use:

  | @XmlJavaTypeAdapter(Entity2StringXMLAdapter.class)
  | 
 and here is the implementation for the Adapter:

  | public class Entity2StringXMLAdapter extends XmlAdapter<String,BasicEntity>
  | {
  | 
  |     @Override
  |     public String marshal(final BasicEntity entityGot) throws Exception
  |     {
  | 
  |             String strValue = "";
  |             try
  |             {
  |                     strValue = entityGot.getName() + "(" + 
entityGot.getId() + ")";
  |             }
  |             catch (LazyInitializationException e)
  |             {
  |                     Long id = this.getEntityID(entityGot);
  |                     if(id == null)
  |                             id = new Long(-1);
  |                     strValue = "lazy (" + id + ")";
  | 
  |             }
  |             return strValue;
  |     }
  | 
  | @Override
  |     public BasicEntity unmarshal(final String arg0) throws Exception
  |     {
  |             return null;
  |     }
  | 
  |     private Long getEntityID(final BasicEntity entityGot)
  |     {
  |             //dirty, but it works:
  |             //long duration = System.currentTimeMillis();
  |             Long entityId = null;
  |             Class clazz = entityGot.getClass();
  |             for(Field fieldHandler : clazz.getDeclaredFields())
  |             {
  |                     
if(fieldHandler.getType().isAssignableFrom(javassist.util.proxy.MethodHandler.class)
 && fieldHandler.getName().equals("handler"))
  |                     {
  |                             try
  |                             {
  |                                     fieldHandler.setAccessible(true);
  |                                     javassist.util.proxy.MethodHandler 
methodHandler = (javassist.util.proxy.MethodHandler) 
fieldHandler.get(entityGot);
  | 
  |                                     Field fieldID = 
AbstractLazyInitializer.class.getDeclaredField("id");
  |                                     fieldID.setAccessible(true);
  |                                     entityId = 
(Long)fieldID.get(methodHandler);
  |                             }
  |                             catch (SecurityException e1)
  |                             {
  |                                     e1.printStackTrace();
  |                             }
  |                             catch (IllegalArgumentException e1)
  |                             {
  |                                     e1.printStackTrace();
  |                             }
  |                             catch (IllegalAccessException e1)
  |                             {
  |                                     e1.printStackTrace();
  |                             }
  |                             catch (NoSuchFieldException e1)
  |                             {
  |                                     System.out.println("======= THIS 
EXCEPTION DEPENDS ON A NEWER HIBERNATE VERSION!!!!!! ========");
  |                                     e1.printStackTrace();
  |                             }
  |                             break;
  |                     }
  |             }
  |             return entityId;
  |     }
  | }
  | 

BasicEntity is just Interface that is implemented by all my entities with the 
following methods:


  | public Long getId();
  | public void setId(final Long idGot);
  | public String getName();
  | public void setName(final String strNameGot);
  | 

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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4165354
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to