Publicando um web service JAX-WS + Spring MVC 3
28 Aug 2010Em continuação aos posts Guia prático do QuickBooks Web Connector com Java e SpringSource Tools Suite – E não é que é bom, vou apresentar uma forma fácil de integrar os Web Services gerados com o wsimport com o Spring MVC 3, criando um projeto do ZERO, utilizando o template “Spring MVC Project” do SpringSource Tools Suite.
##Primeiro passo - Criando um projeto Spring MVC
File -> New -> Other … -> SpringSource Tools Suite -> Spring Template Project -> Spring MVC Project
##Segundo passo - Criando um Web Services com wsimport
Para criar o Web Service basta acessar o diretório src/main/java e executar o wsimport, conforme o post Guia prático do QuickBooks Web Connector com Java.
cd /Users/pablo/workspace/JavaQuickBooksWebConnector/src/
wsimport http://developer.intuit.com/uploadedFiles/Support/QBWebConnectorSvc.wsdl -s . -p com.cantero.quickbooks.ws
##Terceiro passo - Criando uma classe de implementação
File -> New -> Class
Vamos criar uma nova classe para implementar a interface QBWebConnectorSvcSoap criada anteriormente pelo wsimport. Lembre-se de atualizar (F5) o Eclipse após o wsimport, para ele carregar as classes e interfaces recém geradas pelo wsimport por fora do Eclipse.
Após criada a classe basta adicionar as anotações JAX-WS.
package com.cantero.teste_ws.ws;
import javax.jws.WebService;
@WebService(serviceName = "QBWebConnectorSvcSoapImpl",
endpointInterface = "com.cantero.teste_ws.ws.QBWebConnectorSvcSoap")
public class QBWebConnectorSvcSoapImpl implements QBWebConnectorSvcSoap {
// ...
}
##Quarto passo - Publicando o Web Service
Adicionando as definições do Web Service gerado no arquivo app-config.xml gerado pelo template Spring MVC Project.
<bean>
<property name="baseAddress" value="http://192.168.0.137:9801/" />
</bean>
<bean id="QBWebConnectorSvcSoapImpl"
class="com.cantero.teste_ws.ws.QBWebConnectorSvcSoapImpl" />
##Quinta passo - Acessando seu Web Service
Se tudo deu certo após iniciar o seu servidor seu Web Service estará disponível na url abaixo.
192.168.0.137:9801/QBWebConnectorSvcSoapImpl?wsdl
##Considereções
Existem outras formas para integrar Web Services com Spring, algumas delas estão disponíveis na própria documentação do Spring, que foi da onde eu me baseie para criar esse post.
A integração com SimpleJaxWsServiceExporter é semelhante ao EndPoint.publish disponível no Java SE.
public class Main {
public static void main(String[] args) {
Endpoint.publish("http://192.168.0.137:9801/QBWebConnectorSvcSoapImpl",
new QBWebConnectorSvcSoapImpl());
}
}
Fiz um exemplo com o EndPoint.publish no post Guia prático do QuickBooks Web Connector com Java.
Tem uma thread no forum do SpringSource que questiona se utilizar o SimpleJaxWsServiceExporter pode acarretar em algum problema performance.
##Principais referências