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));
                 }