5

我正在尝试使用 JDK 1.6.0_31-b05 中的 JDeveloper 11g R2(11.1.2.3.0) 运行包含 JAX WS (2.1) Webservice 的应用程序。错误来自类上存在的 @WebService 注释。
当我运行应用程序时,出现以下错误,

java.lang.IllegalArgumentException: Argument(s) "type" can't be null.
  at com.sun.xml.bind.api.TypeReference.<init>(TypeReference.java:89)
  at com.sun.xml.ws.model.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:758)
  at com.sun.xml.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:678)
  at com.sun.xml.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:428)
  at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:277)
  at com.sun.xml.ws.server.EndpointFactory.createSEIModel(EndpointFactory.java:363)
  at com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:202)
  at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:496)
  at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:539)
  at weblogic.wsee.jaxws.JAXWSDeployedServlet.getEndpoint(JAXWSDeployedServlet.java:183)

嵌入式 Web Logic 似乎使用的是内部库,而不是 JDK 提供的库。JDK rt.jar 中存在的类RuntimeModeler或类以包 com.sun.xml.ws.internal 开头。TypeReferenceWeblogic 正在从 glassfish.jaxb_1.0.0.0_2-1-12.jar 和 glassfish.jaxws.rt_1.2.0.0_2-1-5.jar 中挑选这些类,但这些 jar 不是我的应用程序的一部分。

  1. 我已经使用了带有以下标签的 weblogic.xml,

    <prefer-web-inf-classes>true</prefer-web-inf-classes>
    
  2. 我尝试在 DefaultDomain/lib 目录中添加 jaxws-api.jar 和 jws-api.jar,但这不起作用

任何线索如何解决此异常或如何强制 weblogic 使用 jdk 运行时类?相同的应用程序在独立的 weblogic 上正常工作。

4

3 回答 3

1

我有同样的问题,在这里找到了答案:http: //www.intropro.com/resources/blog/66-argument-s-type-can-t-be-null

简而言之 - 出现问题是因为您的类路径中有 jaxb-impl,它覆盖了 WebLogics 自己的 jaxb,您可能没有从 pom.xml 中明确引用此依赖项,但您的其他一些依赖项确实如此。在我的情况下,我有 apache-cxf 作为 maven 依赖项,它有 jaxb 2.1.13 作为范围“编译”的子依赖项。我所要做的就是排除这个 apaches jaxb 并添加我自己的依赖项,其范围为“provided”以显式使用 WebLogics jaxb。

在 pom.xml 中它看起来像这样:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>2.7.2</version>
    <exclusions>
        <exclusion>
            <artifactId>jaxb-impl</artifactId>
            <groupId>com.sun.xml.bind</groupId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <scope>provided</scope>
    <version>2.1.13</version>
</dependency>

您可以在 pom.xml 视图中使用 Eclipse 的“Dependency Hierarchy”选项卡,或者简单地使用命令行“mvn dependency:tree”来了解 jaxb-impl 是如何进入您的类路径的。

于 2015-06-05T08:01:05.727 回答
1

就我而言,我在操作的参数中有一个错字,其中两个参数具有相同的 webParam 名称。修改并部署,问题得到解决。

于 2017-05-16T21:18:22.397 回答
0

您是否尝试在清单 class-path: 属性中列出正确的 jar?您还可以将 jdk 类放在应用程序中,并尝试使用 FilteringClassLoader 来指定要从应用程序而不是系统类加载器使用的类。

http://docs.oracle.com/cd/E15051_01/wls/docs103/programming/classloading.html#wp1097263

于 2013-01-17T17:03:14.277 回答