You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2016/11/11 02:07:19 UTC

cxf git commit: Fixed handling resource classes in CDI context by introducing dedicated resource provider implementation

Repository: cxf
Updated Branches:
  refs/heads/3.1.x-fixes fbe8db21d -> 1d2f49e37


Fixed handling resource classes in CDI context by introducing dedicated resource provider implementation


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/1d2f49e3
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/1d2f49e3
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/1d2f49e3

Branch: refs/heads/3.1.x-fixes
Commit: 1d2f49e37fa341aaa56960235cc784def4b4a70a
Parents: fbe8db2
Author: reta <dr...@gmail.com>
Authored: Thu Nov 10 21:07:02 2016 -0500
Committer: reta <dr...@gmail.com>
Committed: Thu Nov 10 21:07:02 2016 -0500

----------------------------------------------------------------------
 .../org/apache/cxf/cdi/CdiResourceProvider.java | 51 ++++++++++++++++++++
 .../cxf/cdi/JAXRSCdiResourceExtension.java      | 25 ++++------
 2 files changed, 61 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/1d2f49e3/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiResourceProvider.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiResourceProvider.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiResourceProvider.java
new file mode 100644
index 0000000..997cf40
--- /dev/null
+++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/CdiResourceProvider.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.cdi;
+
+import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
+import org.apache.cxf.message.Message;
+
+public class CdiResourceProvider implements ResourceProvider {
+    private final Object instance;
+    private final Class<?> resourceClass;
+    
+    CdiResourceProvider(final Class<?> resourceClass, final Object instance) {
+        this.resourceClass = resourceClass;
+        this.instance = instance;
+    }
+    
+    @Override
+    public Object getInstance(Message m) {
+        return instance;
+    }
+
+    @Override
+    public void releaseInstance(Message m, Object o) {
+    }
+
+    @Override
+    public Class<?> getResourceClass() {
+        return resourceClass;
+    }
+
+    @Override
+    public boolean isSingleton() {
+        return true;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cxf/blob/1d2f49e3/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java
----------------------------------------------------------------------
diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java
index 968424e..9fb59d8 100644
--- a/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java
+++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java
@@ -168,10 +168,15 @@ public class JAXRSCdiResourceExtension implements Extension {
     private JAXRSServerFactoryBean createFactoryInstance(final Application application, final BeanManager beanManager) {
 
         final JAXRSServerFactoryBean instance = ResourceUtils.createApplication(application, false, false, bus);
-        final Map< Class< ? >, List< Object > > classified = classifySingletons(application, beanManager);
-        instance.setServiceBeans(classified.get(Path.class));
+        final Map< Class< ? >, List< Object > > classified = classes2singletons(application, beanManager);
+        
         instance.setProviders(classified.get(Provider.class));
-        instance.setFeatures(CastUtils.cast(classified.get(Feature.class), Feature.class));
+        instance.getFeatures().addAll(CastUtils.cast(classified.get(Feature.class), Feature.class));
+        
+        for (final Object resource: classified.get(Path.class)) {
+            instance.setResourceProvider(resource.getClass(), 
+                new CdiResourceProvider(resource.getClass(), resource));
+        }
 
         return instance;
     }
@@ -183,9 +188,8 @@ public class JAXRSCdiResourceExtension implements Extension {
      * @param application the application instance
      * @return classified singletons by instance types
      */
-    private Map< Class< ? >, List< Object > > classifySingletons(final Application application,
+    private Map< Class< ? >, List< Object > > classes2singletons(final Application application,
                                                                  final BeanManager beanManager) {
-        final Set<Object> singletons = application.getSingletons();
         final Map< Class< ? >, List< Object > > classified =
               new HashMap<>();
 
@@ -193,16 +197,6 @@ public class JAXRSCdiResourceExtension implements Extension {
         classified.put(Provider.class, new ArrayList<>());
         classified.put(Path.class, new ArrayList<>());
 
-        for (final Object singleton: singletons) {
-            if (singleton instanceof Feature) {
-                classified.get(Feature.class).add(singleton);
-            } else if (singleton.getClass().isAnnotationPresent(Provider.class)) {
-                classified.get(Provider.class).add(singleton);
-            } else if (singleton.getClass().isAnnotationPresent(Path.class)) {
-                classified.get(Path.class).add(singleton);
-            }
-        }
-
         // now loop through the classes
         Set<Class<?>> classes = application.getClasses();
         if (!classes.isEmpty()) {
@@ -210,6 +204,7 @@ public class JAXRSCdiResourceExtension implements Extension {
             classified.get(Provider.class).addAll(loadProviders(beanManager, classes));
             classified.get(Feature.class).addAll(loadFeatures(beanManager, classes));
         }
+        
         return classified;
     }