Desenvolvendo e Consumindo Web Services no JBoss AS 6.1

Postado em Atualizado em

O JBoss AS 6.1, vem com  o Apache CXF como principal implementação. Então vamos utilizar tecnologia para disponibilizar os serviços através do JBoss.
Inicialmente devemos criar um Dynamic Web Project, no Eclipse e selecionar em Target Runtime o JBoss AS 6.1.

Devemos adicionar a nosso projeto uma Interface que será o ponto de entrada do nosso serviço:


package jbossdivers.ws.services;

import javax.jws.WebMethod;
import javax.jws.WebService;

 @WebService
 public interface CalculaIMCService {

  @WebMethod
  public String caculaIndiceCorporal(int peso, double altura);
}

Agora a interface criada deve ser implementada.

package jbossdivers.ws.services;

import javax.jws.WebService;

@WebService(endpointInterface = "jbossdivers.ws.services.CalculaIMCService", serviceName = "CalculaIMCService")
public class CalculaIMCServiceImpl implements CalculaIMCService {

@Override
public String caculaIndiceCorporal(int peso, double altura) {

/*
Abaixo do peso    Abaixo de 18.4
Peso normal    18.5 - 24.9
Sobrepeso    25.0 - 29.9
Obesidade Grau I    30.0 - 34.9
Obesidade Grau II    35.0 - 39.9
*/
double resultadoIMC = (peso) / (altura * altura);

  if (resultadoIMC > 35) {
       return "Obesidade Grau II - " + "IMC: " + resultadoIMC ;

  } else if (resultadoIMC > 30) {
       return "Obesidade Grau I - " + "IMC: " + resultadoIMC;

  } else if (resultadoIMC > 25) {
       return "Sobrepeso - " + "IMC: " + resultadoIMC;

  } else if (resultadoIMC > 18.5) {
       return "Peso normal - " + "IMC: " + resultadoIMC ;

  } else {
       return "Abaixo do peso normal - " + "IMC: " + resultadoIMC;
  }
 }
}

Agora o serviço deve ser registrado no web.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<servlet>
   <servlet-name>CalculaIMCServiceImpl</servlet-name>
   <servlet-class>jbossdivers.ws.services.CalculaIMCServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>CalculaIMCServiceImpl</servlet-name>
   <url-pattern>/CalculaIMCServiceImpl/*</url-pattern>
</servlet-mapping>

</web-app>

Depois de criar a implementação do serviço  precisamos fornecer o nome da classe e uma  URL no arquivo jbossws-cxf.xml.


<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:beans="http://www.springframework.org/schema/beans" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

<jaxws:endpoint id="CalculaIMCService" address="/CalculaIMCService" implementor="jbossdivers.ws.services.CalculaIMCServiceImpl">
<jaxws:invoker>
<bean class="org.jboss.wsf.stack.cxf.InvokerJSE"/>
</jaxws:invoker>
</jaxws:endpoint>

</beans>

A nossa web service está finalizada, agora o JBoss Deve ser iniciado para podermos visualizar o serviço e torna-lo disponivel.

Vamos consumir esse serviço utilizando um client Apache CXF. A implementação desse client está abaixo:

package jbossdivers.ws.util;

import jbossdivers.ws.services.CalculaIMCService;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class ClientWS {

public static void main(String args[]){

 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

 factory.getInInterceptors().add(new LoggingInInterceptor());
 factory.getOutInterceptors().add(new LoggingOutInterceptor());
 factory.setServiceClass(CalculaIMCService.class);
 factory.setAddress("http://192.168.1.5:8080/MyProjectWS/CalculaIMCServiceImpl");

 CalculaIMCService client = (CalculaIMCService) factory.create();

 System.out.println("Retorno: " + client.caculaIndiceCorporal(100, 1.80D) );

 }

}

O Retorno será: Obesidade Grau I – IMC: 30.864197530864196
Ps: Tenho que ir pra Academia😛
Aqui abaixo  está um client onde pode ser passado um Bean  como Parâmetro e o WSDL em questão.

package ws.client;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class ClientFactory<T> {

 Class<T> klass;

 public ClientFactory(Class<T> klass){
  this.klass = klass;
 }

 @SuppressWarnings("unchecked")
 public T createFactory(String urlService){

   JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
   factory.getInInterceptors().add(new LoggingInInterceptor());
   factory.getOutInterceptors().add(new LoggingOutInterceptor());
   factory.setServiceClass(klass);
   //factory.setUsername(username);
   //factory.setPassword(password);
   factory.setAddress(urlService);
   T client = (T) factory.create();

   return client;
  }
}

Espero que tenha Ajudado!
Abraços!

4 comentários em “Desenvolvendo e Consumindo Web Services no JBoss AS 6.1

    Marco disse:
    4 de maio de 2012 às 17:09

    Em qual diretorio devera ficar o arquivo jbossws-cxf.xml ???

    Fernando disse:
    1 de novembro de 2012 às 10:14

    sabe se no jboss-eap-4.3 funciona?

      Mauricio Magnani respondido:
      1 de novembro de 2012 às 10:42

      Acredito que não pois a Stack do CXF foi adicionada somente no JBoss AS 6. Existem outras opções nessa versão que não me recordo no momento.

      Abs

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s