복붙노트

[SPRING] spring-ws 클라이언트를 사용하는 동안 Jboss에서 스프링 클래스 로더 문제

SPRING

spring-ws 클라이언트를 사용하는 동안 Jboss에서 스프링 클래스 로더 문제

내 응용 프로그램을 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)

이 오류를 해결하도록 도와주세요. 이러한 오류가 나는 단지 이러한 항아리를 유지 후지고 있습니다. 그러나 이것들은 새로운 코드를 실행하는 데 필요합니다. 그들을 피하는 방법을 제안 해주세요.

해결법

  1. ==============================

    1.다음 내용으로 응용 프로그램에 대한 WEB-INF / jboss-web.xml 파일을 만들 수 있습니다

    다음 내용으로 응용 프로그램에 대한 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 폴더에 모든 타사 jar 파일을 제공해야합니다.

    이것은 4.2 버전에서 현재 사용중인 버전과 비슷한 것을 찾을 수 있습니다.

  2. ==============================

    2.이것은 저에게 JAR의 두 버전이 CLASSPATH에 있음을 시사합니다. 아마도 하나는 서버 자체에 있고 다른 하나는 앱의 일부로 배포 된 것입니다. 그리고 그들은 같은 버전이 아닙니다. 서버 클래스 로더는 응용 프로그램 클래스 로더가 실행되기 전에 먼저 서버 버전을 찾습니다. 앱에서 요구하는 것보다 이전 버전 인 경우 문제가 발생합니다.

    이것은 저에게 JAR의 두 버전이 CLASSPATH에 있음을 시사합니다. 아마도 하나는 서버 자체에 있고 다른 하나는 앱의 일부로 배포 된 것입니다. 그리고 그들은 같은 버전이 아닙니다. 서버 클래스 로더는 응용 프로그램 클래스 로더가 실행되기 전에 먼저 서버 버전을 찾습니다. 앱에서 요구하는 것보다 이전 버전 인 경우 문제가 발생합니다.

    다른 배포 된 응용 프로그램을 손상시키지 않으면 서 서버 버전을 제거하지 못할 수도 있기 때문에이 솔루션은 어렵습니다. 애플리케이션이 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

  3. from https://stackoverflow.com/questions/4542471/spring-class-loader-issues-in-jboss-while-using-spring-ws-client by cc-by-sa and MIT license