繁体   English   中英

Websphere Application Server Servlet初始化错误

[英]Websphere Application Server Servlet Initialization Error

我们需要将在Glassfish上运行的应用迁移到Websphere Application Server(WAS)8.5.x版本。

为了看到通过简单的设置一切正常,我创建了一个带有单个rest服务的示例项目。

我没有使用自己的类扩展javax.ws.rs.core.Application,而我只有一个带有路径注释的类。 我在web.xml中定义了一个名为“ javax.ws.rs.core.Application”的servlet,以便扫描注解,并且可以从给定的servlet URL映射访问服务。

当我尝试访问该服务时,我收到一条404消息。 但是真正的问题是标准IBM Websphere库附带的Apache Wink。

源代码 (DefaultLifecycleManager类)中有类似以下内容的部分:

79        if (ApplicationMetadataCollector.isApplication(cls)) {
80            // by default application subclasses are singletons
81            return LifecycleManagerUtils.createSingletonObjectFactory(cls);
82        }

isApplication(cls)方法应返回true,然后应为其创建单例工厂。 但是,它返回false。 该方法的主体如下:

76    public static boolean More ...isApplication(Class cls) {
77        return Application.class.isAssignableFrom(cls);
78    }

我在此处放置一个断点并检查了值。 cls正是javax.ws.rs.core.Application,与第77行中的类相同。

这导致servlet无法正确启动,并向映射到它的每个请求返回404。

我不知道此方法如何返回false,因此需要您的帮助。

您的应用程序一定有问题,也许您有一些冲突的库。

我的课很简单:

@Path("/HelloRest")
public class Hello {

    @GET
    public String hello() {
        System.out.println("Rest called");
        return "Hello  " + new Date();
    }
}

使用以下web.xml ,它在WAS 8.5.5上启动并正常工作:

<servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>

<servlet-mapping>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

当被称为http://localhost:9080/JAXRSTestWeb/rest/HelloRest

如果您的应用程序中捆绑了眨眼或运动衫或任何其他jaxrs库,请将其删除。

当我从WAS 7.0迁移到WAS 8.5时,我做了几乎相同的事情。 WAS 8.5带有内置的Apache Wink 1.1。 您可以按照以下步骤在WAS 8.5上迁移应用程序:

1)从您的应用程序li​​b文件夹中删除所有apache wink jar。

2)为了构建您的应用程序,可以使用这两个Websphere jar com.ibm.ws.prereq.jaxrs.jar和com.ibm.ws.prereq.jackson.jar。 您可以在WAS_HOME / plugins文件夹中找到这些jar。

3)使用这些jar来构建您的应用程序,但不要将这些jar打包到应用程序EAR或WAR中。

4)如果您的应用程序类型是EAR,那么请确保所有宁静的资源和扩展Application类的类都是战争的一部分。

5)重新部署您的应用程序,现在应该可以正常工作了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM