Reputation: 792
Pre-requsitions:
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?
Upvotes: 2
Views: 2180
Reputation: 1
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
Upvotes: 0
Reputation: 918
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>
Upvotes: 0
Reputation: 792
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>
i.e.:
<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>
P.S. Later using of Jackson 2.X library on WLS was similarly fixed (just added proper class to the <wls:prefer-application-packages> section)
Upvotes: 1