이 절에서는 웹 컨테이너와 관련된 알려진 문제점과 해결 방법을 설명합니다.
Java EE SDK b33d가 포함된 JDK 1.6으로 JAX-WS 테스트를 실행할 경우 문제가 생길 수 있습니다. 테스트는 다음 메시지와 함께 즉시 중단됩니다.
[wsimport] Exception in thread "main" java.lang.NoClassDefFoundError: \ com/sun/tools/ws/WsImport |
이 오류는 webservices-tools.jar에 com/sun/tools/ws/WsImport.class, com/sun/tools/ws/ant/WsImport.class 및 com/sun/tools/ws/ant/WsImport2.class가 포함되어 있지 않은 경우에도 발생합니다. 또한 같은 테스트 작업 공간이 1.5.0-10 JDK를 사용했을 땐 문제 없이 작동하기도 합니다.
JAX-WS 테스트를 실행하기 전에 webservices-api.jar을 $JAVA_HOME/jre/lib/endorsed로 복사합니다.
JAXR에서는 SAAJ를 사용하여 SOAP 메시지를 레지스트리에 보냅니다. IFR이 아닌 경우 SAAJ impl 클래스는 lib/webservices-rt.jar 아래에 있습니다. IFR 사례에서 SAAJ 클래스는 아직 lib/webservices-rt.jar 아래에 있습니다. 또한 saaj-impl.jar은 /usr/share/lib 디렉토리에 있습니다. 이 jar 파일은 Enterprise Server와 webservices-rt.jar에 있는 우선적인 파일에서 선택됩니다. 이 jar 파일에는 SOAP 메시지를 웹 서비스 레지스트리에 보내는 데 필요한 보안 권한이 없습니다. /usr/share/lib 디렉토리의 jar에 권한을 부여하거나 /usr/share/lib jar에 종속되지 않으려면 패키지를 수정해야 합니다.
다음을 server.policy 파일에 추가합니다,
grant codeBase "file:/usr/share/lib/saaj-impl.jar" { permission java.security.AllPermission; }; |
JDK 6 Update 4에 대해 wscompile ant 작업이 실패합니다. 각 JAX-RPC API 클래스의 경우 다음 오류 메시지가 표시됩니다.
package package-name does not exist |
wscompile ant 작업을 실행하기 전에 클래스 경로에 j2ee.jar이 아니라 javaee.jar이 지정되어 있는지 확인합니다.