2012-06-15 3 views
2

JBoss 5.1.0.GA (JDK6 용) 및 jaxws 2.2.6을 사용하고 있습니다. 나는 웹 서비스를 호출 할 때 , 나는 다음과 같은 예외를 얻을 :JaxWS ClassCastException on JBoss

java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider org.jboss.ws.core.jaxws.spi.ProviderImpl could not be instantiated: java.lang.ClassCastException at org.jboss.resource.work.WorkWrapper.completed(WorkWrapper.java:283)
at org.jboss.util.threadpool.BasicTaskWrapper.taskCompleted(BasicTaskWrapper.java:367) at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:268) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:680)

Caused by: java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider org.jboss.ws.core.jaxws.spi.ProviderImpl could not be instantiated: java.lang.ClassCastException at java.util.ServiceLoader.fail(ServiceLoader.java:207) at java.util.ServiceLoader.access$100(ServiceLoader.java:164) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:353) at java.util.ServiceLoader$1.next(ServiceLoader.java:421) at javax.xml.ws.spi.Provider.getProviderUsingServiceLoader(Provider.java:180) at javax.xml.ws.spi.Provider.provider(Provider.java:140) at javax.xml.ws.Service.(Service.java:92)
[...]
... 3 more Caused by: java.lang.ClassCastException at java.lang.Class.cast(Class.java:2990) at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:345)
... 14 more

나는 또한 3.1.2.GA에서 버전 3.4.0로 jbossws를 업데이트하려고 아무것도 변경되지 않습니다. 나는 보스의 승인 lib 디렉토리에있는 항아리를/확인에 관한 제안을 많이 읽었습니다, 그래서 이것은 내용입니다 :

activation.jar 
jaxb-api.jar 
jaxws-api.jar 
jbossws-native-factories.jar 
resolver.jar 
serializer.jar stax-api.jar 
xalan.jar 
xercesImpl.jar 

나는 또한 스위치 -verbose를 추가했습니다 : 클래스는 JVM에 :

[Loaded org.jboss.ws.core.jaxws.spi.ProviderImpl from jar:file:/Users/carlo/jboss-5.1.0.GA/common/lib/jbossws-native-core.jar!/] 

그 클래스를 확장 javax.xml.ws.spi.Provider (http://bit.ly/LK9bNE)

여기에 무슨 일이 일어나고 있는지

누군가가 나를 도울 수 있습니까?

EDIT 1
좋아, 그래서는 ClassCastException가에서 제기되는 것을 볼 수 : service.cast가 호출 될 때 thisjavax.xml.ws.spi.Provider하고 주조 할 수있는 인수는, ServiceLoader.java 라인 (345)

S p = service.cast(Class.forName(cn, true, loader).newInstance()); 

org.jboss.ws.core.jaxws.spi.ProviderImpl. 그래도 문제를 이해하지 못합니다.

+0

Eclipse를 사용하여 디버깅하고 예외에 중단 점을 넣을 수 있습니다. ClassCastException – davidfrancis

+0

PS JAX-WS에 몇 가지 문제점이있었습니다. 그것은 (참조 impl yhow)가 JDK에 통합되었습니다. classpath와 JDK의 다른 버전을 가지고 있다면 이와 같은 일이 일어나는 경향이 있습니다. jbossws에 대해서는 들어 본 적이 없지만 JAX-WS 구현이 될 수있는 것처럼 들립니다. – davidfrancis

+0

이전에 그런 종류의 문제가있었습니다. 실제로는 제외되었으므로 다음과 같은 문제점이 있습니다. javax.xml.stream, stax, saaj-impl, saaj- API와 mimepull. 그리고 내가 실수 한 것이 사라지게 만들었습니다. – Carlo

답변

2

마지막으로, 저는 문제를 해결할 수있었습니다 : jaxws-rt.jar$JBOSS_HOME/lib/endorsed에 넣었습니다.

편집
나는 EAP 보스 5.1에서 같은 문제를 가지고 있었고, 그것을 해결하기 위해, 단계는 약간 다릅니다 : $JBOSS_HOME/lib/endorsed에 내가 이전 JAXB-api.jar을 제거하고

    복사
  • JAXB-api.jar을
  • JAXB-impl.jar
  • JAXWS-api.jar을
  • JAXWS-의 rt.jar

최신 jaxws-ri 패키지에서 결국 작동했습니다.

+0

위에서 확인한 4 개의 jar 파일을 추가했을 때 여러 다른 파일을 추가해야했습니다. 위의 작업이있는 그대로입니까, 아니면 여기에 뭔가 빠져 있습니다. – boyd4715

+0

글쎄, 내게는 효과가 있었다. 어쩌면 다른 도서관을 가지고 있을까요? – Carlo

+0

더 이상 정보를 제공 할 수 있습니까? JBoss 5.1을 실행 중입니다. JAXWS RI 2.2.7에서 JDK 1.6_22를 사용하여 만든 웹 서비스 클라이언트가 있습니다. JBoss에 배포 할 때 클라이언트를 사용할 수 없습니다. 클라이언트는 독립 실행 형 모드에서 올바르게 작동합니다. – boyd4715

2

나는 똑같은 문제에 직면했다. JDK 1.6_22와 함께 JBoss 5.1 EAP를 실행 중입니다.

나는 약간 다른 것을했습니다. 나는 Carlo plus this solution에 의해 해결책을 결합했다.

$ JBOSS_HOME/server/lib/endorsed 아래에 승인 된 폴더를 만들었습니다. 그런 다음 streambuffer.jar, stax-ex.jar, policy.jar, jaxws-rt.jar, jaxws-api.jar, jaxb-impl.jar, jaxb-api.jar 및 gmbal-api-only.jar을 복사했습니다.

$ JBOSS_HOME/lib/endorsed 만 남겼습니다. 이렇게

, 나는 그것이 모두 내가 보스 5에서 같은 문제가 있었다

2

작동하도록 작동시킬 수 있었다.1 EAP jar 파일을 JBOSS 응용 프로그램 서버에 넣는 대신 WAR (서버 클래스 무시) (http://www.jboss.org/community/wiki/classloadingconfiguration)을 분리하여 클래스 로딩 논리를 변경하면 더 강력합니다. 제 경우에는 3 가지 환경이 있습니다. 이 솔루션을 사용하면 한 JBOSS 인스턴스에서 다른 인스턴스로 war 파일을 이동할 수 있으며 여전히 작동합니다. 여기에 보스 - web.xml에 추가 :

내가이 문제를 해결

<class-loading java2ClassLoadingCompliance="false"> 
    <loader-repository> 
     com.example:archive=unique-archive-name 
     <loader-repository-config>java2ParentDelegation=false</loader-repository-config> 
    </loader-repository> 
</class-loading> 

...

전쟁에 requierd 단지 (JAXB-api.jar을 추가하여 , jaxws-api.jar, jaxws-api.jar, jaxws-rt.jar)