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的冲突问题。 将Jboss
的Saaj
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>
希望这个帮助有人。
如果您在运行客户端应用程序时在客户端遇到此错误,则除了此答案中的其他步骤外,还需要执行类似步骤:
-
确定哪个JVM实例正在运行应用程序。 在我的情况下,我有独立的应用程序使用JDK和小程序使用JRE。 这将会是
/path/jre/bin/
-
将此答案中的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。