我有一个使用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。
答案 0 :(得分:1)
WebLogic Server提供的旧版Jackson与Swagger所需的版本冲突。 要告诉WebLogic使用战争中嵌入的内容,请将以下内容添加到weblogic.xml:
itertools
答案 1 :(得分:1)
我找到了适用于Weblogic 12.1.3 的有效配置,如下所示。
我假设您已经将JAX-RS 2.0部署为共享库
在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>
在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。