Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Modulo II WebServices Prof. Ismael H F Santos April 05 Prof. Ismael H. F. Santos - [email protected] 1 Bibliografia April 05 Prof. Ismael H. F. Santos - [email protected] 2 Ementa WebServices em Java April 05 Prof. Ismael H. F. Santos - [email protected] 3 SOA WebServices Java April 05 Prof. Ismael H. F. Santos - [email protected] 4 WebServices com Java A plataforma J2EE oferece as seguintes APIs: Document-oriented Java API for XML Processing (JAXP) processes XML documents using various parsers Java Architecture for XML Binding (JAXB) processes XML documents using schema-derived JavaBeans component classes Procedure-oriented April 05 Java API for XML-based RPC (JAX-RPC) sends SOAP method calls to remote parties over the Internet and receives the results Java API for XML Messaging (JAXM) sends SOAP messages over the Internet in a standard way Java API for XML Registries (JAXR) provides a standard way toaccess business registries and share information Prof. Ismael H. F. Santos - [email protected] 5 WebServices com Java A tecnologia Java oferece tambem as seguintes ferramentas: Java Web Services Developer Pack (Java WSDP) SOAP with Attachments API for Java (SAAJ) Com estas APIs você não precisa saber como criar o SOAP. Você só precisa saber utilizar as classes da API para criar e acessar os Web Services. April 05 Prof. Ismael H. F. Santos - [email protected] 6 State of the Art April 05 UDDI WSDL SOAP URI HTML HTTP Prof. Ismael H. F. Santos - [email protected] 7 Web Service : How They Work? SOAP Messages Requestor (http transport) SOAP Client Web Service Provider Endpoint Components required April 05 Software which needs to be exposed as a Web service A SOAP Server (Apache Axis, SOAP::Lite, etc.) HTTP Server (if HTTP is used as the transport level protocol) SOAP Client (Apache Axis, SOAP::Lite etc.) Prof. Ismael H. F. Santos - [email protected] 8 Simple Web Service Invocation Service Requestor Manual Web Service Lookup 2 3 HTTP GET WSDL File Remote Web Service Repository (Web Sites) 1 Write Client Code Remote Web service 4 SOAP Request Invoke Web Service 5 SOAP Response Publish Web Service WSDL - Web Service Description SOAP - Web Service Message Protocol April 05 Prof. Ismael H. F. Santos - [email protected] 9 Web Service Description Why describe Web services? A service requestor needs to analyze a service for his requirements A Web service needs to provide the following information the operations it supports the transport and messaging protocols on which it supports those operations the network endpoint of the Web service Languages such as WSDL, DAML-S, RDF can be used for describing Web services WSDL – describes the syntactic information of a service DAML-S and RDF – describe the syntactic as well as the semantic information From S. Chandrasekaran’s Talk April 05 Prof. Ismael H. F. Santos - [email protected] 10 Web Service Description (WSDL) Abstract Description Concrete Description April 05 Prof. Ismael H. F. Santos - [email protected] 11 SOA WebService Example April 05 Prof. Ismael H. F. Santos - [email protected] 12 A Web Service example in Java HTTP Server Servlet engine (e.g. Apache Tomcat) Any class Any class processing Any class processing Any class the incoming processing the incoming processing requests the incoming requests the incoming (“business logic” requests (“business logic” requests (“business logic” (“business logic” April 05 SOAP-aware Servlet (e.g. Apache Axis) Prof. Ismael H. F. Santos - [email protected] Sending requests, getting results 13 Usual principles of Java toolkits Writing server is easier than writing clients (but only regarding the toolkit, not the business logic) Servers may be written independently on the used toolkit Always test interoperability with a non-Java client (because of data serialization and de-serialization) Steps: write your service implementation make all your classes available to the toolkit deploy your service (usually done just once) restart the whole servlet engine test it with a client request April 05 Prof. Ismael H. F. Santos - [email protected] 14 Java SOAP Toolkits Apache SOAP (was IBM’s SOAP4J) Apache Axis (a follow-on to the Apache SOAP) http://ws.apache.org/axis/ …and many others April 05 Prof. Ismael H. F. Santos - [email protected] 15 hello/HelloWorld.java package hello; public interface HelloWorld { String getHelloMessage(); void setHelloMessage (String newHello); } hello/HelloWorldService.java package hello; public class HelloWorldService implements HelloWorld { String message = "Hello, world!"; public String getHelloMessage() { return message; } public void setHelloMessage (String newMessage) { message = newMessage; } } April 05 Prof. Ismael H. F. Santos - [email protected] 16 HelloWorldClient.java import org.apache.axis.client.*; public class HelloWorldClient { public static void main (String [] args) { try { // prepare the call (the same for all called methods) Call call = (Call) new Service().createCall(); call.setTargetEndpointAddress (new java.net.URL( "http://localhost:8080/axis/services/Hello")); // call "get message" if (args.length == 0) { call.setOperationName ("getHelloMessage"); String result = (String)call.invoke( new Object[]{} ); System.out.println (result); System.exit (0); } April 05 Prof. Ismael H. F. Santos - [email protected] 17 HelloWorldClient.java // call "set message" and afterwards "get message" call.setMaintainSession (true); // TRY also without // this line... call.setOperationName ("setHelloMessage"); call.invoke ( new Object [] { args[0] } ); call.setOperationName ("getHelloMessage"); System.out.println (call.invoke ( new Object [] {} )); } catch (Exception e) { System.err.println ("ERROR:\n" + e.toString()); } } } April 05 Prof. Ismael H. F. Santos - [email protected] 18 Generated for HelloWorld 1. Make an instance of this HelloWorldService implements 2. Use it to make an instance of this HelloWorldServiceLocator getHello() HelloWorld 3. Call methods on this proxy object implements HelloSoapBindingStub April 05 Prof. Ismael H. F. Santos - [email protected] 19 HelloWorldClientFromStubs.java public class HelloWorldClientFromStubs { public static void main (String [] args) { try { // prepare the calls (the same for all called methods) hello.generated.HelloWorldService service = new hello.generated.HelloWorldServiceLocator(); hello.generated.HelloWorld myHelloProxy = service.getHello(); // call "get message" if (args.length == 0) { String result = myHelloProxy.getHelloMessage() System.out.println (result); System.exit (0); } // call "set message" and afterwards "get message” myHelloProxy.setHelloMessage (args[0]); System.out.println (myHelloProxy.getHelloMessage()); } catch (Exception e) { System.err.println ("ERROR:\n" + e.toString()); } } } April 05 Prof. Ismael H. F. Santos - [email protected] 20 Java <=> XML Data Mapping How Java objects are converted to/from XML data (in order to be able to be put into SOAP messages) Important especially for the non-basic data types It’s easier if your non-basic data types are Java Beans (having set/get methods for members) April 05 Prof. Ismael H. F. Santos - [email protected] 21 Examples (Java Client) URL endpointURL = new URL(endpoint); Call call = new Call(); call.setSOAPTransport(m_httpconn); call.setTargetObjectURI("MessageService"); call.setMethodName("setMessage"); call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); April 05 Prof. Ismael H. F. Santos - [email protected] 22 Examples (Java Client) Vector params = new Vector(); params.addElement( new Parameter("name", java.lang.String.class, name, null)); params.addElement( new Parameter("colour", java.lang.String.class, colour, null)); call.setParams(params); Response response = call.invoke(endpointURL, ""); April 05 Prof. Ismael H. F. Santos - [email protected] 23 A Web Service example in Perl #!/usr/bin/perl -w -- Perl – use SOAP::Transport::HTTP; SOAP::Transport::HTTP::CGI -> dispatch_to('HelloPerl') -> handle; This is a cgi-bin script package HelloPerl; use strict; This is a module implementing use vars qw( $Message ); the “business logic” $Message = 'Hello, here is Perl.'; sub getHelloMessage { $Message; } sub setHelloMessage { $Message = shift; } 1; #!/usr/bin/perl –w use SOAP::Lite on_fault => sub {…}; print SOAP::Lite -> uri ('HelloPerl') -> proxy ('http://localhost/cgi-bin/helloserver.cgi') -> getHelloMessage -> result; April 05 Prof. Ismael H. F. Santos - [email protected] This is a client 24 SOAP::Lite a collection of (many) modules but they are loaded automatically when needed supports SOAP 1.1 specification all methods can be used for both setting and retrieving values: if you provide no parameters, you will get current value, and if parameters are provided, a new value will be assigned to the object and the method in question will return the current object (if not stated otherwise) which is is suitable for stacking these calls like: $lite = SOAP::Lite -> uri(’openBQS') -> proxy('http://industry.ebi.ac.uk/soap/openBQS'); April 05 Prof. Ismael H. F. Santos - [email protected] 25 Using “wsdl” - directly getting “.wsdl” file by using its URL then, you do not need to worry about autotyping #!/usr/bin/perl -w use SOAP::Lite on_fault => sub {…}; print SOAP::Lite -> service ('file:/home/senger/ws-ws/perl/Hello.wsdl') -> setHelloMessage (123); #!/usr/bin/perl -w use SOAP::Lite on_fault => sub {…}; my $service = SOAP::Lite -> service ('file:./Hello.wsdl'); $service->setHelloMessage ($ARGV[0] or "Hello!!!"); print $service->getHelloMessage, "\n"; April 05 Prof. Ismael H. F. Santos - [email protected] 26