35

我正在尝试在 JBoss 5.1.0 上的 WAR 应用程序中部署一些 Web 服务。

我已经使用 JAX-WS 工具从现有的 wsdl 创建了源文件wsgen。这创建了服务文件和 @XmlType 注释类,它们将充当请求和响应包装器。

这些类在 JBoss 4.2.3 上运行良好,但是当迁移到 JBoss 5.1.0 时,我得到了这个异常。

java.lang.UnsupportedOperationException:setProperty 必须被 SOAPMessage 的所有子类覆盖

我的配置:

  • Windows XP SP3(但在 Vista 和 Linux 上都一样)
  • Sun JDK 1.6.0_17
  • 适用于 jdk6 的 JBoss 5.1.0 GA

提前致谢!

4

12 回答 12

33

有几件事可能会出错,所以我会告诉你对我的情况有什么帮助(类似于你的情况,我使用的是 JDK 1.6.0_13)。

问题在于 JAR 不匹配。首先确保 JBoss 使用 JDK 1.6 检查您的 JAVA_HOME 环境。多变的。其次,确保您的类是使用 JDK 1.6 编译的。如果您从 Eclipse 运行项目,请确保 Eclipse 使用正确的 JDK,如果您从 Eclipse 运行 JBoss,则同样如此。

我想你说得对,所以有一些魔法。运行客户端使用 $JBOSS_HOME/client 中的库,而仅使用 $JBOSS_HOME/lib/endorsed 中提供的库。显然,如果您使用任何其他与 JAX-WS 无关的 API,例如 JPA 或 EJB 或 Servlet,您可以将它们添加到类路径中,但使用lib/endorsed JAX-WS JAR。

在 JBoss 5.1 的情况下,它在我的特殊情况下有所帮助,在早期版本的 JBoss 中,还有一些其他技巧有效,例如尝试添加 java 选项 -Dsun.lang.ClassLoader.allowArraySyntax=true 或/和 -Djava.endorsed.dirs= $JBOSS_HOME/lib/endorsed 在启动客户端和 JBoss 时。

于 2009-11-17T17:52:18.150 回答
24

我从 JBoss 4.2.2 升级时遇到了同样的问题,并在 JBoss 5.1.0 发行说明中找到了答案:

JBossAS 5.0.0.GA 可以使用 Java5 和 Java6 进行编译。Java5 编译的二进制文件是我们的主要/推荐的二进制发行版。它经过了严格的测试,可以在 Java 5 和 Java 6 运行时下运行。在 Java 6 下运行时需要手动将以下库从 JBOSS_HOME/client 目录复制到 JBOSS_HOME/lib/endorsed 目录,以便使用 JBossWS 支持的 JAX-WS 2.0 api:

  • jbossws-native-saaj.jar
  • jbossws-native-jaxrpc.jar
  • jbossws-native-jaxws.jar
  • jbossws-native-jaxws-ext.jar

我正在使用 Java 5(在 JDK 1.6.0_20 上运行)构建 JBoss 5.1.0 的发行版,并且确实将这些 JAR 复制到认可的目录中解决了这个问题。由于注意事项,我们没有使用为 Java 6 编译的版本:

但是应该注意的是,JBoss AS 5 的 Java 6 编译发行版仍处于试验阶段。

于 2010-06-11T22:57:55.067 回答
7

这可能是由于SAAJjar 的冲突问题。将jar 从复制到Jboss. 我希望这将有助于解决问题,Saaj{Jboss_HOME}/LIB{JBOSS_HOME}/lib/endorsed

于 2010-09-14T13:23:03.633 回答
4

确保使用指向认可库JBoss的选项启动。如果您使用 Eclipse 从 Eclipsejvm启动,则默认情况下不会配置此配置,但如果您从命令行启动则配置。JBossWTPJBoss

您可以将以下内容添加到启动配置的 VM 参数中:

-Djava.endorsed.dirs="${JBOSS_HOME}\jboss-as\lib\endorsed"
于 2010-12-10T15:23:45.470 回答
2

尝试跟随 jars 到你的 jboss/lib/endorsed 文件夹

jbossws-native-jaxws.jar
jbossws-native-jaxrpc.jar
jbossws-native-saaj.jar
jbossws-native-saaj.jar
于 2012-10-01T05:30:16.837 回答
1

我的项目只是基于:

  • CXF 2.5.0(Soap Web 服务消费者)
  • WAR 组件(无 EAR)
  • 没有 jboss-web
  • 没有 jboss 类加载
  • jboss/lib/endorsed 没有变化(仅 xalan、serializer、xercesImpl)
  • 在 jboss-4.2.1.GA + JDK 1.6 上运行

它对我有用的只是在 CXF 旁边添加那些 maven 依赖项:

    <dependency>
        <groupId>javax.xml.ws</groupId>
        <artifactId>jaxws-api</artifactId>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-tools</artifactId>
    </dependency>
    <dependency>
        <groupId>org.codehaus.woodstox</groupId>
        <artifactId>woodstox-core-asl</artifactId>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.messaging.saaj</groupId>
        <artifactId>saaj-impl</artifactId>
    </dependency>

希望它会有所帮助!

于 2012-10-24T13:50:20.593 回答
0

我将必要的 lib(在我的情况下为 saaj-impl)从 cxf 分发版复制到我的战争中,并使用以下内容的文件 /WEB-INF/jboss-classloader.xml 打开了 jboss 类加载器隔离:


<classloading xmlns="urn:jboss:classloading:1.0"
    domain="MyDomain"
    export-all="NON_EMPTY"
    import-all="true">
</classloading>

希望这对某人有所帮助。

于 2011-03-03T15:00:01.120 回答
0

如果您在运行客户端应用程序时在客户端中遇到此错误,除了此答案中的步骤之外,您还需要执行类似的步骤:

  1. 确定哪个 JVM 实例正在运行应用程序。就我而言,我有使用 JDK 的独立应用程序和使用 JRE 的小程序。这将在某个地方/path/jre/bin/

  2. 将此答案中的罐子添加到path/jre/lib/endorsed. 我必须创建endorsed目录。

这告诉 VM 在 java 语言默认之前加载 jboss 特定的实现。这发生在引导类加载器中,远在加载类路径中的 jar 之前。

于 2011-11-21T16:51:07.900 回答
0

这是此问题的链接:https ://issues.jboss.org/browse/JBWS-2418

于 2012-03-18T15:29:39.523 回答
0

我的服务器配置是 Jboss AS 4.2.1 GA,如下所示,它可以工作;

我在 lib\endorsed 中使用的库;

  • JAXWS2.1.1_20070501
  • jbossws-native-jaxrpc
  • jbossws-native-jaxws
  • jbossws-native-jaxws-ext
  • jbossws-native-saaj
  • 串行器
  • 夏兰
  • xercesImpl
于 2015-05-13T08:54:03.453 回答
0

我使用 Jboss AS 4.3。就我而言,我从“deploy”文件夹中删除了“jbossws.sar”。

看到这个问题:https ://issues.jboss.org/browse/JBWS-2821

于 2015-10-06T17:24:24.507 回答
0

将 saaj-impl 添加到我的 Web 应用程序的 lib 文件夹可修复此错误。我正在使用 JBoss 4.2.3 和 CXF 2.4.10。

于 2016-08-12T14:35:23.110 回答