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