1

我的应用程序在 Jboss 中正常运行。为了编写 spring webservice 客户端,我使用wsimport. 我在配置中写了以下内容

 <bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
<property name="messageFactory">
    <bean class="com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl"/>
</property>

在 jboss?lib 我有jboss-jaxws.jar,spring.jar...现在我复制了

spring-ws-1.5.0.jar and  saaj-impl-1.3.jar

但我收到以下错误:

The Spring ContextLoaderListener we wrap threw on contextInitialized.
But for our having caught this error, the web application context would not have initialized.
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.IllegalArgumentException: Class [org.apache.xbean.spring.context.v2.XBeanNamespaceHandler] does not implement the NamespaceHandler interface
Caused by: 
java.lang.IllegalArgumentException: Class [org.apache.xbean.spring.context.v2.XBeanNamespaceHandler] does not implement the NamespaceHandler interface
    at org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.initHandlerMappings(DefaultNamespaceHandlerResolver.java:119)

请帮我解决这个错误。这些错误我只有在保留这些罐子后才会得到。但是这些需要运行我的新代码。请建议我如何避免它们?

4

2 回答 2

2

这向我表明,您的 CLASSPATH 中有该 JAR 的两个版本 - 可能一个在服务器本身上,另一个作为应用程序的一部分部署 - 它们不是同一个版本。在您的应用程序类加载器运行之前,服务器类加载器将首先找到服务器版本。如果它比您的应用程序要求的版本更早,您就会遇到问题。

解决方案很困难,因为您可能无法在不损害其他已部署应用程序的情况下删除服务器版本。查看 JBOSS 配置中是否有一个标志让您的应用程序告诉 JBOSS 更喜欢由应用程序类加载器加载的 JAR,看看是否有帮助。

http://www.datadisk.co.uk/html_docs/java_app/jboss5/jboss5_deployment.htm http://community.jboss.org/wiki/ClassLoadingConfiguration http://community.jboss.org/wiki/JBossClassLoadingUseCases

于 2010-12-27T23:08:54.080 回答
1

您可以使用下一个内容为您的应用程序创建 WEB-INF/jboss-web.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC
    "-//JBoss//DTD Web Application 4.2//EN"
    "http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">
<jboss-web>
    <class-loading java2ClassLoadingCompliance="false">
        <loader-repository>
                   myapp:loader=anyUniqueName
            <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
        </loader-repository>
    </class-loading>
</jboss-web>

这应该可以防止类加载器查找 JBoss 库。不利的一面是,您必须在 WAR/lib 文件夹中提供所有 3rd-party jar。

这适用于 4.2,您可以查找与当前使用的版本类似的内容。

于 2010-12-28T00:11:19.787 回答