0

我有一个简单的设置,war 文件只包含一个 web.xml,它指定要在 servlet 中使用的 javax.ws.rs.Application 类。

包含 javax.ws.rs.Application 实现的 jar 也完全是微不足道的。web.xml 和实现都基于jboss 文档中的示例

但是,当我在 jboss AS 7.1.1 Final 和 jboss 4.0.4 中部署 war + jar 组合时,我得到了不同的行为。在访问其余 api 时,我在 jboss 日志中得到以下异常(仅限片段):

06:33:59,540 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/wrapper]] (MSC service thread 1-2) StandardWrapper.Throwable: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.projectgoth.provider.restapi.RestApiProvider from [Module "deployment.wrapper.war:main" from Service Module Loader]
at org.jboss.resteasy.spi.ResteasyDeployment.createFromInjectorFactory(ResteasyDeployment.java:271) [resteasy-jaxrs-2.3.2.Final.jar:]
at org.jboss.resteasy.spi.ResteasyDeployment.createApplication(ResteasyDeployment.java:259) [resteasy-jaxrs-2.3.2.Final.jar:]

但是,如果我在战争的 pom.xml 中将 jar 的范围从提供的更改为运行时 - 错误确实从 jboss 作为 7.1.1 消失了。

作为参考,我已将用于 war 和 jar 的代码上传到bitbucket(其中 provider = javax.ws.rs.Application 的实现,而 wrapper 是可部署的 war)

4

1 回答 1

0

我认为这是正常的。Per class loader policy, a child class can always see the parent class not the vice verse. 当您将 jar 范围作为运行时时,JAR 加载到流中的类路径中,而不是 WAR 应用程序,因此它对 WAR 类是可见的。

于 2012-10-27T23:01:17.410 回答