1

Jboss でアプリケーションを適切に実行しています。春のWebサービスクライアントを作成するために、を使用してクラスを生成し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)

このエラーを解決するのを手伝ってください。これらのエラーは、これらの jar を保持した後にのみ発生します。しかし、これらは私の新しいコードを実行するために必要でした。それらを回避する方法を教えてください。

4

2 に答える 2

2

これは、CLASSPATH にその JAR の 2 つのバージョンがあることを示唆しています。1 つはサーバー自体にあり、もう 1 つはアプリの一部としてデプロイされている可能性があります。これらは同じバージョンではありません。サーバー クラス ローダーは、アプリケーション クラス ローダーが実行される前に、サーバーのバージョンを最初に検出します。アプリで必要なバージョンよりも古いバージョンである場合、問題が発生します。

他のデプロイされたアプリを危険にさらすことなくサーバー バージョンを削除できない可能性があるため、解決策は困難です。アプリケーションの JBOSS 構成に、アプリケーション クラス ローダーによってロードされた JAR を優先するように JBOSS に指示するフラグがあるかどうかを確認し、それが役立つかどうかを確認します。

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 ライブラリを探すのを防ぐ必要があります。欠点として、すべてのサードパーティの jar ファイルを WAR/lib フォルダーに提供する必要があります。

これは 4.2 で機能し、現在使用しているバージョンに似たものを検索できます。

于 2010-12-28T00:11:19.787 に答える