2

先决条件:

  1. WebLogic 服务器版本:12.2.1.0.0
  2. 部署的通用 Java Web 应用程序
  3. 开始使用 Jersey客户端

问题:

紧接着/resources/ URI 已由(嵌入式)WebLogic JAX-RS/Jersey servlet 处理程序映射/处理。

WL 映射问题:

在此处输入图像描述

谷歌搜索显示了这一点(非常相似):

来自 Oracle 的文档:

*<servlet 映射>

...如果未指定,则按优先顺序使用以下值之一:

@ApplicationPath注解值在 javax.ws.rs.core.Application 子类中定义。

...

价值资源。这是 RESTful Web 服务应用程序的默认基本 URI 模式

...

如果同时指定了<servlet-mapping>和 @ApplicationPath,则<servlet-mapping>优先。*

我根本不需要 REST 服务和默认映射——只想使用Jersey 客户端。在尝试了不同的选项后,我没有成功解决任何问题。

显式添加配置web.xml (对 JAX-RS 1.1 和 2.0 vesrions 都进行了尝试),没有实现任何端点,因为仅使用带有设置的 Jersey 客户端<servlet-mapping>

web.xml

<!--WebLogic Jersey Configuration-->
<servlet>
    <display-name>WL Jersey Configuration</display-name>
    <servlet-name>jersey</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <!--<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>-->
    <init-param>
        <param-name>jersey.config.wls.server.monitoring.enabled</param-name>
        <param-value>false</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/jersey/*</url-pattern>
</servlet-mapping>

此外更新 了 weblogic.xml

<wls:container-descriptor>
    <wls:prefer-application-packages>
        ...
        <wls:package-name>org.glassfish.*</wls:package-name>
        <wls:package-name>com.sun.jersey.*</wls:package-name>
        <wls:package-name>javax.ws.rs.*</wls:package-name>
    </wls:prefer-application-packages>
</wls:container-descriptor>

它没有帮助。有关如何禁用/覆盖 WLS 12.2.1.0.0 的此默认行为的任何想法?或者也许我错过了或做错了什么?

4

2 回答 2

1

更新。现在问题已解决。

1. weblogic.xml 更改

    <wls:container-descriptor>
    <wls:prefer-application-packages>
        <wls:package-name>antlr.*</wls:package-name>
        <wls:package-name>javax.persistence.*</wls:package-name>
        <wls:package-name>javax.validation.*</wls:package-name>
        <wls:package-name>org.apache.commons.*</wls:package-name>
        <wls:package-name>org.springframework.*</wls:package-name>
        <wls:package-name>org.hibernate.*</wls:package-name>
        <wls:package-name>ch.qos.*</wls:package-name>
        <wls:package-name>org.slf4j.*</wls:package-name>            
        <!--Jax-RS-->
        <wls:package-name>javax.ws.rs.*</wls:package-name>
        <!--Jersey 2.0-->
        <wls:package-name>org.glassfish.jersey.*</wls:package-name>
        <wls:package-name>org.glassfish.hk2.*</wls:package-name>
        <wls:package-name>org.jvnet.hk2.*</wls:package-name>
        <wls:package-name>jersey.repackaged.org.objectweb.asm.*</wls:package-name>
        <!-- wls -->
        <wls:package-name>weblogic.jaxrs.api.client.*</wls:package-name>
        <wls:package-name>weblogic.jaxrs.internal.api.client.*</wls:package-name>
        <wls:package-name>weblogic.jaxrs.dispatch.*</wls:package-name>
        <wls:package-name>weblogic.jaxrs.monitoring.util.*</wls:package-name>
    </wls:prefer-application-packages>
    <wls:prefer-application-resources>
        <!-- apis -->
        <wls:resource-name>javax.ws.rs.*</wls:resource-name>
        <!-- jersey -->
        <wls:resource-name>META-INF/services/org.glassfish.jersey.*</wls:resource-name>
        <wls:resource-name>com.sun.jersey.*</wls:resource-name>
        <wls:resource-name>org.glassfish.jersey.*</wls:resource-name>
        <wls:resource-name>jersey.repackaged.*</wls:resource-name>
        <!-- hk2 -->
        <wls:resource-name>META-INF/services/org.glassfish.hk2.*</wls:resource-name>
        <wls:resource-name>org.glassfish.hk2.*</wls:resource-name>
        <wls:resource-name>org.jvnet.hk2.*</wls:resource-name>
        <wls:resource-name>org.jvnet.hk2.tiger_types.*</wls:resource-name>
    </wls:prefer-application-resources>
</wls:container-descriptor>

IE:

  • 添加了<wls:prefer-application-resources>部分。

  • <wls:prefer-application-packages>部分中添加了下一个块:

      <!--Jax-RS--> and below
      <!--Jersey 2.0--> and below
      <!-- wls --> and below
    

2.添加端点配置

import org.glassfish.jersey.server.ResourceConfig;

public class JerseyApplication extends ResourceConfig {
    public JerseyApplication() {
        packages("path.to.the.package");
    }
}

3. 添加对 pom.xml 的依赖

    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>

4. web.xml servlet 配置

    <!--WebLogic Jersey Configuration-->
<servlet>
    <display-name>WL Jersey Configuration</display-name>
    <servlet-name>jersey</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>path.to.the.JerseyApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/jersey/*</url-pattern>
</servlet-mapping>

这个链接帮助很大

PS 后来在 WLS 上使用 Jackson 2.X 库也得到了类似的修复(只是在<wls:prefer-application-packages>部分添加了适当的类)

于 2018-12-28T08:49:13.243 回答
0

Taras 共享的解决方案运行良好,我必须添加以下依赖项:

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.27</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>2.27</version>
</dependency>
于 2020-11-19T05:39:30.617 回答