2010-06-23 2 views
0

내가 할 수있는 다음과 같은 명령을 사용하여 자바 웹 서비스 클라이언트 벌금을 컴파일 :자바 NoClassDefFoundError를

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/ws/client/core/WebServiceTemplate 
     at WebServiceClient.<init>(WebServiceClient.java:14) 
     at WebServiceClient.main(WebServiceClient.java:37) 
Caused by: java.lang.ClassNotFoundException: org.springframework.ws.client.core. 
WebServiceTemplate 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
     ... 2 more 

: 나는 실제로 (자바 WebServiceClient)를 실행하면

javac 
    -classpath lib\spring-ws-2.0.0-M2-all.jar;lib\xml-apis.jar;lib\j2ee.jar;lib\saaj.jar;lib\saaj-impl.jar 
    WebServiceClient.java 

, 그것은 나에게 다음과 같은 오류를 제공합니다 WebServiceClient.java의 코드는 다음과 같습니다.

import java.io.StringReader; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 

import org.springframework.ws.WebServiceMessageFactory; 
import org.springframework.ws.client.core.WebServiceTemplate; 
import org.springframework.ws.transport.WebServiceMessageSender; 

public class WebServiceClient { 

    private static final String MESSAGE = 
     "<message xmlns=\"http://tempuri.org\">Hello Web Service World</message>"; 

    private final WebServiceTemplate webServiceTemplate = new WebServiceTemplate(); 

    public void setDefaultUri(String defaultUri) { 
     webServiceTemplate.setDefaultUri(defaultUri); 
    } 

    // send to the configured default URI 
    public void simpleSendAndReceive() { 
     StreamSource source = new StreamSource(new StringReader(MESSAGE)); 
     StreamResult result = new StreamResult(System.out); 
     webServiceTemplate.sendSourceAndReceiveToResult(source, result); 
    } 

    // send to an explicit URI 
    public void customSendAndReceive() { 
     StreamSource source = new StreamSource(new StringReader(MESSAGE)); 
     StreamResult result = new StreamResult(System.out); 
     webServiceTemplate.sendSourceAndReceiveToResult("http://wsdl", 
      source, result); 
    } 

    public static void main(String[] args) throws Exception { 
     WebServiceClient ws = new WebServiceClient(); 
     ws.setDefaultUri("http://wsdl"); 
     ws.simpleSendAndReceive(); 
    } 
} 

도움이 되었습니까?

+0

은 런타임 환경 클래스 경로에있는 라이브러리입니까? – pakore

+0

커맨드 라인에서 classpath 스위치로 모든 jar 파일을 포함 시켰습니다 : -classpath lib \ spring-ws-2.0.0-M2-all.jar; lib \ xml-apis.jar; lib \ j2ee.jar; lib \ saaj.jar; lib \ saaj-impl.jar 그게 잘못 되었습니까? – droidy

+0

'javac'과'java' 호출 둘 다에 추가 했습니까? 당신은 당신의 Q 안에있는'javac' 명령으로 classpath를 설정한다고 말합니다. –

답변

0

나는 다음과 같이 폴더 구조는 가정

java -classpath lib\spring-ws-2.0.0-M2-all.jar;lib\xml-apis.jar;lib\j2ee.jar;lib\saaj.jar;lib\saaj-impl.jar WebServiceClient 

을 시도; 당신이 당신의 javac 호출에 그 클래스 경로에 전달하면 수업은 이들 병에 정의 된 파일을 참조하기 때문에

\WebServiceClient.java 
\WebServiceClient.class 
\lib\spring-ws-2.0.0-M2-all.jar 
\lib\xml-apis.jar 
\lib\j2ee.jar 
\lib\saaj.jar 
\lib\saaj-impl.jar 
+0

이 오류가 발생했습니다 : "main"스레드의 예외 java.lang.NoClassDefFoundError : WebServiceClient ... WebServiceClient라는 기본 클래스를 찾을 수 없습니다. 프로그램이 종료됩니다. – droidy

+0

WebServiceClient.class는 어디에서 실행합니까? WebServiceClient가 패키지 안에 있습니까? – pakore

+0

예. WebServiceClient.java와 WebServiceClient.class가 동일한 디렉토리에서 명령을 실행했습니다. – droidy

0

, 그것은 필요했다.

런타임시에도 마찬가지입니다. 컴파일 된 Java 바이트 코드는 클래스를로드하고 Spring 기능을 사용하기 위해 해당 JAR을 "볼"수 있어야합니다. 그래서 당신은 단지 java WebServiceClient을 호출 할 수없고 그것이 작동 할 것으로 기대할 수 없습니다.

대신 pakore의 대답이 보여주는 명령을 호출해야합니다 (작동하는 것처럼 보입니다). 의심 스럽다면 성공적으로 컴파일 한 후 위쪽 화살표를 눌러 마지막 명령을 다시 버퍼링하고 javac에서 c을 삭제하고 끝에있는 파일 이름에서 .java을 삭제하십시오. (쉘이 이것을 지원하지 않는다면 메모장 등을 통해 이전 줄을 복사하여 붙여 넣기하십시오).

+0

불행히도 여전히 작동하지 않았습니다. – droidy

+0

내가 생각할 수있는 유일한 점은, 당신이 합리적으로 복잡한 클래스 로딩 상황을 겪고 있다는 것입니다. 커맨드 라인에서 제공하는 클래스 패스가 실패한 ClassLoader의 효과적인 클래스 패스가 아닙니다. 파일을 찾으십시오. 그냥 확인 - 당신은 웹 서비스 클라이언트의 일종을 쓰고있어,이 오류 메시지가 * 클라이언트 쪽에서 생성되고 있습니까? 또는 서버에서 생성되어 클라이언트로 반환됩니까? –

+0

다음과 같이 명령을 변경했습니다 (jar 클래스 경로 끝에 a;를 추가). java -classpath lib \ spring-ws-2.0.0-M2-all.jar; lib \ xml-apis.jar; lib \ j2ee.jar; lib \ saaj.jar; lib \ saaj-impl.jar; WebServiceClient 지금의 나에게 다른 오류를주는 : ServiceClient 예외 스레드에서 "기본"java.lang.NoClassDefFoundError가 : 조직/스프링 프레임 워크/ EAN과 B/공장/InitializingBean 표시 나는 어쩌면 그냥 누락 된 JAR을 찾을 필요가 있다고 생각 . – droidy

0

org.springframework.ws.client.core.WebServiceTemplate는 스프링 WS-core.jar를에 위치한다. 애플리케이션을 실행하려는 Application Server에 배포 할 때 또는 서버의 lib 디렉토리에 포함되어있는 경우 해당 애플리케이션이 WAR/EAR에 포함되어 있는지 확인 했습니까? 성공적인 컴파일은 런타임에 응용 프로그램을 실행하는 데 필요한 모든 클래스가 있음을 의미하지는 않습니다.

관련 문제