Publicando um web service JAX-WS + Spring MVC 3

Em 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

static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/remoting.html#remoting-web-services-jaxws-export-standalone