ArrayIndexOutOfBoundsException部署到没有web.xml Jersey的GlassFish 4.1.1

时间:2015-12-28 01:59:01

标签: deployment jersey glassfish

我使用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)

     

.....

2 个答案:

答案 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中的标准泽西岛依赖关系设置为提供