Weblogic 12.2.1.0.0 禁用默认基本 URI 模式值(资源)

Posted

技术标签:

【中文标题】Weblogic 12.2.1.0.0 禁用默认基本 URI 模式值(资源)【英文标题】:Weblogic 12.2.1.0.0 disable default base URI pattern value (resources) 【发布时间】:2019-05-15 12:55:35 【问题描述】:

预申请:

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

问题:

/resources/ URI 被(嵌入的)WebLogic JAX-RS/Jersey servlet 处理程序映射/处理之后。

WL 映射问题:

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

Automatic Jax-RS registration in Weblogic 12.2.1 when adding eclipselink artifact

https://docs.oracle.com/middleware/1221/wls/RESTF/deploy-restful-service.htm#RESTF191

来自 Oracle 的文档:

*

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

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

...

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

...

如果 和 @ApplicationPath 都是 指定时, 优先。*

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

web.xml 中显式添加配置(对 JAX-RS 1.1 和 2.0 版本都进行了尝试),没有实现任何端点,只使用带有设置 的 Jersey 客户端

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 的这个 default 行为的任何想法?或者也许我错过了或做错了什么?

【问题讨论】:

【参考方案1】:

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>

【讨论】:

【参考方案2】:

更新。问题现已解决。

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>

即:

部分已添加。

部分中添加了下一个块:

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

This link helped a lot

附:后来在 WLS 上使用 Jackson 2.X 库也得到了类似的修复(只是在 部分添加了适当的类)

【讨论】:

我遇到了***.com/questions/44088493/… 建议的更改对我有用

以上是关于Weblogic 12.2.1.0.0 禁用默认基本 URI 模式值(资源)的主要内容,如果未能解决你的问题,请参考以下文章

在WebLogic 12c / Jersey上禁用JAX-RS资源的自动注册

如何使用weblogic配置单点登陆

如何修改weblogic默认线程池大小

如何使用 Fluent NHibernate 自动映射禁用特定抽象基类的子类化

Weblogic反序列化漏洞补丁更新解决方案

weblogic 安全漏洞问题解决