【问题标题】:setProperty must be overridden by all subclasses of SOAPMessagesetProperty 必须被 SOAPMessage 的所有子类覆盖
【发布时间】:2010-12-16 20:22:52
【问题描述】:

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

我已经使用 JAX-WS 工具 wsgen 从现有的 wsdl 创建了源文件。这创建了服务文件和 @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

提前致谢!

【问题讨论】:

    标签: java web-services jboss jax-ws jboss5.x


    【解决方案1】:

    有几件事可能会出错,所以我会告诉你对我的情况有什么帮助(类似于你的情况,我使用的是 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 时。

    【讨论】:

    • 谢谢皮奥特!毕竟,问题是我是从 Eclipse 中启动 JBoss,它是自动启动配置......它没有通过 -Djava.endorsed.dirs=$JBOSS_HOME/lib/endorsed 参数。添加后(以及从 run.bat 脚本运行 JBoss)它工作正常。再次感谢! (你应该得到的不仅仅是我的一票:))
    • 尝试了“-Dsun.lang.ClassLoader.allowArraySyntax=true”和“-Djava.endorsed.dirs=$JBOSS_HOME/lib/endorsed”,在 4.2.3.GA 中不起作用。
    • 我认为这种解决方法非常糟糕,因为它可能会影响其他已部署的应用程序,并使工业化过程更加困难。范围应限于应用程序包(如类加载器配置/过滤器)。
    【解决方案2】:

    我从 JBoss 4.2.2 升级时遇到了同样的问题,并在 JBoss 5.1.0 Release Notes:

    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 编译发行版仍处于试验阶段。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 将 jboss-saaj.jar 从 jboss/server//lib 目录复制到 jboss/lib/endorsed 在 jboss-4.2.3.GA 上对我有用
      【解决方案4】:

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

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

      -Djava.endorsed.dirs="${JBOSS_HOME}\jboss-as\lib\endorsed"
      

      【讨论】:

      • 请注意,eclipse 不会在运行目标的 jvm 选项中扩展 $JBOSS_HOME。
      • 哇,我今天又回到了这里,甚至不记得第一次了!
      【解决方案5】:

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

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

      希望这对某人有所帮助。

      【讨论】:

        【解决方案6】:

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

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

        2. 将此answer 中的jar 添加到path/jre/lib/endorsed。我必须创建endorsed 目录。

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

              【解决方案9】:

              我的项目只是基于:

              • 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>
              

              希望对您有所帮助!

              【讨论】:

                【解决方案10】:

                我的服务器配置是 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
                • 序列化器
                • xalan
                • xercesImpl

                【讨论】:

                  【解决方案11】:

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

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

                  【讨论】:

                    【解决方案12】:

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

                    【讨论】:

                      猜你喜欢
                      • 2014-07-29
                      • 2015-05-11
                      • 2015-02-02
                      • 1970-01-01
                      • 2020-10-31
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多