【问题标题】:Working setup for Weblogic 12c, Jersey and SwaggerWeblogic 12c、Jersey 和 Swagger 的工作设置
【发布时间】:2016-11-15 08:57:39
【问题描述】:

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

我尝试过的每一种方式都遇到了 Jackson 版本问题和其他类似的冲突。我已经让 Jersey 与 Weblogic 一起工作,但不是 Swagger。

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

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

    <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;dr
我正在寻找适用于 Weblogic 12/Jersey/Swagger 的 Hello World

【问题讨论】:

    标签: jersey weblogic swagger weblogic12c


    【解决方案1】:

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

    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                      xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd">
        (...)
        <container-descriptor>
            <prefer-application-packages>
                <package-name>com.fasterxml.jackson.*</package-name>
            </prefer-application-packages>
        </container-descriptor>
        (...)
    </weblogic-web-app>
    

    【讨论】:

      【解决方案2】:

      我找到了一个适用于 Weblogic 12.1.3 的工作配置,如下所示。

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

      2. weblogic-application.xml 中,我列出了部署 JAX-RS 2.0 中列出的所有“prefer-application-packages”:

        <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>
        

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 自从我问这个问题以来已经过去了一段时间。我已经走上了不同的道路,所以我不再有这种需要了。为了知识共享,如果您有解决方法的想法 - 请分享!
        猜你喜欢
        • 2018-10-03
        • 1970-01-01
        • 1970-01-01
        • 2016-11-17
        • 1970-01-01
        • 2015-09-03
        • 2016-07-31
        • 2018-05-22
        • 2018-11-21
        相关资源
        最近更新 更多