Java NoClassDefFoundError

时间:2010-06-23 12:53:46

标签: java spring-ws

我可以使用以下命令编译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 :(得分: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

答案 1 :(得分:0)

当您将该类路径传递给javac调用时,这是必要的,因为您的类引用了仅在这些JAR中定义的文件。

在运行时也是如此,编译后的Java字节码需要能够“看到”那些JAR才能加载类并使用Spring功能。因此,您不仅可以调用java WebServiceClient并期望它可以正常工作。

相反,你需要调用pakore的答案所显示的命令,看起来应该有效。如果有疑问,在成功编译后,按向上箭头重新缓冲最后一个命令,从c删除javac并从结尾处的文件名中删除.java。 (如果您的shell不支持此功能,请通过例如记事本复制并粘贴上一行。)

答案 2 :(得分:0)

org.springframework.ws.client.core.WebServiceTemplate 位于 spring-ws-core.jar 上。当您将应用程序部署到您尝试运行它的Application Server或将其作为服务器lib的一部分包含在内时,您是否检查过它是否包含在WAR / EAR中?成功的编译并不意味着运行应用程序所需的所有类都将在运行时出现。

相关问题