Проблемы загрузчика классов Spring в Jboss при использовании клиента spring-ws - PullRequest
1 голос
/ 28 декабря 2010

У меня правильно работает приложение в Jboss.Чтобы написать весенний клиент веб-сервиса, я сгенерировал классы, используя 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)

Пожалуйста, помогите мне решить эту ошибку.Эти ошибки я получаю только после хранения этих банок.Но они необходимы для запуска моего нового кода.Подскажите пожалуйста как их избежать?

Ответы [ 2 ]

2 голосов
/ 28 декабря 2010

Это подсказывает мне, что в вашем 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

1 голос
/ 28 декабря 2010

Вы можете создать файл 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, вы можете найти что-то похожее для версии, которую вы используете в настоящее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...