O XFire é a próxima geração de
frameworks SOAP com um modelo de mensagens leves usado para integrar
mensagens SOAP via STAX. Ele tem uma integração muito boa com o Spring Framework. Vou mostrar um exemplo de como fazer isso.
O primeiro passo é definir uma interface. Neste exemplo, vou definir a interface hora.
package org.diegopaheco.springxfire.model;<br />import javax.jws.WebService;<br /><br />@WebService<br />public interface Hora {<br /> public String getDateTime();<br />}Como vocês devem ter percebido eu só usei a annotation @WebService no XFire.
Agora, vamos criar um serviço que implementa essa interface.
package org.diegopaheco.springxfire.model;<br /><br />import java.util.Date;<br /><br />import javax.jws.WebService;<br /><br />@WebService(serviceName = "HoraService", endpointInterface = "org.diegopaheco.springxfire.model.Hora")<br />public class HoraImpl implements Hora {<br /><br /> @SuppressWarnings("deprecation")<br /> public String getDateTime() { <br /> return new Date().toLocaleString();<br /> }<br /><br />}Aqui temos a implementação da interface Hora e uma outra annotation: @WebService(serviceName
= “HoraService”, endpointInterface =
“org.diegopaheco.springxfire.model.Hora”) que define o nome do
Servilo(HoraService). Poderia ser qualquer outro e qual a interface
desse serviço, nesse caso: org.diegopaheco.springxfire.model.Hora.
Agora vamos aos arquivos de configurações.
Existe um arquivo “padrão” que é o xfire-servlet.xml.
<?xml version="1.0" encoding="UTF-8"?><br /><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><br /><beans><br /><br /> <bean id="webAnnotations" <br /> class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations"<br /> /><br /><br /> <bean id="handlerMapping" class="org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping"><br /> <property name="typeMappingRegistry"><br /> <ref bean="xfire.typeMappingRegistry"/><br /> </property><br /> <property name="xfire"><br /> <ref bean="xfire"/><br /> </property><br /> <property name="webAnnotations"><br /> <ref bean="webAnnotations"/><br /> </property><br /> </bean><br /><br /> <bean <br /> class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"<br /> > <br /> <property name="urlMap"> <br /> <map> <br /> <entry key="/"><br /> <ref bean="handlerMapping"/><br /> </entry><br /> </map><br /> </property><br /> </bean><br /><br /> <import resource="classpath:org/codehaus/xfire/spring/xfire.xml"/> <br /><br /></beans>No web.xml declaramos um servlet do XFire + o listener padrão do Spring.
<?xml version="1.0" encoding="UTF-8"?><br /><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><br /><br /> <context-param><br /> <param-name>contextConfigLocation</param-name><br /> <param-value><br /> /WEB-INF/applicationContext.xml,<br /> /WEB-INF/xfire-servlet.xml<br /> </param-value><br /> </context-param><br /><br /> <listener><br /> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class><br /> </listener><br /><br /> <!--<br /> <servlet><br /> <servlet-name>context</servlet-name><br /> <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class><br /> <load-on-startup>1</load-on-startup><br /> </servlet><br /> --><br /><br /> <servlet><br /> <servlet-name>XFireServlet</servlet-name><br /> <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class><br /> </servlet><br /><br /> <servlet-mapping><br /> <servlet-name>XFireServlet</servlet-name><br /> <url-pattern>/servlet/XFireServlet/*</url-pattern><br /> </servlet-mapping><br /><br /> <servlet-mapping><br /> <servlet-name>XFireServlet</servlet-name><br /> <url-pattern>/services/*</url-pattern><br /> </servlet-mapping><br /><br /></web-app>E, finalmente, o applicationContext.xml do Spring, onde definimos os beans do Spring.
<?xml version="1.0" encoding="UTF-8"?><br /><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><br /><beans><br /> <bean id="annotatedHora" <br /> class="org.diegopaheco.springxfire.model.HoraImpl"<br /> /> <br /><br /></beans>Para
podermos expor o service do spring com o XFire são necessários annotations + um serviço implementado + a definição do serviço como um
spring bean.
Agora um programa de teste(client)
package org.diegopaheco.springxfire.test;<br /><br />import java.net.MalformedURLException;<br /><br />import org.codehaus.xfire.annotations.AnnotationServiceFactory;<br />import org.codehaus.xfire.client.XFireProxyFactory;<br />import org.codehaus.xfire.service.Service;<br />import org.diegopaheco.springxfire.model.Hora;<br />import org.diegopaheco.springxfire.model.HoraImpl;<br /><br />public class TestRunnerHora {<br /><br /> public static void main(String[] args) {<br /> Service serviceModel = new AnnotationServiceFactory()<br /> .create(HoraImpl.class);<br /><br /> try {<br /> Hora service = (Hora) new XFireProxyFactory().create(<br /> serviceModel,<br /> "http://localhost:8080/Spring-Xfire/services/HoraService");<br /><br /> System.out.println("DateTime from web-service: " + service.getDateTime());<br /><br /><br /> } catch (MalformedURLException e) {<br /> e.printStackTrace();<br /> }<br /><br /> }<br /><br />}Por hoje é só!







