Tomcat + Struts 1.x + WebService (jax-ws) é possivel?[RESOLVIDO]

Bom dia,
Estou precisando criar um WebService, porem eu não acho em nenhum lugar algum tutorial ou explicação de como fazer as configurações para que ele rode no ambiente descrito no titulo (Tomcat + Struts 1.x [não sei a versão exata] + jax-WS).
Já achei como fazer sem o Struts, mas então eu fiquei na duvida se iria funcionar mesmo assim, então decidi perguntar primeiro antes de perder o tempo desenvolvendo algo que não funcionaria…
Então faço minha pergunta é possivel fazer com esta configuração?Como?
O Struts interfere em algo (não conheço 100% as funcionalidades dele) para o WS?
Se eu fizer o WS ignorando o Struts ele irá funcionar corretamente? Poderei usar minhas classes de negocio?

grato
Fernando

Olá Fernando,

Possível é sim. O Struts é um framework MVC, seria só uma questão de decidir aonde você deve fazer a chamada para o serviço. Achei um artigo no site da IBM que talvez lhe dê algumas idéias: Architect Struts applications for web services.

Quanto ao uso do Struts, principalmente a versão 1.x, se não for necessário (por questões de estudo ou profissionais) eu sugeriria utilizar um framework mais atual, talvez JSF ou VRaptor. Ainda existem muitos sistemas construídos em Struts (aqui na empresa mesmo temos uns 4), mas, é “meio” antigo (note que o artigo que passei é de 2003), não acho uma boa ideia começar um projeto com ele.

Uma coisa: observe que, ao trabalhar com Web Services, você tem um serviço, que você pode construir usando Axis ou CXF, por exemplo, e um cliente, que pode ser web, desktop, Java, PHP, etc. Eu presumi que você pretende construir o cliente em Struts, seria isso mesmo?

Boa sorte.

Obrigado Alys pela resposta rapida.
Achei interresante o Artigo que você passou, mas pelo que li, até agora, ele mostra o lado cliente. Eu estou precisando montar um Servidor para o meu WebService, e só acho explicações diretas Tomcat -> WebService (alterar os xml e etc), e como onde eu trabalho temos o Struts 1.x, com diversas aplicações penduradas nele (por isso de estar travado na versão) e eu não sei se funcionaria publicar o serviço somente no Tomcat, ou se tenho que fazer alguma alteração no Struts para que o serviço seja localizado no meu Tomcat.
caso eu tenha que alterar soment os parametros do Tomcat, sem nenhuma alteração no Struts eu conseguiria acessar minhas classes de negocio pelo webservice?

grat
Fernando

Bem, estou longe de ser “fera” no assunto, mas, talvez eu possa dar alguma esclarecida:

Quando você trabalha com Web Services, você de certa forma passa a ter “dois projetos”: um com o seu serviço, e outro o cliente que irá consumir o serviço. (claro, vc pode ter mais de um projeto contendo o serviço, ou n clientes que consumem).

Para construir o serviço, por exemplo em Java, você utiliza tecnologias como Axis ou Apache CXF (devem ter outras, mas, esses dois são os únicos que já utilizei). Nele, você vai identificar quais classes são os seus serviços, e vai codificar a regra desejada nas mesmas. Após tudo pronto, você vai gerar um wsdl destes serviços (os frameworks geralmente automatizam isso para você) e vai publicá-lo em algum servidor: Tomcat, JBoss, Glassfish, etc. Pronto, seu serviço já pode ser acessado na rede.

Agora, você já tem um cliente pronto, em Struts, que precisa consumir este serviço. Tudo o que você precisa fazer (em teoria, nunca acessei um ws a partir do Struts) é modificar a classe que precisa acessar este serviço (uma Action, por exemplo) para incluir o trecho de código que faz a chamada para o serviço. Tem várias formas de fazer isso, você pode por exemplo gerar stubs e incluir no seu cliente. Aqui normalmente fazemos algo assim:

URL wsdlURL = new URL("http://www.endereco_do_seu_servidor/nomeDoServico?wsdl");
QName SERVICE_NAME = new QName("http://namespace_para_o_servico/", "NomeDoServico");
Service wsService = Service.create(wsdlURL, SERVICE_NAME);
InterfaceDoSeuServico servico = wsService.getPort(InterfaceDoSeuServico.class);
String retorno = servico.algumMetodo("parametros");

Utilizamos algo nesse estilo para o CXF (foi o último que usei, está mais fresco na minha memória). Presumo que você faria algo similar dentro de alguma classe no projeto cliente. aí, para decidir em qual classe isso deve ser feito depende das decisões de arquitetura do seu projeto. Talvez na Action não seja o melhor lugar, por exemplo.

Enfim, eu pretendia dar uma visão geral de como a coisa funciona, espero que tenha conseguido. Importante observar que isso aí independe de qual servidor web/aplicação você está usando. Você pode ter seu cliente Struts no Tomcat, e colocar o serviço dentro de um JBoss por exemplo.

Obrigado Alys,
você pode nao ser “fera” mas conseguiu esclarecer o que eu queria (não diretamente).

grato
Fernando