SOAP RPC SimpleObjectAccessProtocol RemoteProcedureCall mittels XML über Port 80 Sascha Sadikni BPS Präsentation
Übersicht SOAP im Überblick ApacheSOAP SOAP-Client XML Beispiel SOAP-Client
Web (Apache) Servlet- Container (Tomcat) - soap.war (ApacheSOAP WebApplication)
+ ApacheSOAP Web (Apache) Servlet- Container (Tomcat) - soap.war (ApacheSOAP WebApplication) includes - Deploy-JSP's - RPC-Router-Servlet
Web (Apache) Servlet- Container (Tomcat) - soap.war (ApacheSOAP WebApplication) includes calls - Deploy-JSP's - RPC-Router-Servlet
SOAP-Client SOAP-Client - Java-Client-App sends XML-Doc via HTTP / Port 80 Web (Apache) Servlet- Container (Tomcat) - soap.war (ApacheSOAP WebApplication) includes calls Client - Deploy-JSP's - RPC-Router-Servlet
Kompletter Überblick SOAP-Client - Java-Client-App XML-Doc XML-Doc Class-ID Method-Name sends XML-Doc via HTTP / Port 80 Web (Apache) Servlet- Container (Tomcat) ParameterList - soap.war... (ApacheSOAP WebApplication) includes calls Client - Deploy-JSP's - RPC-Router-Servlet
Kompletter Überblick SOAP-Client - Java-Client-App XML-Doc sends XML-Doc via HTTP / Port 80 Web (Apache) Servlet- Container (Tomcat) - soap.war (ApacheSOAP WebApplication) includes calls Client - Deploy-JSP's - RPC-Router-Servlet
SOAP-Beispiel SOAP-Client - Java-Client-App Client
package bps.soap.service; import java.io.serializable; import java.util.date; import java.util.calendar; public class Info implements Serializable { public Info() { public String greeting(string name) { return "Hello, " + name + "!"; public Date getdate() { return new Date();......
public class Info implements Serializable {... public String getos() { return System.getProperty("os.name") + "::" + System.getProperty("os.arch") + "::" + System.getProperty("os.version"); public String getjdkversion() { return System.getProperty("java.version") + "::" + System.getProperty("java.vendor"); public String getallinfos(string name) { StringBuffer sb = new StringBuffer(); sb.append(this.greeting(name) + "\n"); sb.append("my current date is " + this.getdate() + "\n"); sb.append("i'm running on " + this.getos() + "\n"); sb.append("my JDK-version is " + this.getjdkversion()+"\n"); return sb.tostring();
Deployment Tomcat-ServletContainer entpacken tar zxvf jakarta-tomcat-5.0.12.tar.gz Apache-SOAP entpacken tar zxvf soap-bin-2.3.1.tar.gz Environment setzen export JAVA_HOME=/usr/lib/java export CLASSPATH=~/test/jars/soap.jar: ~/test/jars/xerces.jar:~/test/jars/mail.jar:~/test/jars/activation.jar: ~/java/classes
Deployment Tomcat konfigurieren Context-Tag hinzufügen in../jakarta-tomcat-5.0.12/conf/server.xml z.b. direkt vor </Host> : <Context path="/soap" docbase="~/test/soap-2_3_1/webapps/soap" debug="1" reloadable="true"> </Context> Benötigte JARs: soap.jar, xerces.jar, mail.jar, activation.jar kopieren nach../jakarta-tomcat-5.0.12/common/lib/
Deployment Tomcat konfigurieren CLASSPATH anpassen in../jakarta-tomcat-5.0.12/bin/setclasspath.sh # Set standard CLASSPATH CLASSPATH= "$JAVA_HOME"/lib/tools.jar: ~/java/classes: Tomcat starten/stoppen cd../jakarta-tomcat-5.0.12/ bin/startup.sh bin/shutdown.sh
Deployment Service deployen http://localhost:8080/soap/ Run the admin client Deploy ID=urn:Info Provider Class=bps.soap.service.Info Methods=greeting, getdate, getos, getjdkversion, getallinfos
SOAP-Client package bps.soap.client; import org.apache.soap.rpc.*; import org.apache.soap.*; import java.net.*; import java.util.vector; SOAP-Client - Java-Client-App Client public class InfoClient { public String getinfos(string name) { try {... catch(malformedurlexception mue) {.. catch(soapexception soape) {.. return null; public static void main(string[] args) { if(args.length<1) {... InfoClient ic = new InfoClient(); System.out.println(ic.getInfos(args[0]));
SOAP-Client // *** soap-rpcrouter-url URL soapurl = new URL("http://localhost:8080/soap/servlet/rpcrouter"); SOAP-Client - Java-Client-App // *** call Call call = new Call(); // *** urn call.settargetobjecturi("urn:info"); // *** method call.setmethodname("getallinfos"); call.setencodingstyleuri(constants.ns_uri_soap_enc); // *** parameter Parameter paramname = new Parameter("name", String.class, name, Constants.NS_URI_SOAP_ENC); Vector params = new Vector(); params.add(paramname); call.setparams(params); Client
SOAP-Client SOAP-Client - Java-Client-App // *** invokation Response response = call.invoke(soapurl, ""); // *** response-handling if(response.generatedfault()) { return "Response generates fault: " + response.getfault().getfaultstring(); else { Parameter returnparam = response.getreturnvalue(); return returnparam.getvalue().tostring(); Client
Quellen http://www.informatik.fh-wiesbaden.de/~ssadi001 Apache-SOAP (v2.3.1) http://ws.apache.org/soap/ Tomcat (v5.0.12) http://jakarta.apache.org/tomcat/ Apache Xerces (xerces.jar v1.4.4) http://xml.apache.org/xerces-j/ JavaMail (mail.jar v1.1.3) http://java.sun.com/products/javamail/ JavaBeans Activation Framework (activation.jar v1.0.2) http://java.sun.com/products/beans/glasgow/jaf.html