cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sberyoz...@gmail.com>
Subject Re: cxf git commit: [CXF-6131]JAX-RS resource spring auto-discovery doesn't work in OSGi
Date Wed, 03 Dec 2014 12:40:14 GMT
Hi Andriy
Indeed - as I mentioned I reverted the changes to the parser
Cheers, Sergey

On 03/12/14 12:38, Andrey Redko wrote:
> Hi guys,
>
> Thanks a lot for adding OSGi support. One question though: I think we
> should hide the environment discovery (OSGi/non-OSGI) inside the
> ClasspathScanner class.
> ClasspathScanner, when instantiated, can figure out if it runs in OSGi
> and create the right classpath scanner delegate (so
> JAXRSServerFactoryBeanDefiniti__onParser will stay unchanged).
> Thanks.
>
> Best Regards,
>      Andriy Redko
>
>
>
> On Wed, Dec 3, 2014 at 6:03 AM, Sergey Beryozkin <sberyozkin@gmail.com
> <mailto:sberyozkin@gmail.com>> wrote:
>
>     Hi Freeman
>
>     Thanks for this effort, I did a minor update to avoid updating all
>     of ClasspathScanner client code (JAX-RS server & client for now -
>     but possibly JAXWS Spring parsers in the future too).
>     Dan may likely have more comments but for now I have a couple of
>     questions,
>     - is FrameworkUtil.getBundle useful ? That returns a CXF bundle, right ?
>     - should this Spring DM code be pushed to a dedicated SpringOsgiUtil
>     to minimize the risk of some JVMs failing with some eager resolution
>     class loading exceptions in non-OSGI cases ?
>
>     Cheers, Sergey
>
>
>     On 03/12/14 05:06, ffang@apache.org <mailto:ffang@apache.org> wrote:
>
>         Repository: cxf
>         Updated Branches:
>             refs/heads/master 76c4df1bc -> 0de0309f2
>
>
>         [CXF-6131]JAX-RS resource spring auto-discovery doesn't work in OSGi
>
>
>         Project: http://git-wip-us.apache.org/__repos/asf/cxf/repo
>         <http://git-wip-us.apache.org/repos/asf/cxf/repo>
>         Commit:
>         http://git-wip-us.apache.org/__repos/asf/cxf/commit/0de0309f
>         <http://git-wip-us.apache.org/repos/asf/cxf/commit/0de0309f>
>         Tree: http://git-wip-us.apache.org/__repos/asf/cxf/tree/0de0309f
>         <http://git-wip-us.apache.org/repos/asf/cxf/tree/0de0309f>
>         Diff: http://git-wip-us.apache.org/__repos/asf/cxf/diff/0de0309f
>         <http://git-wip-us.apache.org/repos/asf/cxf/diff/0de0309f>
>
>         Branch: refs/heads/master
>         Commit: 0de0309f28e1543660c763c158f435__3d6d2189be
>         Parents: 76c4df1
>         Author: Freeman Fang <freeman.fang@gmail.com
>         <mailto:freeman.fang@gmail.com>>
>         Authored: Wed Dec 3 13:06:42 2014 +0800
>         Committer: Freeman Fang <freeman.fang@gmail.com
>         <mailto:freeman.fang@gmail.com>>
>         Committed: Wed Dec 3 13:06:42 2014 +0800
>
>         ------------------------------__------------------------------__----------
>            core/pom.xml                                    | 20
>         ++++++++++++++++++-
>            .../org/apache/cxf/bus/osgi/__CXFActivator.java   | 13
>         ++++++++++++
>            .../cxf/common/util/__SpringClasspathScanner.java | 21
>         ++++++++++++++++++--
>            parent/pom.xml                                  | 11 ++++++++++
>            .../__JAXRSServerFactoryBeanDefiniti__onParser.java | 12
>         +++++++++--
>            5 files changed, 72 insertions(+), 5 deletions(-)
>         ------------------------------__------------------------------__----------
>
>
>         http://git-wip-us.apache.org/__repos/asf/cxf/blob/0de0309f/__core/pom.xml
>         <http://git-wip-us.apache.org/repos/asf/cxf/blob/0de0309f/core/pom.xml>
>         ------------------------------__------------------------------__----------
>         diff --git a/core/pom.xml b/core/pom.xml
>         index 83ec6f8..d7e8f7a 100644
>         --- a/core/pom.xml
>         +++ b/core/pom.xml
>         @@ -44,7 +44,13 @@
>
>         org.slf4j*;resolution:=__optional;version="${cxf.osgi.__slf4j.version}",
>                        org.apache.log4j*;resolution:=__optional,
>
>         net.sf.cglib*;resolution:=__optional;version="${cxf.cglib.__osgi.version}",
>         -
>         org.springframework*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>         + org.springframework.osgi.io
>         <http://org.springframework.osgi.io>;__resolution:=optional;version="__${cxf.osgi.spring.osgi.__version}",
>         +
>         org.springframework.osgi.util;__resolution:=optional;version="__${cxf.osgi.spring.osgi.__version}",
>         +
>         org.springframework.aop*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>         +
>         org.springframework.beans*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>         +
>         org.springframework.context*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>         +
>         org.springframework.core*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>         +
>         org.springframework.util*;__resolution:=optional;version="__${cxf.osgi.spring.version}",
>
>         org.objectweb.asm*;resolution:__=optional;version="${cxf.osgi.__asm.version}",
>
>         javax.activation;version="${__cxf.osgi.javax.activation.__version}",
>
>         javax.annotation;version="${__cxf.osgi.javax.annotation.__version}",
>         @@ -205,6 +211,18 @@
>                        <optional>true</optional>
>                        <scope>provided</scope>
>                    </dependency>
>         +        <dependency>
>         +            <groupId>org.springframework.__osgi</groupId>
>         +            <artifactId>spring-osgi-io</__artifactId>
>         +            <optional>true</optional>
>         +            <scope>provided</scope>
>         +        </dependency>
>         +        <dependency>
>         +            <groupId>org.springframework.__osgi</groupId>
>         +            <artifactId>spring-osgi-core</__artifactId>
>         +            <optional>true</optional>
>         +            <scope>provided</scope>
>         +        </dependency>
>                </dependencies>
>                <build>
>                    <plugins>
>
>         http://git-wip-us.apache.org/__repos/asf/cxf/blob/0de0309f/__core/src/main/java/org/apache/__cxf/bus/osgi/CXFActivator.java
>         <http://git-wip-us.apache.org/repos/asf/cxf/blob/0de0309f/core/src/main/java/org/apache/cxf/bus/osgi/CXFActivator.java>
>         ------------------------------__------------------------------__----------
>         diff --git
>         a/core/src/main/java/org/__apache/cxf/bus/osgi/__CXFActivator.java
>         b/core/src/main/java/org/__apache/cxf/bus/osgi/__CXFActivator.java
>         index 3fed8a8..cb9cce1 100644
>         ---
>         a/core/src/main/java/org/__apache/cxf/bus/osgi/__CXFActivator.java
>         +++
>         b/core/src/main/java/org/__apache/cxf/bus/osgi/__CXFActivator.java
>         @@ -45,14 +45,23 @@ import org.osgi.util.tracker.__ServiceTracker;
>             * - Blueprint namespaces
>             */
>            public class CXFActivator implements BundleActivator {
>         +
>         +    /*
>         +     * a flag to tell if run the CXF in OSGi cont
>         +     */
>         +    private static boolean inOSGi;
>         +
>                private List<Extension> extensions;
>                private ManagedWorkQueueList workQueues = new
>         ManagedWorkQueueList();
>                private ServiceTracker configAdminTracker;
>                private CXFExtensionBundleListener cxfBundleListener;
>                private ServiceRegistration workQueueServiceRegistration;
>         +
>         +
>
>                /** {@inheritDoc}*/
>                public void start(BundleContext context) throws Exception {
>         +        inOSGi = true;
>                    cxfBundleListener = new
>         CXFExtensionBundleListener(__context.getBundle().__getBundleId());
>                    context.addBundleListener(__cxfBundleListener);
>                    cxfBundleListener.__registerExistingBundles(__context);
>         @@ -123,5 +132,9 @@ public class CXFActivator implements
>         BundleActivator {
>                    configAdminTracker.close();
>                    ExtensionRegistry.__removeExtensions(extensions);
>                }
>         +
>         +    public static boolean isInOSGi() {
>         +        return inOSGi;
>         +    }
>
>            }
>
>         http://git-wip-us.apache.org/__repos/asf/cxf/blob/0de0309f/__core/src/main/java/org/apache/__cxf/common/util/__SpringClasspathScanner.java
>         <http://git-wip-us.apache.org/repos/asf/cxf/blob/0de0309f/core/src/main/java/org/apache/cxf/common/util/SpringClasspathScanner.java>
>         ------------------------------__------------------------------__----------
>         diff --git
>         a/core/src/main/java/org/__apache/cxf/common/util/__SpringClasspathScanner.java
>         b/core/src/main/java/org/__apache/cxf/common/util/__SpringClasspathScanner.java
>         index 769d1f0..ce4dd7f 100644
>         ---
>         a/core/src/main/java/org/__apache/cxf/common/util/__SpringClasspathScanner.java
>         +++
>         b/core/src/main/java/org/__apache/cxf/common/util/__SpringClasspathScanner.java
>         @@ -28,7 +28,10 @@ import java.util.HashSet;
>            import java.util.List;
>            import java.util.Map;
>
>         +import org.apache.cxf.bus.osgi.__CXFActivator;
>            import org.apache.cxf.common.__classloader.ClassLoaderUtils;
>         +import org.osgi.framework.Bundle;
>         +import org.osgi.framework.__FrameworkUtil;
>            import org.springframework.core.io
>         <http://org.springframework.core.io>.__Resource;
>            import org.springframework.core.io
>         <http://org.springframework.core.io>.__support.__PathMatchingResourcePatternRes__olver;
>            import org.springframework.core.io
>         <http://org.springframework.core.io>.__support.__ResourcePatternResolver;
>         @@ -36,6 +39,8 @@ import
>         org.springframework.core.type.__AnnotationMetadata;
>            import
>         org.springframework.core.type.__classreading.__CachingMetadataReaderFactory;
>            import
>         org.springframework.core.type.__classreading.MetadataReader;
>            import
>         org.springframework.core.type.__classreading.__MetadataReaderFactory;
>         +import org.springframework.osgi.io
>         <http://org.springframework.osgi.io>.__OsgiBundleResourcePatternResol__ver;
>         +import org.springframework.osgi.util.__BundleDelegatingClassLoader;
>            import org.springframework.util.__ClassUtils;
>
>            class SpringClasspathScanner extends ClasspathScanner {
>         @@ -156,8 +161,20 @@ class SpringClasspathScanner extends
>         ClasspathScanner {
>                }
>
>                private ResourcePatternResolver getResolver(ClassLoader
>         loader) {
>         -        return loader != null
>         -            ? new PathMatchingResourcePatternRes__olver(loader)
>         : new PathMatchingResourcePatternRes__olver();
>         +        if (CXFActivator.isInOSGi()) {
>         +            //in OSGi should use spring-dm
>         OsgiBundleResourcePatternResol__ver
>         +            // which can handle bundle url
>         +            Bundle bundle = null;
>         +            if (loader instanceof BundleDelegatingClassLoader) {
>         +                bundle =
>         ((BundleDelegatingClassLoader)__loader).getBundle();
>         +            } else {
>         +                bundle =
>         FrameworkUtil.getBundle(__SpringClasspathScanner.class);
>         +            }
>         +            return new OsgiBundleResourcePatternResol__ver(bundle);
>         +        } else {
>         +            return loader != null
>         +                ? new
>         PathMatchingResourcePatternRes__olver(loader) : new
>         PathMatchingResourcePatternRes__olver();
>         +        }
>                }
>
>                private boolean shouldSkip(final String classname) {
>
>         http://git-wip-us.apache.org/__repos/asf/cxf/blob/0de0309f/__parent/pom.xml
>         <http://git-wip-us.apache.org/repos/asf/cxf/blob/0de0309f/parent/pom.xml>
>         ------------------------------__------------------------------__----------
>         diff --git a/parent/pom.xml b/parent/pom.xml
>         index cc4cbaa..7122127 100644
>         --- a/parent/pom.xml
>         +++ b/parent/pom.xml
>         @@ -56,6 +56,7 @@
>                    <cxf.osgi.symbolic.name
>         <http://cxf.osgi.symbolic.name>>${__project.groupId}.${project.__artifactId}</cxf.osgi.__symbolic.name
>         <http://cxf.osgi.symbolic.name>>
>                    <cxf.osgi.dynamic.import />
>
>         <cxf.osgi.spring.version>[3.1,__5)</cxf.osgi.spring.version>
>         +
>         <cxf.osgi.spring.osgi.version>__[1.2.0,2)</cxf.osgi.spring.__osgi.version>
>
>         <cxf.osgi.commons.lang.__version>[2.4,3)</cxf.osgi.__commons.lang.version>
>
>         <cxf.osgi.slf4j.version>[1.5,__2)</cxf.osgi.slf4j.version>
>
>         <cxf.osgi.javax.annotation.__version>[0.0,2)</cxf.osgi.__javax.annotation.version>
>         @@ -1296,6 +1297,16 @@
>                            </exclusions>
>                        </dependency>
>                        <dependency>
>         +                <groupId>org.springframework.__osgi</groupId>
>         +                <artifactId>spring-osgi-io</__artifactId>
>         +                <version>${cxf.spring.osgi.__version}</version>
>         +            </dependency>
>         +            <dependency>
>         +                 <groupId>org.springframework.__osgi</groupId>
>         +                 <artifactId>spring-osgi-core</__artifactId>
>         +                 <version>${cxf.spring.osgi.__version}</version>
>         +            </dependency>
>         +            <dependency>
>                            <groupId>commons-codec</__groupId>
>                            <artifactId>commons-codec</__artifactId>
>                            <version>${cxf.commons-codec.__version}</version>
>
>         http://git-wip-us.apache.org/__repos/asf/cxf/blob/0de0309f/__rt/frontend/jaxrs/src/main/__java/org/apache/cxf/jaxrs/__spring/__JAXRSServerFactoryBeanDefiniti__onParser.java
>         <http://git-wip-us.apache.org/repos/asf/cxf/blob/0de0309f/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/spring/JAXRSServerFactoryBeanDefinitionParser.java>
>         ------------------------------__------------------------------__----------
>         diff --git
>         a/rt/frontend/jaxrs/src/main/__java/org/apache/cxf/jaxrs/__spring/__JAXRSServerFactoryBeanDefiniti__onParser.java
>         b/rt/frontend/jaxrs/src/main/__java/org/apache/cxf/jaxrs/__spring/__JAXRSServerFactoryBeanDefiniti__onParser.java
>         index 40b6286..e17bd1a 100644
>         ---
>         a/rt/frontend/jaxrs/src/main/__java/org/apache/cxf/jaxrs/__spring/__JAXRSServerFactoryBeanDefiniti__onParser.java
>         +++
>         b/rt/frontend/jaxrs/src/main/__java/org/apache/cxf/jaxrs/__spring/__JAXRSServerFactoryBeanDefiniti__onParser.java
>         @@ -21,6 +21,7 @@ package org.apache.cxf.jaxrs.spring;
>            import java.io.IOException;
>            import java.lang.annotation.__Annotation;
>            import java.util.ArrayList;
>         +import java.util.Arrays;
>            import java.util.Collection;
>            import java.util.List;
>            import java.util.Map;
>         @@ -31,6 +32,7 @@ import javax.xml.namespace.QName;
>
>            import org.w3c.dom.Element;
>
>         +import org.apache.cxf.bus.osgi.__CXFActivator;
>            import
>         org.apache.cxf.bus.spring.__BusWiringBeanFactoryPostProces__sor;
>            import org.apache.cxf.common.util.__ClasspathScanner;
>            import org.apache.cxf.common.util.__StringUtils;
>         @@ -192,8 +194,14 @@ public class
>         JAXRSServerFactoryBeanDefiniti__onParser extends
>         AbstractBeanDefiniti
>
>                        try {
>                            if (basePackages != null) {
>         -                    final Map< Class< ? extends Annotation >,
>         Collection< Class< ? > > > classes =
>         -
>         ClasspathScanner.findClasses(__basePackages, Provider.class,
>         Path.class);
>         +                    //if run CXF in OSGi, we should pass in the
>         classloader associated with
>         +                    //the bundle which has JAXRS resources
>         under a certain basePackages
>         +                    ClassLoader loader =
>         Thread.currentThread().__getContextClassLoader();
>         +                    final Map< Class< ? extends Annotation >,
>         Collection< Class< ? > > > classes =
>         +                        CXFActivator.isInOSGi()
>         +                            ? ClasspathScanner.findClasses(
>         +                                  basePackages,
>         Arrays.asList(Provider.class, Path.class), loader)
>         +                            :
>         ClasspathScanner.findClasses(__basePackages, Provider.class,
>         Path.class);
>
>
>         this.setProviders(createBeans(__classes.get(Provider.class)));
>
>         this.setServiceBeans(__createBeans(classes.get(Path.__class)));
>
>
>
>     --
>
>


Mime
View raw message