Download presentation
Presentation is loading. Please wait.
Published byGuttorm Thorbjørnsen Modified over 6 years ago
1
Web Services with JAX-RPC and Apache Axis
Tuesday, September 18, 2018 Web Services with JAX-RPC and Apache Axis Sep. 18, 2002 Pankaj Kumar Software Architect, Web Services Management Organization, Hewlett Packard Co.
2
Session Objectives Web Services in Perspective
Tuesday, September 18, 2018 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. Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
3
Tuesday, September 18, 2018 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 ( Frequent speaker at developer conferences Authoring a book on J2EE and Web Services Security Architect with HP Web Services Mgmt. Operation Home Page: Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
4
Outline of the Session Introduction to Web Services
Tuesday, September 18, 2018 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 Bulk of the session is focussed on working with Apache Axis. JAX-RPC is covered as part of discussion on Apache Axis. Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
5
Web Services Infrastructure
Language and platform independent infrastructure for loosely-coupled, inter-operable, app2app communication over the Internet. Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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. Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
7
Early (Internet) Technologies
SMTP/MIME 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 Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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. Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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, ... Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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. Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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 Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
12
SOAP In One Slide XML based protocol for exchange of information
SOAP1.1 Message Structure 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. SOAP Envelope Header Entries [Header Element] Body Element [Fault Element] Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
13
WSDL in One Slide A WSDL document describes
Structure 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 WSDL Document [Types] {Messages} {Port Types} {Bindings} {Services} Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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) Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
15
SAAJ Object Model SOAPMessage SOAPPart AttachmentPart Node SOAPElement
Tuesday, September 18, 2018 SAAJ Object Model SOAPMessage SOAPPart AttachmentPart Node SOAPElement SOAPBody SOAPHeader SOAPBodyElement SOAPHeaderElement SOAPEnvelope SOAPFault SOAPFaultElement * There are some additional Factory classes to create the concrete objects. Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
16
JAX-RPC WSDL/XML to Java Mapping Java to WSDL/XML Mapping
Tuesday, September 18, 2018 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 Java and WSDL/SOAP type systems are very different. dotNet type system is much closer to WSDL/SOAP type system. Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
17
JAX-RPC Physical Architecture
Tuesday, September 18, 2018 JAX-RPC Physical Architecture Transport Protocol (SOAP) Server Side JAX-RPC Runtime System JAX-RPC API Client Side JAX-RPC Stub Service Endpoint WSDL description WSDL<->Java Mapping Service Client Dispatch Container There are some additional Factory classes to create the concrete objects. Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
18
Interoperability and JAX-RPC
Tuesday, September 18, 2018 Interoperability and JAX-RPC WSDL description Vendor prod. <Vendor B> JAX-RPC impl. <Vendor A> J2EE Container <Vendor D> <Vendor C> Client Service There are some additional Factory classes to create the concrete objects. Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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) Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
20
Install & Deploy Apache Axis
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 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. Direcotry Structure: axis-1_0 webapps lib docs samples axis WEB-INF lib classes web.xml …… Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
21
Test the Deployment Point your browser to http://localhost:8080/axis
Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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 // 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: Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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 Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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 = " 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); } Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
25
Compiling and Running the DII Client
Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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 = " String nameSpaceUri = " 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); } Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
27
Compiling and Running the Dynamic Proxy Client
Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
28
AddFunctionClient – using Generated Stubs
Generate the stubs: java org.apache.axis.wsdl.WSDL2Java \ // 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); } Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
29
Generating Stubs, Compiling and Running the Stub Client
Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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 … Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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 // 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); } Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
32
The Deployment Descriptor
// File: lesson2\service\deploy.wsdd <deployment xmlns=" xmlns: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 Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
33
Deploying the Service Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
34
AddFunction1Client – using Generated Stubs
Generate the stubs: java org.apache.axis.wsdlWSDL2Java \ // 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 Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
35
Running the Client Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
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 … Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
37
Where to find more information?
Apache Axis Home: Sun’s Web Services Developer Pack Home: W3C’s Web Services Activity Home Page: My Home Page: Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
38
Thank You Tuesday, September 18, 2018Tuesday, September 18, 2018Tuesday, September 18, 2018
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.