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