【发布时间】:2015-11-04 20:01:38
【问题描述】:
我创建了一个使用 Jersey 实现的 Web 服务。在系统中本地使用它时工作正常。但是,当我在 JBoss AS 7 服务器上部署它时会产生问题。不知何故,我通过在 web.xml 文件中添加以下代码解决了这个问题:
<context-param>
<param-name> resteasy.scan </param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name> resteasy.scan.providers </param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.resources</param-name>
<param-value>false</param-value>
</context-param>
<servlet>
<servlet-name>s1</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>serviceClass</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>s1</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
这个解决了我在 JBoss 服务器上部署服务的问题。但是当我点击我的服务方法时,会出现以下错误:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet.init() for servlet s1 threw exception
org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)
java.lang.Thread.run(Thread.java:745)
root cause
java.lang.NoSuchMethodError: com.sun.jersey.core.reflection.ReflectionHelper.getContextClassLoaderPA()Ljava/security/PrivilegedAction;
com.sun.jersey.spi.scanning.AnnotationScannerListener.<init>(AnnotationScannerListener.java:94)
com.sun.jersey.spi.scanning.PathProviderScannerListener.<init>(PathProviderScannerListener.java:59)
com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:79)
com.sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.java:104)
com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:78)
com.sun.jersey.api.core.PackagesResourceConfig.<init>(PackagesResourceConfig.java:89)
com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:696)
com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:674)
com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:205)
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)
javax.servlet.GenericServlet.init(GenericServlet.java:242)
org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)
java.lang.Thread.run(Thread.java:745)
我的服务等级如下:
@Path("/service")
public class Service {
@GET
@Path("/getfontlist")
@Produces({MediaType.APPLICATION_XML })
public FontList getFontList()
{
FontList fontList = callMethod.getFontList();
return fontList;
}
@GET
@Path("/getcolorlist")
@Produces({MediaType.APPLICATION_JSON })
public ColorList getColorList()
{
ColorList colorList = callMethod.getColorList();
return colorList;
}
@GET
@Path("/getproducts")
@Produces({MediaType.APPLICATION_XML})
public Categories getProducts()
{
Categories productCategoriesList = callMethod.getProducts();
return productCategoriesList;
}
@GET
@Path("/getcliparts")
@Produces({MediaType.APPLICATION_XML })
public Categories getCliparts()
{
Categories clipartCategoriesList = callMethod.getCliparts();
return clipartCategoriesList;
}
}
当我使用路径访问服务方法时遇到问题:domain/project_name/service_name/method_name
有人遇到过这个问题吗?如果是,请回复。
提前致谢。
【问题讨论】:
-
你的包名是否叫做'serviceClass'?这似乎不是一个正常的包名
-
是的。包名称是 serviceClass。我是否必须更改包名称
-
每当我看到
NoSuchMethodError,首先想到的就是依赖版本问题(这通常是原因)。 -
我使用的是 jersey 2.0
-
您是用 Jersey 替换 RESTEasy 还是只是在部署中包含所有 Jersey 库?
标签: java eclipse servlets jboss7.x jersey-2.0