Hi,
I have just downloaded Apache-SOAP v2.2 and Tomcat v3.2. and follow an
article in Javaworld to verify SOAP implementation. Based upon the article,
2 programs have been developed, one for web service name "HelloServer.java"
and the other is a client program named "Client". After the web service has
been deployed and execute the client program, it always return error as
following :
Fault Code = SOAP-ENV:Server.Exception:
Fault String = java.lang.NullPointerException
and the client program as
import java.net.URL;
import java.util.Vector;
import org.apache.soap.SOAPException;
import org.apache.soap.Constants;
import org.apache.soap.Fault;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;
public class Client {
public static void main(String[] args) {
if (args.length == 0) {
System.err.println("Usage : java hello.client
[SOAP-router-URL ");
System.exit(1);
}
try {
URL ur = null;
String name = null;
if (args.length == 2) {
ur = new URL(args[0]);
name = args[1];
}
else {
ur = new
URL("http://localhost:8080/apache-soap/servlet/rpcrouter");
name = args[0];
}
Call call = new Call();
call.setTargetObjectURI("urn:hello");
call.setMethodName("sayHelloTo");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Vector params = new Vector();
params.addElement(new Parameter("name",
String.class, name, null));
call.setParams(params);
Response resp = null;
try {
System.out.println("invoke service\n" + "URL
= " + ur + "\n");
resp = call.invoke(ur, "");
}
catch (SOAPException e ) {
System.err.println("Caught SOAPException ("
+ e.getFaultCode() + "): " + e.getMessage());
System.exit(-1);
}
if (!resp.generatedFault()) {
Parameter ret = resp.getReturnValue();
Object value = ret.getValue();
System.out.println(value);
}
else {
Fault fault = resp.getFault();
System.err.println("Generated fault ");
System.err.println(" Fault Code = " +
fault.getFaultCode());
System.err.println(" Fault String = " +
fault.getFaultString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
and the client program as
public class HelloServer {
public String sayHelloTo(String name) {
System.out.println("sayHelloTo(String name)");
return "Hello " + name + ", How are you doing ?";
}
}
and the Tomcat classpath as follow
c:\xerces-1_3_0\xerces.jar;c:\soap-2_2\lib\soap.jar;c:\my
documents\myjava\mysoap;C:\jakarta-tomcat-3.2.2\classes;C:\jakarta-tomcat-3.
2.2\lib\cocoon.jar;C:\jakarta-tomcat-3.2.2\lib\xerces_1_2.jar;C:\jakarta-tom
cat-3.2.2\lib\stylebook-1.0-b2.jar;C:\jakarta-tomcat-3.2.2\lib\turbine-pool.
jar;C:\jakarta-tomcat-3.2.2\lib\xlan_1_2_D02.jar;C:\jakarta-tomcat-3.2.2\lib
\fop_0_15_0.jar;C:\soap-2_2\lib\soap.jar;C:\jakarta-tomcat-3.2.2\lib\w3c.jar
;C:\jakarta-tomcat-3.2.2\lib\ant.jar;C:\jakarta-tomcat-3.2.2\lib\cocoon.jar;
C:\jakarta-tomcat-3.2.2\lib\fop_0_15_0.jar;C:\jakarta-tomcat-3.2.2\lib\jaspe
r.jar;C:\jakarta-tomcat-3.2.2\lib\jaxp.jar;C:\jakarta-tomcat-3.2.2\lib\parse
r.jar;C:\jakarta-tomcat-3.2.2\lib\servlet.jar;C:\jakarta-tomcat-3.2.2\lib\st
ylebook-1.0-b2.jar;C:\jakarta-tomcat-3.2.2\lib\turbine-pool.jar;C:\jakarta-t
omcat-3.2.2\lib\webserver.jar;C:\jakarta-tomcat-3.2.2\lib\xalan_1_2_D02.jar;
C:\jakarta-tomcat-3.2.2\lib\xerces_1_2.jar;.;.;C:\PROGRA~1\JMF21~1.1\lib\sou
nd.jar;C:\PROGRA~1\JMF21~1.1\lib\jmf.jar;C:\WINNT\java\classes;C:\dbxml-core
\java\lib\dbXML.jar;.;c:\JDK1.3\lib\tools.jar
and the configuration of web service deployment in Apache as following
id --> urn:Hello
Scope --> Request
Provider Type --> java
Provider Class --> HelloServer
Use static class --> false
Methods --> sayHelloTo
Can u suggest what I can do ? Thank a lot
Regards,
Alex