2010-06-23 7 views
0

я могу скомпилировать клиента штраф Java веб-службы с помощью следующей команды:Java NoClassDefFoundError

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 

Когда я на самом деле запустить его (Java WebServiceClient), он дает мне следующую ошибку:

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.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

Я включил все файлы jar с ключом classpath в командной строке: -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'? Вы только заявляете, что задаете путь к классу в команде 'javac' в своем Q –

ответ

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 

Я считаю, что ваша структура папок выглядит следующим образом;

\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

Когда вы прошли в этом путь к классам вашего javac вызова, это было необходимо, потому что ваши классы ссылаются файлы, которые были определены только в баночках.

То же самое справедливо и во время выполнения, ваш скомпилированный байт-код Java должен иметь возможность «видеть» эти JAR для загрузки классов и использования функциональности Spring. Поэтому вы не можете просто вызвать java WebServiceClient и ожидать, что он сработает.

Вместо этого вам нужно будет вызвать команду, которую показывает ответ pakore, который выглядит так, как будто он должен работать. Если вы сомневаетесь, после успешной компиляции нажмите стрелку вверх, чтобы отменить последнюю команду, удалите c с javac и удалите .java из имени файла в конце. (Если ваша оболочка не поддерживает это, скопируйте и вставьте предыдущую строку, например, в блокнот).

+0

К сожалению, это все еще не сработало. – droidy

+0

Единственное, что я могу придумать, это то, что у вас есть довольно сложная ситуация с загрузкой классов, так что путь класса, который вы указываете в командной строке, не ** - эффективный путь к классам ClassLoader, который не работает найдите файл. Просто, чтобы проверить - вы пишете какой-то клиент веб-сервиса, уверены ли вы, что это сообщение об ошибке генерируется на стороне * клиента *? Или он генерируется на сервере и возвращается клиенту? –

+0

Я изменил команду на это (добавив a; в конце путей класса jar): 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: орг/springframework/б Eans/завод/InitializingBean Я думаю, что, может быть, просто нужно найти недостающий файл JAR , – droidy

0

org.springframework.ws.client.core.WebServiceTemplate расположен на пружинных-WS-core.jar. Вы проверили, включено ли оно в WAR/EAR, когда приложение развертывается на сервере приложений, где вы пытаетесь запустить его, или если оно включено как часть lib сервера? Успешная компиляция не означает, что все классы, необходимые для запуска приложения, будут присутствовать во время выполнения.

Смежные вопросы