Java NoClassDefFoundError - PullRequest
       2

Java NoClassDefFoundError

0 голосов
/ 23 июня 2010

Я могу скомпилировать клиент Java Web Service в порядке с помощью следующей команды:

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();
    }
}

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 23 июня 2010

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

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

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

0 голосов
/ 12 мая 2011

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

0 голосов
/ 23 июня 2010

Попробуйте

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