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#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...