You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@xml.apache.org by "Alex Chan (Derivatives IT)" <AC...@hkex.com.hk> on 2001/08/31 10:26:47 UTC

Error to execute Apache-soap client program

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