SOAP – RPC SimpleObjectAccessProtocol RemoteProcedureCall mittels XML über Port 80 Sascha Sadikni BPS – Präsentation
Übersicht SOAP im Überblick – Server – ApacheSOAP – SOAP-Service – SOAP-Client – XML Beispiel – SOAP-Service – SOAP-Client
Server WebServer (Apache) Servlet- Container (Tomcat) - soap.war (ApacheSOAP WebApplication) Server
WebServer (Apache) Servlet- Container (Tomcat) - soap.war (ApacheSOAP WebApplication) - Deploy-JSP's - RPC-Router-Servlet includesincludes Server + ApacheSOAP
Server WebServer (Apache) Servlet- Container (Tomcat) - soap.war (ApacheSOAP WebApplication) SOAP-Service - Java-Class (JavaBean) - EJB - NonJava Deploy-JSP's - RPC-Router-Servlet includesincludes callscalls SOAP-Service
SOAP-Client Server WebServer (Apache) Servlet- Container (Tomcat) - soap.war (ApacheSOAP WebApplication) SOAP-Service - Java-Class (JavaBean) - EJB - NonJava Deploy-JSP's - RPC-Router-Servlet includesincludes Client callscalls sends XML-Doc via HTTP / Port 80 - Java-Client-App - NonJava -... SOAP-Client
Server WebServer (Apache) Servlet- Container (Tomcat) - soap.war (ApacheSOAP WebApplication) SOAP-Service - Java-Class (JavaBean) - EJB - NonJava Deploy-JSP's - RPC-Router-Servlet includesincludes Client callscalls sends XML-Doc via HTTP / Port 80 - Java-Client-App - NonJava -... Kompletter Überblick XML-Doc Class-ID Method-Name ParameterList...
SOAP-Client Server WebServer (Apache) Servlet- Container (Tomcat) - soap.war (ApacheSOAP WebApplication) SOAP-Service - Java-Class (JavaBean) - EJB - NonJava Deploy-JSP's - RPC-Router-Servlet includesincludes Client callscalls sends XML-Doc via HTTP / Port 80 - Java-Client-App - NonJava -... Kompletter Überblick XML-Doc
Server SOAP-Service - Java-Class (JavaBean) - EJB - NonJava -... SOAP-Beispiel SOAP-Client Client - Java-Client-App - NonJava -...
Server SOAP-Service - Java-Class (JavaBean) - EJB - NonJava -... SOAP-Service package bps.soap.service; import java.io.Serializable; import java.util.Date; import java.util.Calendar; public class ServerInfo implements Serializable { public ServerInfo() {} public String greeting(String name) { return "Hello, " + name + "!"; } public Date getServerDate() { return new Date(); } }
Server SOAP-Service - Java-Class (JavaBean) - EJB - NonJava -... SOAP-Service public class ServerInfo implements Serializable { public String getServerOS() { return System.getProperty("os.name") + "::" + System.getProperty("os.arch") + "::" + System.getProperty("os.version"); } public String getServerJDKVersion() { 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.getServerDate() + "\n"); sb.append("I'm running on " + this.getServerOS() + "\n"); sb.append("My JDK-version is " + this.getServerJDKVersion()+"\n"); return sb.toString(); }
Server SOAP-Service - Java-Class (JavaBean) - EJB - NonJava -... Deployment Tomcat-ServletContainer entpacken – tar zxvf jakarta-tomcat tar.gz Apache-SOAP entpacken – tar zxvf soap-bin 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
Server SOAP-Service - Java-Class (JavaBean) - EJB - NonJava -... Deployment Tomcat konfigurieren – Context-Tag hinzufügen in../jakarta-tomcat /conf/server.xml z.B. direkt vor : <Context path="/soap" docBase="~/test/soap-2_3_1/webapps/soap" debug="1" reloadable="true"> – Benötigte JARs: soap.jar, xerces.jar, mail.jar, activation.jar kopieren nach../ jakarta-tomcat /common/lib/
Server SOAP-Service - Java-Class (JavaBean) - EJB - NonJava -... Deployment Tomcat konfigurieren – CLASSPATH anpassen in../jakarta-tomcat /bin/setClasspath.sh # Set standard CLASSPATH CLASSPATH= "$JAVA_HOME"/lib/tools.jar: ~ /java/classes: Tomcat starten/stoppen – cd../jakarta-tomcat / – bin/startup.sh – bin/shutdown.sh
Server SOAP-Service - Java-Class (JavaBean) - EJB - NonJava -... Deployment Service deployen – – Run the admin client – Deploy ID=urn:ServerInfo Provider Class=bps.soap.service.ServerInfo Methods=greeting, getServerDate, getServerOS, getServerJDKVersion, getAllInfos
SOAP-Client Client - Java-Client-App - NonJava -... package bps.soap.client; import org.apache.soap.rpc.*; import org.apache.soap.*; import java.net.*; import java.util.Vector; public class InfoClient { public String getServerInfos(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.getServerInfos(args[0])); }
SOAP-Client Client - Java-Client-App - NonJava -... // *** soap-rpcrouter-url URL soapURL = new URL(" // *** call Call call = new Call(); // *** urn call.setTargetObjectURI("urn:ServerInfo"); // *** 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);
SOAP-Client Client - Java-Client-App - NonJava -... // *** 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(); }
Quellen Apache-SOAP (v2.3.1) – Tomcat (v5.0.12) – Apache Xerces (xerces.jar v1.4.4) – JavaMail (mail.jar v1.1.3) – JavaBeans Activation Framework (activation.jar v1.0.2) – ml