Eclipse RCP 응용 프로그램 내에서 Metro library을 사용하여 웹 서비스를 호출하려고합니다. 필자는 관련 메트로 항아리 (webservices-tools.jar
, webservices-rt.jar
및 webservices-api.jar
)를 플러그인에 묶어 주었고 내 기본 애플리케이션 플러그인을이 새로운 Metro 플러그인에 의존하게 만들었습니다.Metro에서 Eclipse RCP 클래스 로딩 문제
또한 을 내 $JAVA_HOME/jre/lib/endorsed
디렉토리에 추가했습니다. Metro 웹 사이트에 따르면 Java 1.6과 함께 Metro를 사용할 때 필요합니다.
javax.xml.ws.WebServiceException: Provider com.sun.xml.ws.spi.ProviderImpl not found
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.jav a:38)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:133)
at javax.xml.ws.spi.Provider.provider(Provider.java:83)
at javax.xml.ws.Service.<init>(Service.java:56)
...
Caused by: java.lang.ClassNotFoundException: com.sun.xml.ws.spi.ProviderImpl
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at org.eclipse.core.runtime.internal.adaptor.ContextFinder.load Class(ContextFinder.java:129)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.jav a:34)
... 43 more
com.sun.xml.ws.spi.ProviderImpl
이 webservices-rt.jar
에있는 클래스 내 지하철 플러그인의 일부입니다 : 내가 어떤 웹 서비스를 호출 할 때
지금, 나는 다음과 같은 오류가 발생합니다. 또한, 내 응용 프로그램 플러그인 코드가이 클래스를 성공적으로로드 할 수 있는지 확인 했으므로 javax.xml.ws.spi.FactoryFinder
을 사용할 수없는 이유를 모르겠습니다.
javax.xml.ws.spi.FactoryFinder
은 webservices-api.jar
(jre의 승인 된 디렉토리에 넣은 항아리)에 있기 때문에 Eclipse 플러그인에서 클래스를로드 할 수없는 승인 된 코드와 관련이 있다고 생각합니다.
승인 된 디렉토리의 JVM에서로드 한 코드가 플러그인의 클래스를로드 할 수없는 경우가 있습니까? 이 방법을 사용할 수 있습니까?
Java 버전 : 1.6.0_16
이클립스 버전 : 이클립스 자바 EE IDE 웹 개발자 ID를 빌드 : 20090920-1017이
메트로 버전 (그것은 그 이상 버전을 표시하지 않습니다) : 번들 글래스 피시 2.1
도움을 주시면 대단히 감사하겠습니다. 감사.
JAX-WS의 Java SE 6 버전은 보안을 구현하지 않는다는 문제점이 있습니다. 내가 제안한대로 메트로 항아리를 제거하려고했는데, 위의 경우를 지나면 오류가 발생하지만 내 클라이언트가 보안 헤더를 포함하지 않는다는 오류 메시지가 나타납니다 (JAX-WS의 JDK 버전 보안을 구현하지 않음). 그래서 보안을 구현하기 위해 실제로 JAX-WS의 Metro 버전을 사용해야한다고 생각합니다. – Jeff
보안 부족에 대한 확신이 있으십니까? 가이드에는 "Java SE 6 Update Release 4 이상에는 이미 JAX-WS 2.1 API가 포함되어 있으며 더 이상 다음 작업은 더 이상 필요하지 않습니다." – Yoni
편집과 관련하여 Metro 사이트는 _only_ webservices-api.jar이 지지가 된 디렉토리로 들어가고, 다른 항아리는 없다. 그럼에도 불구하고 다른 지하철 항아리를 승인 된 디렉토리에 넣어 보았습니다. 내가 할 때 이상한 LinkageErrors가 생기기 시작합니다. 보안 부족에 대해서는 다른 온라인 포럼에서 읽었습니다. 그렇다고해서 당연한 것은 아니지만 메트로 항아리없이 실행하려고하면 클라이언트가 실행되지만 요청에 보안 헤더가 포함되지 않습니다 (서버 및 tcpmon에서 반환 된 오류로 확인 됨). – Jeff