WebLogic部署后REST API URL路径访问异常求助
Jersey REST API在WebLogic部署后404问题排查
问题描述
使用Maven构建REST API Web应用,已引入Jersey依赖,WEB-INF目录下配置了web.xml和weblogic.xml。部署到WebLogic 14.1.1.0服务器后,index.jsp可正常访问,但所有REST API URL均返回「未找到」错误。
配置文件
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <display-name>Rest service</display-name> <servlet> <servlet-name>Jersey Web Application</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.vno.testaddress</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey Web Application</servlet-name> <url-pattern>/webapi/*</url-pattern> </servlet-mapping> </web-app>
weblogic.xml
<?xml version="1.0" encoding="UTF-8"?> <wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.9/weblogic-web-app.xsd"> <wls:weblogic-version>14.1.1.0</wls:weblogic-version> <wls:context-root>/address</wls:context-root> <wls:container-descriptor> <prefer-web-inf-classes>false</prefer-web-inf-classes> <wls:prefer-application-packages> <wls:package-name>org.slf4j.*</wls:package-name> <wls:package-name>org.glassfish.jersey.*</wls:package-name> <wls:package-name>io.swagger.core.*</wls:package-name> <wls:package-name>io.swagger.parser.*</wls:package-name> </wls:prefer-application-packages> </wls:container-descriptor> </wls:weblogic-web-app>
Java代码
import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; /** * Hello world! * */ @Path("myresource") public class Testaddress { @GET @Produces(MediaType.TEXT_PLAIN) public String getIt() { return "Hello world!"; } }
错误情况
尝试访问URL:http://192.168.77.10:7001/testaddress-0.0.1-SNAPSHOT/webapi/myresource,期望返回「Hello world!」,但页面显示「未找到」错误。
解决方案
1. 修正访问URL(核心问题)
weblogic.xml中已通过<wls:context-root>/address</wls:context-root>指定了应用的上下文根路径,因此正确的API访问URL应为:http://192.168.77.10:7001/address/webapi/myresource
2. 其他排查点
- 包路径验证:确认
Testaddress类确实位于com.vno.testaddress包下,确保web.xml中的包扫描配置正确 - Jersey版本兼容:WebLogic 14.1.1.0兼容Jersey 2.x版本,确保pom.xml中引入的Jersey依赖版本与容器兼容,且代码使用
jakarta.ws.rs包(当前代码已符合要求) - 类加载配置:若仍有问题,可尝试将weblogic.xml中的
<prefer-web-inf-classes>设为true,强制优先加载WEB-INF下的类,避免容器自带类库冲突 - 日志排查:查看WebLogic服务器日志,检查是否存在Jersey初始化异常、类加载失败等信息,进一步定位问题
内容的提问来源于stack exchange,提问作者S Mugunthan kumar
相关产品推荐
相关产品推荐

