我正在尝试在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
我的配置:
提前致谢!
答案 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旁边添加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中的步骤之外,您还需要执行类似的步骤:
确定运行应用程序的JVM实例。就我而言,我使用JDK和applet使用JRE的独立应用程序。这将是/path/jre/bin/
将此answer的广告罐添加到path/jre/lib/endorsed
。我必须创建endorsed
目录。
这告诉VM在java语言默认之前加载特定于jboss的实现。这种情况发生在bootstrap类加载器中,远在类路径中的jar加载之前。
答案 8 :(得分:0)
答案 9 :(得分:0)
我的服务器配置是Jboss AS 4.2.1 GA,如下所示,它可以工作;
我在lib \ endorsed使用的库;
答案 10 :(得分:0)
我使用Jboss AS 4.3。 在我的情况下,我从&#34;部署&#34;文件夹&#34; jbossws.sar&#34;。
答案 11 :(得分:0)
将saaj-impl添加到我的Web应用程序的lib文件夹中修复了此错误。我正在使用JBoss 4.2.3和CXF 2.4.10。