You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2019/08/08 00:40:56 UTC

[cxf] branch master updated: [CXF-8088]ensure jaxrs endpoint can work correctly when using a shared bus exposed from another bundle

This is an automated email from the ASF dual-hosted git repository.

ffang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/master by this push:
     new c453a20  [CXF-8088]ensure jaxrs endpoint can work correctly when using a shared bus exposed from another bundle
c453a20 is described below

commit c453a20f958b49119029b229a908f94848fb7f2d
Author: Freeman Fang <fr...@gmail.com>
AuthorDate: Wed Aug 7 20:40:43 2019 -0400

    [CXF-8088]ensure jaxrs endpoint can work correctly when using a shared bus exposed from another bundle
---
 .../org/apache/cxf/jaxrs/JAXRSBindingFactory.java  |  5 ++-
 .../jaxrs/blueprint/JAXRSBPNamespaceHandler.java   | 38 ++++++++++++++++++
 .../JAXRSServerFactoryBeanDefinitionParser.java    | 46 +++++++++++++++++++++-
 .../main/resources/META-INF/cxf/bus-extensions.txt |  1 +
 4 files changed, 87 insertions(+), 3 deletions(-)

diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java
index c124661..54e5aac 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java
@@ -19,6 +19,8 @@
 package org.apache.cxf.jaxrs;
 
 
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.logging.Logger;
 
 import javax.xml.namespace.QName;
@@ -52,7 +54,8 @@ public class JAXRSBindingFactory extends AbstractBindingFactory {
     public JAXRSBindingFactory() {
     }
     public JAXRSBindingFactory(Bus b) {
-        super(b);
+        super(b, Collections.unmodifiableList(Arrays.asList(
+                                                            JAXRS_BINDING_ID)));
     }
 
     public Binding createBinding(BindingInfo bi) {
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/blueprint/JAXRSBPNamespaceHandler.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/blueprint/JAXRSBPNamespaceHandler.java
index d9d329a..d37885d 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/blueprint/JAXRSBPNamespaceHandler.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/blueprint/JAXRSBPNamespaceHandler.java
@@ -31,7 +31,11 @@ import org.w3c.dom.Node;
 
 import org.apache.aries.blueprint.Namespaces;
 import org.apache.aries.blueprint.ParserContext;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
+import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.helpers.BaseNamespaceHandler;
+import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean;
 import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.cxf.staxutils.W3CDOMStreamWriter;
 import org.apache.cxf.staxutils.transform.OutTransformWriter;
@@ -98,5 +102,39 @@ public class JAXRSBPNamespaceHandler extends BaseNamespaceHandler {
     public void setBlueprintContainer(BlueprintContainer blueprintContainer) {
         this.blueprintContainer = blueprintContainer;
     }
+    
+    @NoJSR250Annotations
+    public static class BPJAXRSServerFactoryBean extends JAXRSServerFactoryBean {
+
+        private Server server;
+
+        public BPJAXRSServerFactoryBean() {
+            super();
+        }
+        public BPJAXRSServerFactoryBean(JAXRSServiceFactoryBean fact) {
+            super(fact);
+        }
+        public Server getServer() {
+            return server;
+        }
+
+        public void init() {
+            create();
+        }
+        @Override
+        public Server create() {
+            if (server == null) {
+                server = super.create();
+            }
+            return server;
+        }
+        public void destroy() {
+            if (server != null) {
+                server.destroy();
+                server = null;
+            }
+        }
+    }
+
 
 }
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/blueprint/JAXRSServerFactoryBeanDefinitionParser.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/blueprint/JAXRSServerFactoryBeanDefinitionParser.java
index fcc9a4b..5be4e72 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/blueprint/JAXRSServerFactoryBeanDefinitionParser.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/blueprint/JAXRSServerFactoryBeanDefinitionParser.java
@@ -30,9 +30,12 @@ import org.apache.aries.blueprint.ParserContext;
 import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
 import org.apache.aries.blueprint.mutable.MutableCollectionMetadata;
 import org.apache.aries.blueprint.mutable.MutablePassThroughMetadata;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.configuration.blueprint.SimpleBPBeanDefinitionParser;
+import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean;
 import org.apache.cxf.jaxrs.model.UserResource;
 import org.apache.cxf.jaxrs.utils.ResourceUtils;
 import org.osgi.service.blueprint.reflect.ComponentMetadata;
@@ -43,7 +46,11 @@ import org.osgi.service.blueprint.reflect.Metadata;
 public class JAXRSServerFactoryBeanDefinitionParser extends SimpleBPBeanDefinitionParser {
 
     public JAXRSServerFactoryBeanDefinitionParser() {
-        super(JAXRSServerFactoryBean.class);
+        this(BPJAXRSServerFactoryBean.class);
+    }
+    
+    public JAXRSServerFactoryBeanDefinitionParser(Class<?> cls) {
+        super(cls);
     }
     @Override
     protected void mapAttribute(MutableBeanMetadata bean,
@@ -133,8 +140,9 @@ public class JAXRSServerFactoryBeanDefinitionParser extends SimpleBPBeanDefiniti
     @Override
     public Metadata parse(Element element, ParserContext context) {
         MutableBeanMetadata bean = (MutableBeanMetadata)super.parse(element, context);
+       
         bean.setInitMethod("init");
-
+        bean.setDestroyMethod("destroy");
         // We don't really want to delay the registration of our Server
         bean.setActivation(ComponentMetadata.ACTIVATION_EAGER);
         return bean;
@@ -172,4 +180,38 @@ public class JAXRSServerFactoryBeanDefinitionParser extends SimpleBPBeanDefiniti
     private static String getResourceClassFromElement(Element e) {
         return e.getAttribute("name");
     }
+    
+    @NoJSR250Annotations
+    public static class BPJAXRSServerFactoryBean extends JAXRSServerFactoryBean {
+
+        private Server server;
+
+        public BPJAXRSServerFactoryBean() {
+            super();
+        }
+        public BPJAXRSServerFactoryBean(JAXRSServiceFactoryBean fact) {
+            super(fact);
+        }
+        public Server getServer() {
+            return server;
+        }
+
+        public void init() {
+            create();
+        }
+        @Override
+        public Server create() {
+            if (server == null) {
+                server = super.create();
+            }
+            return server;
+        }
+        public void destroy() {
+            if (server != null) {
+                server.destroy();
+                server = null;
+            }
+        }
+    }
+
 }
diff --git a/rt/frontend/jaxrs/src/main/resources/META-INF/cxf/bus-extensions.txt b/rt/frontend/jaxrs/src/main/resources/META-INF/cxf/bus-extensions.txt
new file mode 100644
index 0000000..86634fb
--- /dev/null
+++ b/rt/frontend/jaxrs/src/main/resources/META-INF/cxf/bus-extensions.txt
@@ -0,0 +1 @@
+org.apache.cxf.jaxrs.JAXRSBindingFactory::true