#眉標=開發工具 #副標=Java開發Web Service應用系列(7): #大標=企業J2EE成就Web Services一步到位的關鍵報告(下) #作者=文/鄧崇林 ================================== import javax.naming.*; import javax.rmi.PortableRemoteObject; import java.util.*; import javax.naming.spi.NamingManager; import basic.*; public class HelloWorldClient { public static void main(String[] args) { try { Context initial = new InitialContext(); Object objref = initial.lookup("cltHelloWorld"); HelloWorldHome home = (HelloWorldHome)PortableRemoteObject.narrow(objref, basic.HelloWorldHome.class); HelloWorld helloBean = home.create(); System.out.println(helloBean.sayHello()); } catch (Exception ex) { System.err.println("Caught an unexpected exception!"); ex.printStackTrace(); } } } =================================== #小標=編譯及執行客戶端測試程式 ================================= set J2EEPATH=C:\j2sdkee1.3.1\lib\j2ee.jar;HelloWorldAppClient.jar javac -classpath %J2EEPATH% HelloWorldClient.java 編譯成功之後,接著我們以下列執行指令進行客戶端測試程式的執行過程。 set J2EEPATH=.;C:\j2sdkee1.3.1\lib\j2ee.jar;HelloWorldAppClient.jar java -classpath "%J2EEPATH%" HelloWorldClient 如果執行成功,就會在目前的命令提示字元視窗裡,秀出"Hello World!中文一定成功"字樣訊息。 ============================= #小標=撰寫EJB元件佈建描述檔 =============================================== org.apache.soap.server.DOMFaultListener =============================================== ============================================== •org.apache.soap.providers.StatelessEJBProvider •org.apache.soap.providers.StatefulEJBProvider •org.apache.soap.providers.EntityEJBProvider ===================================================== ========================================= org.apache.soap.server.DOMFaultListener ============================================== ===================================== java.util.Hashtable env = new java.util.Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory"); env.put(Context.PROVIDER_URL, "iiop://localhost:1050"); javax.naming.Context initial = new javax.naming.InitialContext(env); Object objref = initial.lookup("cltHelloWorld"); basic.HelloWorldHome home = (basic.HelloWorldHome)PortableRemoteObject.narrow(objref, basic.HelloWorldHome.class); basic.HelloWorld hello = home.create(); ================================ #小標=部署EJB元件佈建描述檔 =================================== set CLASSPATH=C:\tomcat32\lib\mail.jar;C:\tomcat32\lib\activation.jar;C:\xalan-j_2_2_0\bin\xerces.jar;C:\soap-2_3_1\lib\soap.jar;%classpath%; ========================================== ================================= java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter deploy helloEJBDD.xml ================================== ================================= import java.io.*; import java.net.*; import java.util.*; import org.apache.soap.*; import org.apache.soap.rpc.*; public class soapEJBhello { public static final String ENDPOINT_URL = "http://localhost:8080/soap/servlet/rpcrouter"; public static void main (String[] args) throws Exception { URL url = null; if(args.length > 0) { url = new URL(args[0]); } else { url = new URL(ENDPOINT_URL); } Call call = new Call (); call.setTargetObjectURI ("urn:ejbhello"); call.setMethodName ("sayHello"); Vector params = new Vector(); call.setParams (params); Response resp = call.invoke (url, "" ); if (resp.generatedFault ()) { Fault fault = resp.getFault(); System.out.println ("SOAP call failed: "); System.out.println (" Fault Code = " + fault.getFaultCode()); System.out.println (" Fault String = " + fault.getFaultString()); } else { Parameter result = resp.getReturnValue (); System.out.println ("sayHello => " + result.getValue()); } } } ===================================== #小標=編譯與執行SOAP客戶端測試程式 ============================= ============================= 由EJB元件提供的Web Service所回傳說哈囉的SOAP回應訊息如下: ============================= Hello World!中文一定成功 =============================