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:47:42 UTC

[cxf] 01/03: [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 3.2.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit bf61407502fee313b12e0220de223a0dd50475c2
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
    
    (cherry picked from commit c453a20f958b49119029b229a908f94848fb7f2d)
    
    Conflicts:
    	rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/blueprint/JAXRSServerFactoryBeanDefinitionParser.java
---
 .../org/apache/cxf/jaxrs/JAXRSBindingFactory.java  |  5 ++-
 .../jaxrs/blueprint/JAXRSBPNamespaceHandler.java   | 38 +++++++++++++++++
 .../JAXRSServerFactoryBeanDefinitionParser.java    | 49 +++++++++++++++++++++-
 .../main/resources/META-INF/cxf/bus-extensions.txt |  1 +
 4 files changed, 90 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 a9d3612..bc08e0f 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,10 +30,16 @@ 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;
+<<<<<<< HEAD
 import org.apache.cxf.common.util.StringUtils;
+=======
+import org.apache.cxf.common.injection.NoJSR250Annotations;
+>>>>>>> c453a20... [CXF-8088]ensure jaxrs endpoint can work correctly when using a shared bus exposed from another bundle
 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;
@@ -44,7 +50,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,
@@ -134,8 +144,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;
@@ -173,4 +184,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