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

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

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

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

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

我的configuration:

  • Windows XP SP3(但是在Vista以及Linux上也一样)
  • Sun JDK 1.6.0_17
  • JBoss 5.1.0 GA为jdk6

提前致谢!

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

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

我想你是对的,所以有一些魔法。 运行客户端不要使用$ JBOSS_HOME / client中的库,而只使用$ JBOSS_HOME / lib / endorsed中提供的库。 很明显,如果您使用任何其他与JAX-WS无关的API(如JPA或EJB)或Servlet,则可以将它们添加到类path中,但使用lib / endorsed JAX-WS JAR。

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

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

JBossAS 5.0.0.GA可以用Java5和Java6编译。 Java5编译的二进制文件是我们的主要/推荐的二进制发行版 它经过了严格的testing,可以在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

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

但应该指出的是,JBoss AS 5的Java 6编译版本还处于试验阶段。

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

确保使用jvm选项指向已认可的库来启动JBoss 。 如果您使用WTP从Eclipse启动JBoss ,那么这不是默认configuration的,但如果您是从命令行启动JBoss的话。

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

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

尝试下面的jar到你的jboss / lib / endorsed文件夹

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

我的项目只是基于:

  • CXF 2.5.0(肥皂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> 

希望它会帮助!

我从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> 

希望这个帮助有人。

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

  1. 确定哪个JVM实例正在运行应用程序。 在我的情况下,我有独立的应用程序使用JDK和小程序使用JRE。 这将会是/path/jre/bin/

  2. 将此答案中的jar添加到path/jre/lib/endorsed 。 我不得不创buildendorsed目录。

这告诉虚拟机在java语言默认之前加载特定于jboss的实现。 这在引导类加载器中发生,在加载类path中的jar之前。

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

我的服务器configuration是Jboss AS 4.2.1 GA,如下图所示,

我在lib \所使用的库;

  • JAXWS2.1.1_20070501
  • 将JBossWS-母语JAXRPC
  • 将JBossWS-母语JAXWS
  • 将JBossWS-本机JAXWS-EXT
  • 将JBossWS-母语SAAJ
  • 串行
  • xalan的
  • xercesImpl

我使用Jboss AS 4.3。 在我的情况下,我从“部署”文件夹中删除“jbossws.sar”。

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

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