简体   繁体   中英

Weblogic 12.2.1.0.0 disable default base URI pattern value (resources)

Pre-requsitions:

  1. WebLogic Server Version: 12.2.1.0.0
  2. Common Java web-application deployed
  3. Started using Jersey client library

Issue:

Right after that /resources/ URI has been mapped/handled by (embedded) WebLogic JAX-RS/Jersey servlet handler.

WL mapping issue:

在此处输入图像描述

Googling shown this (pretty similar):

and

From the Oracle's docs:

*<servlet-mapping>

...If not specified, one of the following values are used, in order of precedence:

@ApplicationPath annotation value defined in the javax.ws.rs.core.Application subclass.

...

The value resources . This is the default base URI pattern for RESTful Web service applications.

...

If both the <servlet-mapping> and @ApplicationPath are specified, the <servlet-mapping> takes precedence.*

I do not need REST services and default mapping at all - just want to use Jersey client only . After trying different options I haven't succeed with any solution.

Explicitly added configuration in web.xml (tried for both JAX-RS 1.1 and 2.0 vesrions), without implementing any endpoints, as use only Jersey client with setting <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>

In addition updated 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>

It did not help. Any ideas on how to disable/override this default behaviour of WLS 12.2.1.0.0? Or maybe I've missed or doing something wrong?

UPDATE. The issue fixed now.

1. weblogic.xml changed :

    <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> section was added.

  • in <wls:prefer-application-packages> section next blocks were added:

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

2. Added endpoint config :

 import org.glassfish.jersey.server.ResourceConfig; public class JerseyApplication extends ResourceConfig { public JerseyApplication() { packages("path.to.the.package"); } }

3. Added dependency to 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 config :

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

PS Later using of Jackson 2.X library on WLS was similarly fixed (just added proper class to the <wls:prefer-application-packages> section)

Solution shared by Taras is working fine, i had to add below dependencies:

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

I was having the same issue with weblogic 12.2.1 and com.sun.jersey, I have updated to org.glassfish.jersey version 2.26

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.26</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.26</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.26</version>
    <scope>provided</scope>
</dependency>

In my web.xml file I updated my servlet as following:

<servlet>        
    <servlet-name>your servlet name</servlet-name>        
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>
            path.to.rest.resources
        </param-value>
    </init-param>       
    <load-on-startup>1</load-on-startup>    
</servlet>  

No other change was needed, and the issue was resolved. Hope can be helpful

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM