Web Services x Hibernate

Transcrição

Web Services x Hibernate
Web Services x Hibernate
Tópico
„ Estudar como disponibilizar um serviço WEB (Web Service) que
acesse um banco de dados sem disponibilizar o código fonte no
servidor de aplicação e não divulgar a senha, usuário de código
de acesso ao Sistema Gerenciador de Banco de Dados.
„ A forma apresentada até o momento de disponibilizar o serviço
Web obriga deixar no servidor o código fonte.
„ Não foi apresentada a forma de deixar os códigos fonte dentro de
um pacote no servidor WEB.
Primeiro Passo
„ Desenvolver a aplicação que acessa o banco de dados e
acomoda as regras de negócio.
package calc;
public class CalculadoraImpl
{
public Float operacao (String oper, Float x, Float y)
{
if (oper.compareTo("soma")==0)
return x+y ;
else if (oper.compareTo("-")==0)
return x-y ;
else if (oper.compareTo("*")==0)
return x*y ;
else if (oper.compareTo("/")==0)
return (Float) x/y ;
else
return new Float(-99.99) ;
}
}
Interface para o serviço
„ Esta classe faz a chamada para a classe que executa as regras
de negócio.
„ Publica a interface para o usuário.
package calc;
public interface Calculadora
{
public Float operacao (String oper, Float x, Float y) ;
}
Java2WSDL
„ Gerar o arquivo WSDL (Linguagem Descritora do Serviço Web)
„ É necessário compilar os código fontes (javac)
+ javac calc\*.java
„ O comando Java2WSDL gera um arquivo padrão WSDL que
elabora a interface.
„ É necessário suprir o programa para que ele possa construir a
interface de forma adequada.
+ Nome do arquivo WSDL (calcula.wsdl)
+ URL do serivço WEB http://localhost:8080/axis/services/calculadora
+ Namespace do WSDL (urn:calculadora)
+ Mapa para o package Java = namespace(calc=urn:calculadora)
+ Classe completa (calc.Calculadora)
java org.apache.axis.wsdl.Java2WSDL -o calcula.wsdl l"http://localhost:8080/axis/services/calculadora" -n
urn:calculadora -p"calculadora" urn:calculadora calc.Calculadora
Java2WSDL
„ Configurar Ambiente (setclasspath.cmd)
@rem xml-axis must be a subdirectory of MAIN_DIR
echo off
set MAIN_DIR=c:\apl\axis-1_4
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\axis.jar
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\wsdl4j-1.5.1.jar
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\jaxrpc.jar
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\activation.jar
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\axis-ant.jar
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\commons-discovery0.2.jar
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\commons-logging1.0.4.jar
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\jaxrpc.jar
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\log4j-1.2.8.jar
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\log4j.properties
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\mail.jar
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\saaj.jar
set CLASSPATH=%CLASSPATH%;%MAIN_DIR%\lib\xmlsec-1.3.0.jar
WSDL2Java
„ Gera o código para a interface no serivdor a fim de facilitar o
acesso dos clientes.
java org.apache.axis.wsdl.WSDL2Java -o . -d Session -s -p calc.ws
calcula.wsdl
CalculadoraSoapBindingImpl
„ Código que deve ser ajustado para acessar a Calculadora
package calc.ws;
import calc.CalculadoraImpl;
public class CalculadoraSoapBindingImpl implements
calculadora.ws.Calculadora{
public java.lang.Float operacao(java.lang.String in0,
java.lang.Float in1, java.lang.Float in2) throws
java.rmi.RemoteException {
return null;
}
}
package calc.ws;
import calc.CalculadoraImpl;
public class CalculadoraSoapBindingImpl implements
calc.ws.Calculadora{
CalculadoraImpl calc = new CalculadoraImpl();
public Float operacao (String oper, Float x, Float
y) throws java.rmi.RemoteException {
return calc.operacao(oper, x, y);
}
}
Deploy
„ Disponibilizar o serviço no Apache AXIS
„ Compilar do código fonte
+ javac calc\ws\*.java
„ Empacotar as classes
+ jar cvf calculadora.jar calc/*.class calc/ws/*.class
„ Copiar o pacote para servidor TOMCAT
+ copy calculadora.jar "c:\Programme\Apache Software
Foundation\Tomcat 6.0\webapps\axis\WEB-INF\lib"
„ Deploy
+ java org.apache.axis.client.AdminClient deploy.wsdd
Cliente
„ Não precisa reescrever o cliente.
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class ClienteEstadoMunicipio {
public static void main(String [] args)
throws Exception {
String endpoint =
"http://localhost:8080/axis/services/EstadoMunicipio";
Service service = new Service();
Call
call
= (Call) service.createCall();
call.setTargetEndpointAddress
( new java.net.URL(endpoint) );
call.setOperationName( "comIbge" );
String ret =
(String) call.invoke(new Object[]{"130020"});
System.out.println("Resposta: " + ret);
}
}
Cliente PHP
<?php
include("lib/nusoap.php");
soapclient("http://localhost:8080/axis/Alo.jws?wsdl",true);
$soapclient = new
soapclient("http://localhost:8080/axis/services/EstadoMunic
ipio?wsdl",true);
$proxy = $soapclient->getProxy();
$result = $proxy->comIbge("130020");
print_r($result);
?>