我使用Maven glassfish插件将我的Jersey服务器(没有web.xml)部署到GlassFish 4.1.1时出现了这个奇怪的错误(事实上,我已将我的(Maven)构建从嵌入式Grizzly切换到GlassFish,更新了标准的Jersey依赖项从编译到提供):
[ERROR]远程故障:部署期间发生错误:异常 加载应用程序时:java.lang.IllegalStateException: ContainerBase.addChild:start:org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: java.lang.ArrayIndexOutOfBoundsException:0。请参阅server.log 更多细节
当我未在 ResourceConfig 实现中声明 @ApplicationPath 时,部署成功。但是,当我尝试使用该服务时,我收到了404错误。根据Jersey文档,没有web.xml部署(Example 4.3)需要 @ApplicationPath 。
部署错误日志摘录如下:
[2015-12-28T09:33:40.826 + 0800] [glassfish 4.1] [SEVERE] [] [javax.enterprise.web] [tid:_ThreadID = 123 _ThreadName = admin-listener(6)] [timeMillis:1451266420826] [levelValue:1000] [[
WebModule [/BBQuay-Entertainment-1.0-SNAPSHOT] StandardWrapper.Throwable java.lang.ArrayIndexOutOfBoundsException:0 at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:505) 在 org.glassfish.jersey.server.ApplicationHandler.access $ 500(ApplicationHandler.java:182) 在 org.glassfish.jersey.server.ApplicationHandler $ 3.call(ApplicationHandler.java:348) 在 org.glassfish.jersey.server.ApplicationHandler $ 3.call(ApplicationHandler.java:345) 在org.glassfish.jersey.internal.Errors.process(Errors.java:315)at org.glassfish.jersey.internal.Errors.process(Errors.java:297)at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255) 在 org.glassfish.jersey.server.ApplicationHandler。(ApplicationHandler.java:345) 在 org.glassfish.jersey.servlet.WebComponent。(WebComponent.java:390) 在 org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170) 在 org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:362) 在javax.servlet.GenericServlet.init(GenericServlet.java:244)at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1583).....
答案 0 :(得分:1)
原来是Maven配置。由于之前我正在使用Grizzly进行测试,当切换到GlassFish时,我留下了两个依赖项 jersey-weld2-se 和 jersey-cdi1x 默认的Maven范围。后者很好,但第一个是由GlassFish容器提供的。更正如下有助于解决问题(尽管部署错误实际上没有帮助..)
<dependency>
<groupId>org.glassfish.jersey.ext.cdi</groupId>
<artifactId>jersey-weld2-se</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext.cdi</groupId>
<artifactId>jersey-cdi1x</artifactId>
</dependency>
答案 1 :(得分:0)
以下对Glassfish 4.1.1(没有web.xml
)就足够了:
import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;
@ApplicationPath("rest")
public class ApplicationConfig extends ResourceConfig {
}
一个示例类:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("info")
public class InfoStub {
@GET
public String getInfo() {
return "hello sir";
}
}
您可以在http://localhost:8080/YOUR_PROJECT_NAME/rest/info
下访问它确保将pom.xml
中的标准泽西岛依赖关系设置为提供。