You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/04/05 13:25:35 UTC
svn commit: r1585049 - in
/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs:
AutoJAXRSInvoker.java CxfRsHttpListener.java
Author: rmannibucau
Date: Sat Apr 5 11:25:34 2014
New Revision: 1585049
URL: http://svn.apache.org/r1585049
Log:
TOMEE-1168 12697Impl proxies are not deterministicly working with cxf-rs
Modified:
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/AutoJAXRSInvoker.java
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/AutoJAXRSInvoker.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/AutoJAXRSInvoker.java?rev=1585049&r1=1585048&r2=1585049&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/AutoJAXRSInvoker.java (original)
+++ tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/AutoJAXRSInvoker.java Sat Apr 5 11:25:34 2014
@@ -57,10 +57,12 @@ public class AutoJAXRSInvoker implements
public Object invoke(Exchange exchange, Object o) { // mainly a select the right invoker impl
final ClassResourceInfo cri = (ClassResourceInfo) exchange.get("root.resource.class");
- if (cri != null
- && ejbs.containsKey(cri.getServiceClass().getName())
- && !BeanType.MANAGED.equals(ejbs.get(cri.getServiceClass().getName()).context.getComponentType())) {
- return ejbInvoker.invoke(exchange, o);
+ if (cri != null) {
+ final String clazz = cri.getServiceClass().getName();
+ final EJBRestServiceInfo restServiceInfo = ejbs.get(clazz);
+ if (restServiceInfo != null && !BeanType.MANAGED.equals(restServiceInfo.context.getComponentType())) {
+ return ejbInvoker.invoke(exchange, o);
+ }
}
return jaxrsInvoker.invoke(exchange, o);
Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1585049&r1=1585048&r2=1585049&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java (original)
+++ tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java Sat Apr 5 11:25:34 2014
@@ -47,6 +47,7 @@ import org.apache.openejb.api.jmx.Manage
import org.apache.openejb.assembler.classic.ServiceInfo;
import org.apache.openejb.assembler.classic.util.ServiceConfiguration;
import org.apache.openejb.assembler.classic.util.ServiceInfos;
+import org.apache.openejb.dyni.DynamicSubclass;
import org.apache.openejb.loader.IO;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.monitoring.LocalMBeanServer;
@@ -378,11 +379,20 @@ public class CxfRsHttpListener implement
}
for (final Class<?> clazz : classes) {
- final String name = clazz.getName();
- if (restEjbs.containsKey(name)) {
- final BeanContext bc = restEjbs.get(name).context;
- final Object proxy = ProxyEJB.subclassProxy(bc);
- factory.setResourceProvider(clazz, new NoopResourceProvider(bc.getBeanClass(), proxy));
+ String name = clazz.getName();
+ EJBRestServiceInfo restServiceInfo = restEjbs.get(name);
+
+ if (name.endsWith(DynamicSubclass.IMPL_SUFFIX)) {
+ name = name.substring(0, name.length() - DynamicSubclass.IMPL_SUFFIX.length());
+ restServiceInfo = restEjbs.get(name);
+ if (restServiceInfo != null) { // AutoJAXRSInvoker relies on it
+ restEjbs.put(clazz.getName(), restServiceInfo);
+ }
+ }
+
+ if (restServiceInfo != null) {
+ final Object proxy = ProxyEJB.subclassProxy(restServiceInfo.context);
+ factory.setResourceProvider(clazz, new NoopResourceProvider(restServiceInfo.context.getBeanClass(), proxy));
} else {
factory.setResourceProvider(clazz, new OpenEJBPerRequestPojoResourceProvider(classLoader, clazz, injections, context, owbCtx));
}