Web Services utilizando JAX-WS

Propaganda
Web Services
utilizando JAX-WS
JAX-WS
Facilitar o uso da API JAX-RPC e do
modelo de implantação
| Anotações baseados em JSR-181
| Exemplo Básico:
|
z
Anotações:
•
•
•
•
@WebService
@WebMethod
@WebParam
@WebResult
Exemplo com Anotações
@WebService(name = "TravelAgent", serviceName="TravelAgentService")
@Stateless
public class TravelAgentBean implements TravelAgentRemote
{
@PersistenceContext(unitName="titan") private EntityManager manager;
@WebMethod
public void createCabin(@WebParam(name = "Cabin") Cabin cabin )
{ manager.persist(cabin); }
@WebMethod
@WebResult(name = "Cabin“)
public Cabin findCabin(@WebParam(name = "ID“) int pKey )
{ return manager.find(Cabin.class, pKey);}
}
A anotação WebService
|
Deve ser colocada na classe de
implementação de bean de sessão sem
informação de estado (ou POJO)
|
@WebService(name,wsdlLocation,endpointInterface,
portName)
z
z
z
z
name: nome do serviço Web quando mapeado para WSDL.
Assume como padrão o nome da classe Java ou interface.
wsdlLocation: define a url do documento wsdl.
endpointInterface: externaliza o contrato do serviço Web na
forma de uma interface Web.
portName: porta WSDL utilizada.
A anotação WebMethod
|
Métodos anotados com @WebMethod estarão
disponíveis para o serviço Web.
|
Se a classe for anotada com @WebService e
nenhum método com @WebMethod, todos os
métodos estarão disponíveis no Web Service.
|
Boa prática de projeto para reduzir dependências
entre módulos.
|
Atributo operationName é utilizado para definir a
operação WSDL que o método anotado implementa.
Se não especificado, o nome do método é utilizado.
A anotação WebParam
|
|
|
Permite controlar o WSDL gerado para um
método Java sinalizado com @WebMethod
Se o estilo for RPC/LITERAL(wsdl:part), o
atributo name() configurará o nome wsdl:part
Exemplo (produz um wsdl):
@WebMethod(OperationName = “CheckStatus”)
public int checkStatus(
@WebParam(name = “ReservationID”) String reservationID
@WebParam(name = “CustomerID”, mode =
WebParam.Mode.OUT) javax.ws.Holder<Integer>
customerID){
customerID.value = getCustomerID(reservationID);
Return status;
}
A anotação WebResult
|
Fornece a mesma funcionalidade pra valores de
retorno que @WebParam oferece para
parâmetros de métodos
Exemplo de WS – Serviço
package teste;
public class Testando {
int cont;
public Testando(){
cont = 0;
}
public int TestandoOp(String param1)
{
return (param1.length());
}
public int TestandoOp1()
{
return (++cont);
}
}
Exemplo de WS – Cliente
package client;
public class TesteCliente {
private Testando proxy;
public static void main(String[] args) {
TesteCliente client = new TesteCliente();
client.doTest(args);
}
public void doTest(String[] args) {
proxy = new Testando();
int ret = proxy.testandoOp1();
System.out.println("Resultado testandoOp1: "+ret);
ret = proxy.testandoOp("1234567890");
System.out.println("Resultado testandoOp: "+ret);
ret = proxy.testandoOp1();
System.out.println("Resultado testandoOp1: "+ret);
}
}
Exemplo de WS – Serviço*
package teste;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
@WebService( name = "Testando", serviceName = "Teste")
public class Testando {
int cont;
public Testando(){
cont = 0;
}
@WebMethod( operationName = "TestandoOp")
public int TestandoOp( @WebParam( name = "param1") String param1)
{
return (param1.length());
}
@WebMethod( operationName = "TestandoOp1")
public int TestandoOp1()
{
return (++cont);
}
}
Exemplo de WS - WSDL
<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jaxws.dev.java.net. RI's version is JAX-WS RI 2.1.3.3-hudson-757-SNAPSHOT. --><!-Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.3.3hudson-757-SNAPSHOT. --><definitions xmlns:wsu="http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://teste/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/"
targetNamespace="http://teste/" name="Teste">
<types>
<xsd:schema>
<xsd:import namespace="http://teste/"
schemaLocation="http://localhost:8080/Testando/Teste?xsd=1"></xsd:import>
</xsd:schema>
</types>
<message name="TestandoOp">
<part name="parameters" element="tns:TestandoOp"></part>
</message>
<message name="TestandoOpResponse">
<part name="parameters" element="tns:TestandoOpResponse"></part>
</message>
Exemplo de WS - WSDL
<portType name="Testando">
<operation name="TestandoOp">
<input message="tns:TestandoOp"></input>
<output message="tns:TestandoOpResponse"></output>
</operation>
</portType>
<binding name="TestandoPortBinding" type="tns:Testando">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"
style="document"></soap:binding>
<operation name="TestandoOp">
<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal"></soap:body>
</input>
<output> <soap:body use="literal"></soap:body>
</output>
</operation>
</binding>
<service name="Teste">
<port name="TestandoPort" binding="tns:TestandoPortBinding">
<soap:address location="http://localhost:8080/Testando/Teste"></soap:address>
</port>
</service>
</definitions>
Exemplo de WS - XSD
<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jaxws.dev.java.net. RI's version is JAX-WS RI 2.1.3.3-hudson-757-SNAPSHOT. --><xs:schema
xmlns:tns="http://teste/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"
targetNamespace="http://teste/">
<xs:element name="TestandoOp" type="tns:TestandoOp"></xs:element>
<xs:element name="TestandoOpResponse" type="tns:TestandoOpResponse"></xs:element>
<xs:complexType name="TestandoOp">
<xs:sequence>
<xs:element name="param1" type="xs:string" minOccurs="0"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TestandoOpResponse">
<xs:sequence>
<xs:element name="return" type="xs:int"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
Exemplo de WS – Cliente*
package client;
import usingteste.Testando; import usingteste.Teste;
public class TesteCliente {
private Testando proxy;
private Teste service;
public static void main(String[] args) {
TesteCliente client = new TesteCliente();
client.doTest(args);
}
public void doTest(String[] args) {
try {
service = new Teste();
proxy = service.getTestandoPort();
int ret = proxy.testandoOp1();
System.out.println("Resultado testandoOp1: "+ret);
ret = proxy.testandoOp("1234567890");
System.out.println("Resultado testandoOp: "+ret);
ret = proxy.testandoOp1();
System.out.println("Resultado testandoOp1: "+ret);
} catch(Exception e) { e.printStackTrace(); }
}
}
Download