1 / 38

Web Services with JAX-RPC and Apache Axis

Pankaj Kumar ( pankaj_kumar@hp.com ), Software Architect, Web Services Management Organization, Hewlett Packard Co. Sep. 18, 2002. Web Services with JAX-RPC and Apache Axis. Session Objectives. Web Services in Perspective

monty
Download Presentation

Web Services with JAX-RPC and Apache Axis

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Pankaj Kumar (pankaj_kumar@hp.com), Software Architect, Web Services Management Organization, Hewlett Packard Co. Sep. 18, 2002 Web Services withJAX-RPC and Apache Axis

  2. Session Objectives • Web Services in Perspective • Learn about Web Services, wire-level interoperability standards and portable Java APIs. • Get to know JAX-RPC and Apache Axis to consume and produce Web Services.

  3. Speaker Introduction • More than 12 years of development and project management experience • Worked on Web Services product development at HP • Expert Group Member of JAX-RPC and JSR109 • Contributor to Apache Axis and Cocoon projects • Author of open source project XPB4J (http://xpb4j.sf.net) • Frequent speaker at developer conferences • Authoring a book on J2EE and Web Services Security • Architect with HP Web Services Mgmt. Operation • Home Page: http://www.pankaj-k.net

  4. Outline of the Session • Introduction to Web Services • Web Services Standards • Java support for Web Services • Apache Axis • Installing Apache Axis • Invoking a service • Deploying a service • Handlers • Serializers and Deserializers • Where to find more information

  5. Web Services Infrastructure Language and platform independent infrastructure for loosely-coupled, inter-operable, app2app communication over the Internet.

  6. Web Services (Contd.) • Language and platform independent => • separation of specification and implementation • Loosely coupled => • message based, synchronous and asynchronous interactions. • Over the Internet => • No centralized control, use of established protocols, security considerations. • Inter-operable => • Standards based.

  7. Early (Internet) Technologies • SMTP/MIME • e-mail is still the killer app • FTP, NNTP • HTTP/HTTPS, HTML • the protocol behind Internet’s popularity Most of these facilitated app to human interaction over the Internet/intranet

  8. Early (intranet) Technologies • DCE from OSF -- RPC based, procedural • ORB -- object oriented, mostly synchronous • CORBA, COM/DCOM from Microsoft, Java RMI/EJBs • MOM -- message oriented, synchronous as well as asynchronous • JMS ( Java API standard ) • Many proprietary implementations Most of these facilitated app2app interaction within a trusted intranet and without much consideration to interoperability across different implementations.

  9. App2App Interaction -- the Web Services Way • Transport protocol • HTTP/HTTPS • Data Encoding • SOAP (Simple Object Access Protocol), XML Schema • Interface Description • WSDL (Web Services Description Language) • Service Description and Discovery • UDDI (Universal Description, Discovery and Integration) • Security • WS-Security, XML-Signature, XML-Encryption, ...

  10. The Web Services Way Web Services standards (SOAP, WSDL, … ): based on widely accepted Internet friendly technologies (HTTP/HTTPS, XML, …), are mostly orthogonal to each other and enjoy broad support from vendors Web Services: Network accessible programs, expose functionality by receiving/sending SOAP messages over HTTP/HTTPS, and describe this interface as WSDL descriptions.

  11. Additional Web Services Infrastructure Components • Key Management (Security) • XKMS • Web Services Management • OMI (Open Management Interface) • ... Interesting thing to note is that these are Web Services in themselves

  12. SOAP In One Slide SOAP1.1 Message Structure SOAP Envelope • XML based protocol for exchange of information • Encoding rules for datatype instances • Convention for representing RPC invocations • Designed for loosely-coupled distributed computing • No remote references • Used with XML Schema • Transport independent • SOAP with Attachments allow arbitrary data to be packaged. Header Entries [Header Element] Body Element [Fault Element]

  13. WSDL in One Slide WSDL1.1 Document Structure WSDL Document • A WSDL document describes • What the service can do • Where it resides • How to invoke it • WSDL are like IDL but lot more flexible and extensible • Defines binding for SOAP1.1, HTTP GET/POST and MIME • WSDL descriptions can be made available from an UDDI registry [Types] {Messages} {Port Types} {Bindings} {Services}

  14. Java APIs for Web Services • SOAP messages as Java objects • SAAJ ( SOAP with Attachments API for Java) • Programming Model • JAX-RPC ( JSR101), JSR109, EJB2.1 • Accessing WSDL descriptions • JWSDL (JSR110) • Accessing Web Services Registries • JAXR (Java API for XML Registries)

  15. SOAPPart SOAPMessage AttachmentPart Node SOAPFault SOAPElement SOAPFaultElement * SOAPBody SOAPHeader * * SOAPBodyElement SOAPHeaderElement SOAPEnvelope SAAJ Object Model

  16. JAX-RPC • WSDL/XML to Java Mapping • Java to WSDL/XML Mapping • SOAP Message with Attachments • Client API • Classes generated from WSDL • Dynamic Proxy • DII call Interface • SOAP Message Handler • Extensible Type Mapping

  17. WSDL description Service Client Service Endpoint Container WSDL<->Java Mapping Stub Dispatch JAX-RPC API JAX-RPC API Client Side JAX-RPC Runtime System Server Side JAX-RPC Runtime System Protocol (SOAP) Transport JAX-RPC Physical Architecture

  18. WSDL description Client Service JAX-RPC impl. <Vendor A> Vendor prod. <Vendor C> Client Service Vendor prod. <Vendor B> J2EE Container <Vendor D> WSDL description Interoperability and JAX-RPC

  19. Apache Axis • A SOAP Processing Engine • JAX-RPC Client System • JAX-RPC Server System ( Servlet based ) • SAAJ implementation • Flexible and extensible architecture • Tools, Examples, Documentation, … • A great place to learn about Web Services !! • Open-source, hosted by Apache Software Foundation • Ready for use ( RC1 released on Sep. 6)

  20. Install & Deploy Apache Axis Direcotry Structure: • Make sure that you have • J2SE SDK 1.3 or 1.4: We will use 1.4 • A Servlet Container: We will use Tomcat4.0.1 • Download xml-axis-rc1-bin.zip from http://xml.apache.org/axis • Unzip it and look at the dir. tree. Note that Axis runs as a Servlet. • Deploy Axis. • Copy webapps\axis tree to webapps directory of Tomcat. • Alternatively, modify server.xml of Tomcat. • Run Tomcat: issue bin\startup from Tomcat home. axis-1_0 webapps lib docs samples axis WEB-INF lib classes web.xml ……

  21. Test the Deployment • Point your browser to http://localhost:8080/axis

  22. A Simple Example • AddFunction: A simple Java class with method to add two integers. Notice the filename extension – it is .jws ( for Java Web Service). • Deploy it. Just copy the AddFunction.jws file to webapps/axis directory. • Examine its WSDL description. Point your browser to http://localhost:8080/axis/AddFunction.jws?wsdl // File: AddFunction.jws public class AddFunction { int addInt(int a, int b){ return(a+b); } } Note: All sources with instructions to run are available at my web-site: http://www.pankaj-k.net

  23. Writing the Client Program • There are many ways to write a Client program • Using Dynamic Invocation Interface ( DII) • Using generated Stubs from Service WSDL description • Using Dynamic Proxy • We will look at each of these Writing the client requires more work than writing the service

  24. AddFunctionClient – using DII // File: lesson1\client\dii\AddFunctionClient.java, edited for presentation import javax.xml.rpc.Call; import javax.xml.rpc.Service; import javax.xml.namespace.QName; public class AddFunctionClient { public static void main(String [] args) { try { String endpoint = "http://localhost:8080/axis/AddFunction.jws"; Service service = new Service(); Call call = (Call) service.createCall(); call.setOperationName(new QName(endpoint, "addInt")); call.setTargetEndpointAddress( new java.net.URL(endpoint) ); Integer ret = (Integer)call.invoke(new Object[]{new Integer(5), new Integer(6)}); System.out.println("addInt(5, 6) = " + ret); } catch (Exception e) { System.err.println("Execution failed. Exception: " + e); } } }

  25. Compiling and Running the DII Client

  26. AddFunctionClient – using Dynamic Proxy // File: lesson1\client\dproxy\AddFunctionClient.java, edited for presentation import javax.xml.namespace.QName; import javax.xml.rpc.*; public class AddFunctionClient { public static void main(String [] args) { try { String wsdlUrl = "http://localhost:8080/axis/AddFunction.jws?wsdl"; String nameSpaceUri = "http://localhost:8080/axis/AddFunction.jws"; String serviceName = "AddFunctionService"; String portName = "AddFunction"; ServiceFactory serviceFactory = ServiceFactory.newInstance(); Service afs = serviceFactory.createService(new java.net.URL(wsdlUrl), new QName(nameSpaceUri, serviceName)); AddFunctionServiceIntf afsIntf = (AddFunctionServiceIntf)afs.getPort( new QName(nameSpaceUri, portName), AddFunctionServiceIntf.class); System.out.println("addInt(5, 3) = " + afsIntf.addInt(5, 3)); } catch (Exception e) { System.err.println("Execution failed. Exception: " + e); } } }

  27. Compiling and Running theDynamic Proxy Client

  28. AddFunctionClient – using Generated Stubs Generate the stubs: java org.apache.axis.wsdl.WSDL2Java \ http://localhost:8080/axis/AddFunction.jws?wsdl // File: lesson1\client\stub\AddFunctionClient.java, edited for presentation Import localhost.*; public class AddFunctionClient{ public static void main(String [] args) { try { AddFunctionService afs = new AddFunctionServiceLocator(); AddFunction af = afs.getAddFunction(); System.out.println("addInt(5, 3) = " + af.addInt(5, 3)); } catch (Exception e) { System.err.println("Execution failed. Exception: " + e); } } }

  29. Generating Stubs, Compiling and Running the Stub Client

  30. Deployment Descriptors • JWS deployment is simple, but has limitations: • You must have the source code • Can’t specify custom type mappings, handlers etc. • WSDD (Web Services Deployment Descriptors) allow more flexible deployments • Handlers in request or response path • Custom type mappings • Different transports – HTTP/S, TCP/IP, DIME • Different Dispatchers – Java Class, EJB, Servlet • …

  31. Adding complexitiy to the Simple Example • AddFunction1: A simple Java class with method to add two Complex numbers. Complex is user defined Java class. • Deploy it. • Compile sources • Copy .class files. • Write deployment descriptor • Run AdminClient. • Examine its WSDL description. Point your browser to http://localhost:8080/axis/services/AddFunction1Service?wsdl // File: Complex.java public class Complex { public Complex(){} public double getR(){ … } public void setR(double r){ … } … public Complex add(Complex c){ … } // File: AddFunction1.java public class AddFunction1 { public Complex addComplex (Complex a, Complex b){ return a.add(b); } }

  32. The Deployment Descriptor // File: lesson2\service\deploy.wsdd <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <handler name="print" type="java:LogHandler"/> <service name="AddFunction1Service" provider="java:RPC"> <requestFlow> <handler type="print"/> </requestFlow> <parameter name="className" value="AddFunction1"/> <parameter name="allowedMethods" value="*"/> <beanMapping qname="myNS:Complex" xmlns:myNS="urn:BeanService" languageSpecificType="java:Complex"/> </service> </deployment> Note: (1) xmlns:java (2) A handler in the request path (3) Dispatch to RPC provider (4) Bean type mapping

  33. Deploying the Service

  34. AddFunction1Client – using Generated Stubs Generate the stubs: java org.apache.axis.wsdlWSDL2Java \ http://localhost:8080/axis/services/AddFunction1Service?wsdl // File: lesson2\client\stub\AddFunction1Client.java, edited import localhost.*; import BeanService.*; public class AddFunction1Client { public static void main(String [] args) throws Exception { Complex a = new Complex(); Complex b = new Complex(); a.setR(10.0); a.setI(5.0); b.setR(3.0); b.setI(2.0); AddFunction1Service afs = new AddFunction1ServiceLocator(); AddFunction1 af = afs.getAddFunction1Service(); Complex ret = af.addComplex(a, b); System.out.println("addComplex(a + b) = (" + ret.getR() + ", " + ret.getI() + ")"); } } Generated class

  35. Running the Client

  36. Additional (Advanced!) Features • SOAP with Attachments • Custom type mappings (Pluggable Serializers) • One-way invocations • Document exchange • Dispatch to EJBs • HTTPS transport and mutual authentication • Username and password based authentication • …

  37. Where to find more information? • Apache Axis Home: http://xml.apache.org/axis • Sun’s Web Services Developer Pack Home: http://java.sun.com/webservices/webservicespack.html • W3C’s Web Services Activity Home Page: http://www.w3.org/2002/ws/ • My Home Page: http://www.pankaj-k.net

  38. Thank You

More Related