Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion core/src/main/java/org/apache/struts2/util/ProxyUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,17 @@ public class ProxyUtil {
private static final OgnlCache<Member, Boolean> isProxyMemberCache = new DefaultOgnlCacheFactory<Member, Boolean>(
CACHE_MAX_SIZE, OgnlCacheFactory.CacheType.BASIC, CACHE_INITIAL_CAPACITY).buildOgnlCache();

private static final boolean HIBERNATE_AVAILABLE = isHibernateAvailable();

private static boolean isHibernateAvailable() {
try {
Class.forName("org.hibernate.proxy.HibernateProxy");
return true;
} catch (ClassNotFoundException e) {
return false;
}
}

/**
* Determine the ultimate target class of the given instance, traversing
* not only a top-level proxy but any number of nested proxies as well &mdash;
Expand Down Expand Up @@ -121,8 +132,9 @@ public static boolean isProxyMember(Member member, Object object) {
*/
@Deprecated(since = "7.2")
public static boolean isHibernateProxy(Object object) {
if (!HIBERNATE_AVAILABLE || object == null) return false;
try {
return object != null && HibernateProxy.class.isAssignableFrom(object.getClass());
return HibernateProxy.class.isAssignableFrom(object.getClass());
} catch (LinkageError ignored) {
return false;
}
Expand All @@ -137,6 +149,7 @@ public static boolean isHibernateProxy(Object object) {
*/
@Deprecated(since = "7.2")
public static boolean isHibernateProxyMember(Member member) {
if (!HIBERNATE_AVAILABLE) return false;
try {
return hasMember(HibernateProxy.class, member);
} catch (LinkageError ignored) {
Expand Down Expand Up @@ -220,6 +233,7 @@ private static boolean hasMember(Class<?> clazz, Member member) {
*/
@Deprecated(since = "7.2")
public static Object getHibernateProxyTarget(Object object) {
if (!HIBERNATE_AVAILABLE) return object;
try {
return Hibernate.unproxy(object);
} catch (LinkageError ignored) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,17 @@
*/
public class StrutsProxyService implements ProxyService {

private static final boolean HIBERNATE_AVAILABLE = isHibernateAvailable();

private static boolean isHibernateAvailable() {
try {
Class.forName("org.hibernate.proxy.HibernateProxy");
return true;
} catch (ClassNotFoundException e) {
return false;
}
}

private final OgnlCache<Class<?>, Boolean> isProxyCache;
private final OgnlCache<Member, Boolean> isProxyMemberCache;

Expand Down Expand Up @@ -90,15 +101,21 @@ public boolean isProxyMember(Member member, Object object) {

@Override
public boolean isHibernateProxy(Object object) {
if (!HIBERNATE_AVAILABLE || object == null) {
return false;
}
try {
return object != null && HibernateProxy.class.isAssignableFrom(object.getClass());
return HibernateProxy.class.isAssignableFrom(object.getClass());
} catch (LinkageError ignored) {
return false;
}
}

@Override
public boolean isHibernateProxyMember(Member member) {
if (!HIBERNATE_AVAILABLE) {
return false;
}
try {
return hasMember(HibernateProxy.class, member);
} catch (LinkageError ignored) {
Expand All @@ -108,6 +125,9 @@ public boolean isHibernateProxyMember(Member member) {

@Override
public Object getHibernateProxyTarget(Object object) {
if (!HIBERNATE_AVAILABLE) {
return object;
}
try {
return Hibernate.unproxy(object);
} catch (LinkageError ignored) {
Expand Down
Loading