alo - Tecgraf

judgedrunkshipΔιακομιστές

17 Νοε 2013 (πριν από 3 χρόνια και 6 μήνες)

122 εμφανίσεις



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
1

Modulo II

WebServices

Prof. Ismael H F Santos




April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
2


Bibliografia



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
3

Ementa


WebServices em Java



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
4

WebServices

Java

SOA



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
5

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


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



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
6

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
-

ismael@tecgraf.puc
-
rio.br
7

URI

HTML

HTTP

UDDI

WSDL

SOAP

State of the Art



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
8

Web Service : How They Work?


Components required


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.)

(http transport)

Requestor

SOAP Messages

Web Service Provider

Endpoint

SOAP Client



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
9

Remote

Web Service

Repository

(Web Sites)

Write

Client Code

Service Requestor

Invoke Web

Service

Manual

Web Service

Lookup

SOAP Request

SOAP Response

WSDL

-

Web Service Description

SOAP

-

Web Service Message Protocol

WSDL File

Remote

Web service

Publish Web

Service

1

2

3

4

5

HTTP GET

Simple Web Service Invocation



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
10

From S. Chandrasekaran’s Talk


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



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
11

Web Service Description (WSDL)

Abstract

Description

Concrete

Description



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
12

WebService

Example

SOA



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
13

A Web Service example in Java

SOAP
-
aware

Servlet

(e.g. Apache Axis)

Any class

processing

the incoming

requests

(“business logic”

Any class

processing

the incoming

requests

(“business logic”

Any class

processing

the incoming

requests

(“business logic”

Any class

processing

the incoming

requests

(“business logic”

HTTP Server

Servlet engine (e.g. Apache Tomcat)

Sending
requests,
getting
results



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
14

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
-

ismael@tecgraf.puc
-
rio.br
15

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
-

ismael@tecgraf.puc
-
rio.br
16

package hello;

public interface
HelloWorld

{


String getHelloMessage();


void setHelloMessage (String newHello);

}

hello/HelloWorld.java

package hello;

public class
HelloWorldService

implements
HelloWorld

{


String message = "Hello, world!";


public String getHelloMessage() {


return message;


}


public void setHelloMessage (String newMessage) {


message = newMessage;


}

}

hello/HelloWorldService.java



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
17

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);


}


HelloWorldClient.java



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
18



// 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());


}


}

}

HelloWorldClient.java



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
19

Generated for HelloWorld

HelloWorldServiceLocator

implements

HelloWorldService

getHello()

1. Make an instance of this

3. Call methods on this proxy object

HelloSoapBindingStub

implements

HelloWorld

2. Use it to make an instance of this



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
20

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());


}


}

}


HelloWorldClientFromStubs.java



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
21

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
-

ismael@tecgraf.puc
-
rio.br
22

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
-

ismael@tecgraf.puc
-
rio.br
23

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
-

ismael@tecgraf.puc
-
rio.br
24

A Web Service example in Perl

This is a module implementing

the “business logic”

package HelloPerl;

use strict;

use vars qw( $Message );

$Message = 'Hello, here is Perl.';

sub getHelloMessage { $Message; }

sub setHelloMessage { $Message = shift; }

1;

This is a cgi
-
bin

script

#!/usr/bin/perl
-
w
--

Perl


use SOAP::Transport::HTTP;

SOAP::Transport::HTTP::CGI


-
> dispatch_to('HelloPerl')


-
> handle;

#!/usr/bin/perl

w

use SOAP::Lite


on_fault => sub {…};

print SOAP::Lite


-
> uri ('HelloPerl')


-
> proxy ('http://localhost/cgi
-
bin/helloserver.cgi')


-
> getHelloMessage


-
> result;

This is a client



April 05


Prof. Ismael H. F. Santos
-

ismael@tecgraf.puc
-
rio.br
25

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
-

ismael@tecgraf.puc
-
rio.br
26

Using “wsdl”
-

directly

#!/usr/bin/perl
-
w


use SOAP::Lite on_fault => sub {…};

print SOAP::Lite


-
> service ('file:/home/senger/ws
-
ws/perl/Hello.wsdl')


-
> setHelloMessage (123);



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 {…};

my $service = SOAP::Lite
-
> service ('file:./Hello.wsdl');

$service
-
>setHelloMessage ($ARGV[0] or "Hello!!!");

print $service
-
>getHelloMessage, "
\
n";