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 <[email protected]> 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
