1 package eu
.etaxonomy
.cdm
.jaxb
;
3 import org
.apache
.log4j
.Logger
;
4 import org
.hibernate
.Hibernate
;
5 import org
.hibernate
.proxy
.HibernateProxy
;
7 import com
.sun
.xml
.bind
.api
.AccessorException
;
8 import com
.sun
.xml
.bind
.v2
.runtime
.JAXBContextImpl
;
9 import com
.sun
.xml
.bind
.v2
.runtime
.reflect
.Accessor
;
11 public class CdmAccessor
<BeanT
,ValueT
> extends Accessor
<BeanT
,ValueT
> {
13 private static final Logger logger
= Logger
.getLogger(CdmAccessor
.class);
15 private Accessor
<BeanT
, ValueT
> delegate
;
17 public CdmAccessor(Accessor
<BeanT
, ValueT
> delegate
) {
18 super(delegate
.getValueType());
19 this.delegate
= delegate
;
23 public Accessor
<BeanT
, ValueT
> optimize(JAXBContextImpl context
) {
24 delegate
= delegate
.optimize(context
);
29 public ValueT
get(BeanT bean
) throws AccessorException
{
30 return hideLazy(delegate
.get(bean
));
34 public void set(BeanT bean
, ValueT value
) throws AccessorException
{
35 delegate
.set(bean
, value
);
38 protected ValueT
hideLazy(ValueT value
) {
39 if (Hibernate
.isInitialized(value
)) {
40 if(value
instanceof HibernateProxy
) {
41 logger
.info("Accessor Returning " + value
+ " as unwrapped proxy");
42 return (ValueT
)((HibernateProxy
)value
).getHibernateLazyInitializer().getImplementation();
44 logger
.info("Accessor Returning " + value
);