必须由SOAPMessage的所有子类覆盖setProperty

时间:2009-11-15 19:36:10

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

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

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

这个类在JBoss 4.2.3上运行良好,但是当转移到JBoss 5.1.0时,我得到了这个例外。

  

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

我的配置:

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

提前致谢!

12 个答案:

答案 0 :(得分:32)

有一些事情可能会出错,所以我会告诉你在我的情况下有什么帮助(类似于你的,我使用的是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 /认可的JAX-WS JAR。

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

答案 1 :(得分:23)

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

  

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

     
      
  • 将JBossWS天然-没有saaj.jar
  •   
  • 将JBossWS天然-没有jaxrpc.jar
  •   
  • 将JBossWS天然-jaxws.jar
  •   
  • 将JBossWS天然-JAXWS-ext.jar
  •   

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

  

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

答案 2 :(得分:7)

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

答案 3 :(得分:4)

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

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

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

答案 4 :(得分:2)

尝试将jar放到你的jboss / lib / endorsed文件夹

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

答案 5 :(得分:1)

我的项目仅仅基于:

  • CXF 2.5.0(Soap WebService Consumer)
  • WAR程序集(无EAR)
  • no jboss-web
  • 没有jboss-classloading
  • 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>

希望它会有所帮助!

答案 6 :(得分:0)

我从cxf发行版中复制了必要的lib(在我的情况下为saaj-impl)并使用以下内容的文件/WEB-INF/jboss-classloader.xml启用了jboss classloader隔离:


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

希望对某人有所帮助。

答案 7 :(得分:0)

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

  1. 确定运行应用程序的JVM实例。就我而言,我使用JDK和applet使用JRE的独立应用程序。这将是/path/jre/bin/

  2. 之类的地方
  3. 将此answer的广告罐添加到path/jre/lib/endorsed。我必须创建endorsed目录。

  4. 这告诉VM在java语言默认之前加载特定于jboss的实现。这种情况发生在bootstrap类加载器中,远在类路径中的jar加载之前。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

我在lib \ endorsed使用的库;

  • JAXWS2.1.1_20070501
  • 将JBossWS天然-JAXRPC
  • 将JBossWS天然-JAXWS
  • 将JBossWS天然-JAXWS-EXT
  • 将JBossWS天然-SAAJ
  • 串行
  • 的Xalan
  • xercesImpl

答案 10 :(得分:0)

我使用Jboss AS 4.3。 在我的情况下,我从&#34;部署&#34;文件夹&#34; jbossws.sar&#34;。

请参阅此问题:https://issues.jboss.org/browse/JBWS-2821

答案 11 :(得分:0)

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