Weblogic 12c,Jersey和Swagger的工作设置

时间:2016-11-15 08:57:39

标签: jersey weblogic swagger weblogic12c

我有一个使用Jersey和Swagger的Tomcat设置,但现在我必须在Weblogic 12c(12.2.1)上运行它。我已经尝试了几种不同的方法让它发挥作用,但我最终陷入了各种各样的死胡同。我在JDeveloper中这样做。

我已经完成了杰克逊版本问题以及我尝试过的各种类似的碰撞。我已经让泽西岛与Weblogic合作,但不是Swagger。

如果有帮助,我可以使用旧版本。

这是我最近失败的一部分:

    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-jersey2-jaxrs</artifactId>
        <version>1.5.10</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.oracle.weblogic</groupId>
        <artifactId>javax.ws.rs.javax.ws.rs-api</artifactId>
        <version>12.2.1-0-0</version>
    </dependency>

这给出了

org.glassfish.jersey.server.ContainerException: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.AnnotationIntrospector.findPropertyIndex(Lcom/fasterxml/jackson/databind/introspect/Annotated;)Ljava/lang/Integer;
我理解的是由于Glassfish / Jackson版本问题。

TL;博士
我正在寻找Weblogic 12 / Jersey / Swagger的Hello World。

3 个答案:

答案 0 :(得分:1)

WebLogic Server提供的旧版Jackson与Swagger所需的版本冲突。 要告诉WebLogic使用战争中嵌入的内容,请将以下内容添加到weblogic.xml:

itertools

答案 1 :(得分:1)

我找到了适用于Weblogic 12.1.3 的有效配置,如下所示。

  1. 我假设您已经将JAX-RS 2.0部署为共享库

  2. weblogic-application.xml中,我列出了部署JAX-RS 2.0中列出的所有“首选应用程序包”:

    <weblogic-application>
        <library-ref>
            <library-name>jax-rs</library-name>
            <specification-version>2.0</specification-version>
            <exact-match>false</exact-match>
        </library-ref>
        <prefer-application-packages>
            <package-name>javax.ws.rs.*</package-name>
            <package-name>com.google.common.*</package-name>
            <package-name>com.sun.jersey.*</package-name>
            <package-name>org.eclipse.persistence.jaxb.rs.*</package-name>
            <package-name>org.codehaus.jackson.jaxrs.*</package-name>
            <package-name>weblogic.jaxrs.api.client.*</package-name>
            <package-name>weblogic.jaxrs.internal.api.client.*</package-name>
            <package-name>weblogic.jaxrs.dispatch.*</package-name>
            <package-name>weblogic.jaxrs.monitoring.util.*</package-name>
        </prefer-application-packages>
    </weblogic-application>
    
  3. pom.xml中,我排除了一些冲突的依赖项:

    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-jersey2-jaxrs</artifactId>
        <version>${swagger.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.glassfish.jersey.containers</groupId>
                <artifactId>
                    jersey-container-servlet-core
                </artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.glassfish.jersey.media</groupId>
                <artifactId>jersey-media-multipart</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

答案 2 :(得分:0)

杰克逊罐的版本似乎存在差异。较新版本的jackson jar(不包含在jersey2.x中)有com.fasterxml.jackson包,而旧版Jersey 1.x有org.codehaus.jackson包。

无论哪种方式,我们总是可以在我们的依赖项中包含最新版本的jackson。