Skip to content


À procura de uma maneira produtiva de trabalhar com web services SOAP

Com a minha mudança de alocação da Globo.com para a Globosat, continuo trabalhando bastante com integração de aplicações, mas agora com um ferramental e paradigmas diferentes.

Na Globo.com eu trabalhei muito com open source, e estava acostumado a montar as aplicações a partir de componentes “crus”, em vez de usar ferramentas sofisticadas. Open source faz parte da cultura da empresa, e tínhamos uma boa liberdade de escolha de tecnologias e arquiteturas.

Como falei algumas vezes no passado, nós migramos boa parte da arquitetura legada com EJBs para serviços REST usando por baixo o Jersey, Spring e Ibatis. A produtividade no desenvolvimento de serviços REST me agrada muito, e mesmo alguém que não conheça muito de serviços REST consegue desenvolver um serviço sem tanto esforço.

Agora vou trabalhar mais com serviços SOAP, mas usando ferramentas muito produtivas, como o Aqualogic ESB e o Workshop, entre outros. Essas ferramentas facilitam muito o trabalho oferecendo Abstrações Opacas. Como ainda estou muito ligado ao trabalho com Open Source, eu venho tentando no meu tempo vago encontrar ferramentas open source com a mesma proposta.

Neste momento estou tentando encontrar a maneira mais produtiva de se trabalhar com web services SOAP usando open source. No passado eu desenvolvi serviços com o XFire, com o Axis 2 e com o JAX-WS, mas achei interessante reavaliar as opções existentes atualmente.

Nos últimos dias eu fiz testes com o Axis 2, com o Apache CXF e com o JAX-WS.

Eu não gosto muito do Axis 2. Você até consegue desenvolver serviços rapidamente com ele, mas ele gera um código tão sujo que é muito triste colocar qualquer coisa em produção com ele, sabendo que você vai ter que manter depois aquele código. Além disso, para utilizá-lo você precisa levar nada menos que 51 jars para sua aplicação, o que transforma qualquer aplicação em um mastodonte. Um outro problema dessa lista massiva de dependências é que a chance de uma aplicação pré-existente ter conflitos de dependências com o Axis é grande.

Na prática, eu só utilizaria o Axis 2 (e mesmo assim com má vontade) para desenvolver serviços se fosse numa estrutura como o WSO2 Web Services Application Server, que é um servidor de aplicações “dedicado” a serviços Axis.

O Apache CXF oferece um “front-end” com JAX-WS (que é o mais recomendado) e um “front-end” alternativo, que usa o Aegis Databinding. Por enquanto olhei apenas o front-end com JAX-WS, mas não vi nenhuma vantagem em utilizar o CXF em vez da implementação de referência presente no Glassfish. Se pintar disposição eu darei uma olhada no front-end com Aegis Databinding, mas por enquanto não tenho grandes expectativas em relação a ele não.

Para finalizar, fiz muitos experimentos com a implementação de referência do JAX-WS, embutido no Glassfish V2. A forma de trabalho que achei mais produtiva nestes meus testes foi desenvolvendo com JAX-WS no Netbeans (utilizei a versão 6.5).

Tentei desenvolver a partir de classes Java, e a partir do WSDL, e esta última me trouxe melhores resultados.A melhor forma que achei foi começar desenhando os schemas XML com o editor do Netbeans:

Criei um Complex Type para cada classe de domínio, e 1 Complex Type para o Request de cada operação e 1 Complex Type para o Response de cada operação. Tendo feito isso, criei depois 1 Element para o Request de cada operação e 1 Element para o Response de cada operação. Com o schema XML criado dessa forma, criei em seguida o WSDL, com o editor do Netbeans também:

Na criação do WSDL, coloquei nas mensagens de Request/Response das operações os Elementos declarados no schema XML anterior. É importante prestar atenção nisso. Usando Elementos nas mensagens, você está criando serviços no modelo Document/Literal. Se você colocar nas mensagens um Complex Type diretamente, em vez de colocar um Elemento, você estará criando um serviço no modelo RPC/Literal. Eu particularmente prefiro Document/Literal, e o código gerado pelo JAX-WS neste modelo me agrada mais.

A implementação do serviço com JAX-WS ficou parecida com isso aqui:

package org.brunopereira.cadastro;
import javax.jws.WebService;
import org.brunopereira.schema.cadastroclientes.CadastroClienteRequestType;
import org.brunopereira.schema.cadastroclientes.CadastroClienteResponseType;
import org.brunopereira.schema.cadastroclientes.Cliente;
import org.brunopereira.wsdl.cadastrocliente.CadastroClientePortType;
 
@WebService(serviceName = "CadastroClienteService", portName = "CadastroClientePort",
endpointInterface = "org.brunopereira.wsdl.cadastrocliente.CadastroClientePortType",
targetNamespace = "http://brunopereira.org/wsdl/CadastroCliente",
wsdlLocation = "WEB-INF/wsdl/CadastroCliente/CadastroCliente.wsdl")
public class CadastroCliente implements CadastroClientePortType {
public CadastroClienteResponseType cadastrarCliente(CadastroClienteRequestType request) {
System.out.println("Cadastro de cliente foi invocado!! Será feito o roteamento para o serviço adequado!!");
Cliente cliente = request.getCliente();
CadastroClienteResponseType response = new CadastroClienteResponseType();
response.setCliente(cliente);
return response;
}
}

O código do cliente foi gerado bem facilmente a partir do WSDL também, e ficou bem limpo. O que achei bem fraco foi a parte de teste dos serviços tanto no Netbeans como no Eclipse. No Eclipse você só consegue usar os plugins de teste se você tiver desenvolvido os serviços dentro do Eclipse, o que inviabilizou o meu uso. E o Netbeans tem um suporte que só serve pra HelloWorld, pra aqueles serviços de Calculadora, que você passa uns parâmetros primitivos e recebe um resultado simples. A interface do testador do meu serviço ficou dessa forma:

Dá pra ver que não serve para nada além de um HelloWorld basicão.

Bom, de uma maneira geral, o suporte a Web Services no Netbeans é muito melhor do que no Eclipse, que pra piorar só suporta a criação de serviços com o Axis. Até agora a maneira mais produtiva que encontrei de trabalhar com serviços SOAP foi essa que descrevi. Nos próximos dias olharei o que tem de interessante no projeto Metro e no JBoss ESB. Se encontrar coisas interessantes falarei mais por aqui. Ah, e se alguém tiver dicas para melhorar esta forma de trabalho que descrevi, por favor me avisem, pois estou avaliando muita coisa e não dá tempo de dedicar tanto tempo a cada opção dessas.

Posted in java, posts em português.

Tagged with , , , , , , , , , , , , , , , , , .


7 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Thiago says

    Oi,

    eu estive trabalhando um tempo com essas tecnologias e quando tive oportunidade de avaliar, CXF me pareceu a melhor opção (entre glassfish e Axis2), porque o que eu precisava fazer era estender o framework. CXF eh muito melhor documentado e o código eh bem mais modular pra quem quiser criar algo novo.

    No meu caso, eu estava trabalhando num projeto chamado Servus, que eh um componente do EMFT no Eclipse ( http://wiki.eclipse.org/Servus ). A idéia era a seguinte. Muita gente que trabalha com Java hoje em dia cria modelos EMF para modelar os dados. EMF gera as classes de dados e tem diversos serviços como reflexão, persistência em arquivos XML, em banco de dados, etc.

    Agora, imagine que você tem esse modelo e gerou as classes, daih você quer expor algum serviço que receba como parâmetro (ou retorne) algum desses tipos. EMF jah tem um mapping pra XSD, então em teoria bastaria você criar um WSDL e apendar o XSD (ou um pedaço dele). Mas os problemas seriam 1) quando você usasse alguma ferramenta JAX-WS pra gerar Java pro seu WSDL, você geraria novas classes pros seus dados (bem parecidas com as que você jah tem), mas nao poderia reusar as que você jah tem 2) você normalmente teria que usar JAX-B bindings, mesmo que EMF jah faca binding de Java pra XML.

    Então a idéia era criar um mapping WSDLEMFJava(JAX-WS) em que o código gerado pros client proxies e server skeletons usasse as mesmas classes geradas pelo EMF pra Java, e pudesse aproveitar a serialização do EMF pra fazer o binding. Por isso, eu teria que adicionar um binding pro CXF pra reaproveitar o que o EMF faz. Alem disso, daria pra usar modelos EMF pra modelar os seus serviços.

    Infelizmente eu não tive tempo de terminar a implementação do componente, jah que houveram mudanças na IBM que me fizeram ter que mudar de projeto (eles dão funding pro meu doutorado). Toda a estrutura pra ler WSDL, gerar modelos EMF e gerar código esta implementada. Falta somente finalizar as templates pra gerar o código direito. Como disse, não estou podendo trabalhar diretamente nisso, mas se o projeto interessar realmente a alguem, eu posso ajudar a entender o que foi feito, o que ainda tem que ser feito, etc.

    Alias, um outro objetivo do projeto era ajudar na migração de serviços baseados em WSDL1.x pra WSDL2, jah que o modelo EMF suportaria ambos.

    []s

  2. blpsilva says

    OI Thiago, obrigado por compartilhar essa sua experiência. Você estava usando o CXF como implementação de JAX-WS ou estava usando ele com o Aegis Databinding?

  3. Thiago says

    Oi,

    eu tava usando como implementação de JAX-WS, mas ao invés de usar JAX-B pro binding, tava fazendo serialização em EMF.

    Clarificando um pouco. EMF implementa mappings pra XML. Então um modelo Ecore do EMF pode ser visto como um XSD e EMF (de)serializa objetos Java de/para XML. Então, ao invés de encher as suas classes com anotações JAX-B, a idéia era reaproveitar esses mappings do EMF.

    Eu cheguei a implementar um proof-of-concept no CXF, criando um novo DataBinding que chamava as classes do EMF pra serializar e de-serializar. Funcionava direitinho, mas eu nunca tive chance de terminar uma implementação robusta.

    Quando eu acompanhei a lista cxf-dev, me pareceu que Aegis não era tido como a melhor opção, era somente mantido pra ter compatibilidade para clientes que usavam o Aegis nas implementações antigas.

    []s

  4. blpsilva says

    Oi Thiago, obrigado novamente por compartilhar essa sua experiência. Como você falou, também tive a impressão de que a recomendação forte do CXF é o uso do JAXB em vez do Aegis.

    Então se é pra usar JAX-WS com JAXB, prefiro simplesmente usar a implementação de referência que não deixa a desejar em nada em relação ao CXF. Por enquanto continuo achando que a forma mais produtiva de trabalhar com SOAP usando open source é escrevendo os schemas e os WSDLs e depois gerando as classes Java com o JAX-WS/JAXB.

  5. Thiago says

    Exato! O melhor jeito atual eh “escrevendo os schemas e os WSDLs e depois…”. Eh exatamente isso que a gente tava tentando evitar, que voce tenha que se preocupar com XSDs e WSDLs. A ideia era usar EMF no lugar.

    Mas concordo que se voce nao precisa modificar o framework, glassfish deve ser suficiente. Mas CXF tem algumas coisas legais tambem, como o Simple Databinding pra fazer prototipos.

    []s

  6. Rodrigo Carvalho Silva says

    Muito bom artigo. Recentemente fiz a mesma pesquisa no trabalho e obtive o mesmo resultado: Netbeans + Metro. O Metro contém o JAX-WS RI internamente e o WSIT, para WS-Secutiry e WS-Coordination. Muito completo e produtivo. Fora esta parte de testes, que você pode tentar usar o soapUI, acho muito melhor do que o BEA Workshop.

    Lembrando que tanto o Glassfish quanto o JBoss trabalham com o Metro, ou seja, não é preciso levar nenhuma lib para a aplicação se estiver usando um destes app servers.

    Abraço e estou no aguardo da seqüencia deste artigo!

  7. blpsilva says

    Oi Rodrigo, obrigado por compartilhar também esta sua experiência. Eu não tive tempo nas últimas semanas de prosseguir muito nos experimentos, mas pretendo em breve retomar meus testes usando o Glassfish + Metro em conjunto com o Mule e talvez o Service Mix.

    O Mule e o Service Mix têm propostas um pouco distintas, e também quero avaliar melhor as características de cada um. Se você tiver observações interessantes sobre os 2, terei todo o interesse em saber.

    []s



Some HTML is OK

or, reply to this post via trackback.



  • Buy Cheapest brand cialis name Now Top Online Pharmacy. Cheap Online Pharmacy.
  • Buy Cheapest generic clomid Online Best Drugstore. Cheap Online Pharmacy.
  • Buy ultram er Without Prescription Doctor. Best Internet. Best Prices.
  • Buy Cheapest pet health pharmacy Now Cheap Prescription Drugs. Low Prices.
  • Buy Cheap effexor withdrawal symptoms Online Best Online. Buy Medications Online.
  • Buy Cheap proscar generic Online Pharmacy At The Best Price! Best Drugstore.
  • Buy Cheapest generic for lexapro Online Order Cheap Meds Without Rx. Low Prices.
  • Buy Cheap diazepam no prescription needed Online Online Prices For diazepam no prescription needed! Best Drugstore.
  • Buy Cheapest us pharmacies no prescription valium Now Pharmacy Store. Special Prices For us pharmacies no prescription valium!
  • candida diflucan Online Without Prescription WorldWide Shipping. Low Prices.
  • Buy Cheap ultram use Now The Largest Internet Pharmacy. Low Prices.
  • Buy Cheapest cures for gonorrhea Online Drugs, Health And Beauty. Best Online.
  • Buy Cheapest withdrawal from codeine contin Now Pharmacy Store. Guaranteed Shipping.
  • Buy Cheap canadian drug pharmacy Online Cheap Pharmacy Online. Best Drugstore.
  • Buy Cheap zoloft dosage Now Best Drugstore. Drugs, Health And Beauty.
  • Buy Cheap prescription diet pills online Online Guaranteed Shipping. Cheap Pharmacy Online.
  • Buy Cheap ultram and pregnancy Online Best Internet. Internet Prices For ultram and pregnancy!
  • new weight loss pills Online Without Prescription Best Prices. Best Drugstore.
  • Buy Cheap sildenafil citrate viagra Now Internet Prices For sildenafil citrate viagra! Low Prices.
  • Buy Cheap diet pills prescribed by doctors Online Discount Pharmacy Online. Pharmacy Store.
  • Buy Cheapest buspar drug Now No Prescription Needed. Pharmacy Store.
  • Buying Cheap tramadol side effects. Offshore Rx, Good Prices. Top Online Pharmacy.
  • Buy Cheap xanax rx Now Discount Pharmacy Online. Pharmacy Store.
  • Buy Cheap buy benicar online no prescription Online Cheap Online Pharmacy. Pharmacy Store.
  • Buy Cheap ultram medication Now Discount Pharmacy Online. Top Online Pharmacy.
  • Buy using clomid Online Without Prescription. Low Prices. Best Internet.
  • Buy Cheap alprazolam 2mg Now Guaranteed Shipping. No Prescription Needed.
  • Buy Cheap viagra canada Now Online Medical Shop. Cheap Online Pharmacy.
  • Buy wal-mart pharmacy Without Prescription Doctor. Best Online. Best Prices.
  • Buy Cheapest online viagra prescriptions Now Pharmacy Store. Cheap Pharmacy Online.
  • Buy Cheap prescription ambien Online No Prescription Needed. Free Viagra Pills!
  • Buy Cheap lasix on line without a prescription Now Guaranteed Shipping. Cheap Prescription Drugs.
  • Buy Cheapest cialis tadafil order online Now Best Online. Discount Pharmacy Online.
  • Buy Cheapest diet pills that work Now Best Online. Top Online Pharmacy Supplier.
  • Buy Cheap cialis canadian generic Now Discount Pharmacy Online. Best Drugstore.
  • Buy Cheapest atenolol drug Online Best Internet. Top Online Pharmacy.
  • Buy Cheapest propecia online Online Guaranteed Shipping. Free Viagra Pills!
  • Buy Cheapest online pharmacy pain pills in florida Now Best Online. Cheap Prescription Drugs.
  • Buy Cheapest effexor dosage Online Top Online Pharmacy. WorldWide Shipping.
  • Buy Cheap weight loss no prescription Now Online Prices For weight loss no prescription! WorldWide Shipping.
  • Buy Cheap price fluconazole Now Online Medical Shop. 24/Online Pharmacy.
  • Buy Cheap addiction to ambien Online Best Drugstore. Top Online Pharmacy.
  • Buy Cheapest buy generic levitra Online Guaranteed Shipping. WorldWide Shipping.
  • sleep disorder treatments Online Without Prescription Low Prices. Best Drugstore.
  • Buy Cheapest cialis for men and wman Now Internet Prices For cialis for men and wman! Best Drugstore.
  • Buy Cheap viagra next day Online Best Online. Drugs, Health And Beauty.
  • Buy Cheap very cheap tramadol Now Cheap Pharmacy Online. Guaranteed Shipping.
  • Buy Cheapest norvasc online Now Best Online. Online Prices For norvasc online!
  • Buying Cheap cialis for overseas. Offshore Rx, Good Prices. Online Medical Shop.
  • Buy Cheap low cost brand viagra fast Now Guaranteed Shipping. Cheap Online Pharmacy.
  • Buy Cheapest discount lipitor Online Pharmacy Store. Buy Medications Online.
  • Buy Cheap low cost viagra online Now Internet Prices For low cost viagra online! Free Viagra Pills!
  • Buy Cheap generic for cialis Now Best Drugstore. No Prescription Needed.
  • Buy Cheap where to buy valium Now Buy Medications Online. Free Viagra Pills!
  • Buy Cheapest prescription pain relief medication Now Discount Pharmacy Online. Low Prices.
  • Buy Cheap fda approved diet drugs Now Best Online. No Prescription Online Pharmacy.
  • Buy Cheap online lorazepam Online Discount Pharmacy Online. Best Drugstore.
  • Buy Cheapest tramadol medicine online Now Cheap Pharmacy Online. Best Drugstore.
  • Buy Cheap legal cialis Online Buy Medications Online. Pharmacy Store.
  • diazepam no prescription 10mg Online Without Prescription Low Prices. Online Medical Shop.
  • Buy 100mg viagra Without Prescription Doctor. Low Prices. Best Internet.
  • Buy Cheap xanax online cheap Now Free Viagra Pills! Buy Medications Online.
  • Buy Cheap xanax online mexico Online Low Prices. Pharmacy At The Best Price!
  • Buy Cheap drugstores france Online Pharmacy At The Best Price! Best Prices.
  • Buy Cheap weight loss prescription drugs Now Discount Pharmacy Online. Free Viagra Pills!
  • Buy Cheap phentermine on line consultation Now Best Internet. Cheap Prescription Drugs.
  • Buy Cheapest purchase xanax without prescription Online Best Online. Pharmacy At The Best Price!
  • Buy Cheap viagra effect on women Online Best Prices. Cheap Prescription Drugs.
  • Buy Cheapest acetaminophen with codeine Online Online Medical Shop. Best Online.
  • Buy Cheapest supplement vitamins Online Discount Online Pharmacy. Low Prices.
  • Buy Cheapest information on weight loss supplement Now No Prescription Needed. Pharmacy Store.
  • Buy Cheapest pain pills online withouth prescription Online Best Drugstore. Guaranteed Shipping.
  • Buy Cheap intensify effects of levitra Online Low Prices. Discount Pharmacy Online.
  • Buy Cheapest weight loss pills australia Online Special Prices For weight loss pills australia! Low Prices.
  • Buy Cheap genuine viagra Online Best Internet. Drugs, Health And Beauty.
  • Buy Cheap cheapest prescription meds online Now Top Online Pharmacy. Drugs, Health And Beauty.
  • Buy Cheapest tyonal codeine Online Top Online Pharmacy. Best Online.
  • Buy Cheap detox parasites Online Best Internet. Discount Online Pharmacy.
  • Buy Cheapest tramadol information Now 24/Online Pharmacy. Best Drugstore.
  • Buying Cheap buy klonopin without prescription. Offshore Pharmacy, Best Prices. Best Internet.
  • Buy Cheap getting off pain pills Now Internet Prices For getting off pain pills! Best Prices.
  • Buy Cheapest fungus fluconazole Now Pharmacy Store. Buy Medications Online.
  • Buy Cheapest phentermine testimonies Now Special Prices For phentermine testimonies! Low Prices.
  • Find The Latest News And Information About what is lorazepam used for Pills Low Prices.
  • Buy muscle spasms drug Online Without Prescription. Best Internet. Best Prices.
  • rating on weight loss programs Online Without Prescription WorldWide Shipping. Best Online.
  • Buying Cheap viagra cod. Mexican Rx, Best Prices. 24/Online Pharmacy.
  • Buy Cheapest fda approved hair loss products Online 24/Online Pharmacy. Best Internet.
  • Buy Cheap viagra vs viagra professional Now Best Internet. Top Online Pharmacy Supplier.
  • Buy xanax prescribed for Without Prescription Doctor. Best Drugstore. Low Prices.
  • prescription only diet pills Online Without Prescription Pharmacy Store. Best Internet.
  • Buy Cheap nexium take Now Safe And Secure Payment System. Low Prices.
  • Buy Cheap low price cost prescription drugs Online Safe And Secure Payment System. Low Prices.
  • Buy Cheap buy valium without prescription Now Buy Medications Online. 24/Online Pharmacy.
  • Buy Cheapest generic viagra mexico Online Cheap Pharmacy Online. Best Drugstore.
  • Buy Cheap color of phentermine 37.5 caps Now Free Viagra Pills! No Prescription Needed.
  • Buy Cheapest diet pills that really work Now Buy Medications Online. Pharmacy Store.
  • Buy Cheap order cialis online Online WorldWide Shipping. Cheap Pharmacy Online.
  • Buy Cheap levitra experiences Now No Prescription Needed. Best Drugstore.
  • Buy Cheapest buy pain killers with no prescription Online Best Prices. 24/Online Pharmacy.