Web Service Apache Axis

Olá Pessoal…

Gostaria de pedir um pouco a atenção para me ajudar com algumas dúvidas, pois preciso desenvolver um web services na empresa que trabalho.

[color=blue]Imagine o seguinte senário:[/color]

  • A empresa, é uma universidade localizada em MT, esta possui diversas outras universidades em todo o brasil formando um grupo, todas as universidades irão ter acesso a alguns portais, por exemplo o portal Aluno, responsável por controlar todos os serviços de Emissão de Boleto bancário, boletim do aluno, etc.) e o portal do professor reposnsável por controlar todos os serviços de requencia do aluno, gerenciar boletim do aluno, disponibilizar materias das aulas, etc.

  • Existira diversar bases de dados, cada uma com as informações especificas para cada universidade, a principio as bases de dados não estão em um unico lugar, por exemplo se uma universidade estiver localizada em Salvador, o web service ficara responsavel por conectar na base de dados desta universidade, temos a ideia de mais para frente, unificar em apenas um local, todas as bases de dados. Estamos tendo muitos gastos com links de uma operadora daqui da universidade para as outras localizadas em todo o brasil, tem se a ideia de diminuir os gastos utilizando o web services comunicando via HTTP. A universidade que trabalho é sede de todas as outras, todos os links saem daqui para as demais universidades.

  • O web service deverá oferecer uma camada de serviços responsável por controlar as requisições(Post, Get, etc.) dos usuarios;
    Ele devera através de parametros informados na autenticação do usuario, saber qual a base de dados deverar conectar, para executar uma certa operação, atualmente utilizamos o BDs ORACLE com estruturas de pacotes com diversos procedimentos implementados com toda a regra de negócio. O web service devera conectar a um certo BDs e executar algum procedimento e dar ma resposta ao portal(usuário), via WSDL.

Essa seria idéia do que deverei implementar, gostaria de pedir uma ajuda com materiais sobre o Axis, utilizarei este web service.

Alguém teria algum material ou alguns exemplos que pude-se disponibilizar para poder estar estudando e começar a implementar alguns exemplos?

Fico no aguardo.
Desde de já agradeço.

boa noite


(esta pagina web sempre tem algum material bom)

http://ws.apache.org/axis2/1_3/quickstartguide.html#deploy

http://ws.apache.org/axis2/1_2/userguide-creatingclients-xmlbeans.html

espero q ajude, caso ainda nao tenha encontrado estes links

na pagina da IBM tbm sempre tem algo que da para aproveitar…

(OBS: assunto aparte, vc poderia divuldar o nome da universidade?)

@jr@

Obriado almjr.

Vou dar uma olhada nos sites informados, já tenho o axis rodando no tomcat, implementei algumas classes de teste, alterei a extenção dos arquivos de java para jws e acessei via url, funfou belezinha e ainda deu para gerar o arquivo wsdl, via browser.

Apenas alguns testes simples mesmo, agora vou começar a implementar alguma coisa mais completa.

T+, tudo de bom.

Estou desenvolvendo um webservice seguinto o tutorial Tutorial do Apache Axis 1.3, mas estou tendo alguns problemas ao utilizar ferramenta Java2WSDL para gerar o WSDL.
Ao executar o comando :
java org.apache.axis.wsdl.Java2WSDL -o …/config/resource/rh.wsdl -l"http://localhost:8080/rh/services/RecursosHumanosWS" -n “urn:RecursosHumanos” rh.RecursosHumanos

pelo prompt, é gerado a seguinte exceção:
C:\Des\DesHeider\ExemploWebServicesAxis\bin>[color=blue]java org.apache.axis.wsdl.Java2WSDL -o …/config/resource/rh.wsdl -l"http://
localhost:8080/rh/services/RecursosHumanosWS" -n “urn:RecursosHumanos” rh.RecursosHumanos[/color]
[color=red]Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/axis/wsdl/Java2WSDL[/color]

Me parece alguma configuração do axis, já adicionei todos os JARs, configurei as variaveis ambiente, mas continua com este erro, ou então posso estar executando o comando no diretorio errado.
Alguém saberia me dizer o que esta acontecendo?

Certamente você não configurou o CLASSPATH corretamente.

Eu também trabalho para uma universidade e implementei um cenário parecido.

Já considerou a possibilidade de utilizar EJB3? É bem mais simples de se disponibilizar serviços com ele.

Ola Rafael Nunes, que bom que você ja tenha desenvolvido alguma coisa parecida, podemos trocar idéias se for o caso, rsrsrs…

Realizei algumas alterações nas minhas variaveis ambiente e me parece que agora estou conseguindo utilizar a ferramenta Java2WSDL, mas ainda estou com problema:

[quote]C:\Des\DesHeider\ExemploWebServicesAxis\bin>java org.apache.axis.wsdl.Java2WSDL -o …/config/resource/rh.wsdl -l"http
://localhost:8080/rh/services/RecursosHumanosWS" -n “urn:RecursosHumanos” rh.RecursosHumanos
17/09/2007 15:13:17 org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachmen
t support is disabled.
java.lang.ClassNotFoundException: rh.RecursosHumanos
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.apache.axis.utils.ClassUtils$2.run(ClassUtils.java:187)
at java.security.AccessController.doPrivileged(Native Method)
at org.apache.axis.utils.ClassUtils.loadClass(ClassUtils.java:160)
at org.apache.axis.utils.ClassUtils.forName(ClassUtils.java:100)
at org.apache.axis.wsdl.fromJava.Emitter.setCls(Emitter.java:2079)
at org.apache.axis.wsdl.Java2WSDL.run(Java2WSDL.java:584)
at org.apache.axis.wsdl.Java2WSDL.main(Java2WSDL.java:682)[/quote]
Alguém conhece este erro ? Esta acontecendo na classe RecursosHumanos descrita no tutorial, mas não consegui identificar.

Sim, que ele não achou a classe rh.RecursosHumanos.
Está executando dentro do diretório certo?

Você não pode executar diretamente do diretório onde está o .class, mas sim do diretório base dos binários, respeitando a estrutura de pacotes.

Ok.
Meu projeto esta no diretório C:\Des\DesHeider, executo o comando neste aqui C:\Des\DesHeider\ExemploWebServicesAxis\bin.

Pergunta:
Devo copiar o projeto para dentro de webapps do tomcat e executar o comando na pasta bin do projeto no tomcat ou executar o comando no diretório acima?

Tenta assim, setando o classpath:

java -cp .;%CLASSPATH% org.apache.axis.wsdl.Java2WSDL -o ../config/resource/rh.wsdl -l"http ://localhost:8080/rh/services/RecursosHumanosWS" -n "urn:RecursosHumanos" rh.RecursosHumanos

Opa, valeu Daniel, o rh.wsdl foi gerado…

Comando que estava sendo executado e descrito no tutorial:
[color=blue]java org.apache.axis.wsdl.Java2WSDL -o …/config/resource/rh.wsdl -l"http://localhost:8080/rh/services/RecursosHumanosWS" -n “urn:RecursosHumanos” rh.RecursosHumanos[/color]

Comando executado que funcionou e gerou do rh.wsdl:
[color=green]java[/color] [color=red]-cp .;%CLASSPATH%[/color] [color=green]org.apache.axis.wsdl.Java2WSDL -o …/config/resource/rh.wsdl -l"http://localhost:8080/rh/services/RecursosHumanosWS" -n “urn:RecursosHumanos” rh.RecursosHumanos[/color]

Vou seguir com o resto do tutorial, muito obrigado daniel.

Quando vou publicar minha aplicação j2ee com web service, estou tendo o seguinte problema:

[quote]C:\Des\DesHeider\ExemploWebServicesAxis>java org.apache.axis.client.AdminClient -l"http://localhost:8080/rh/servlet/Axis
Servlet" src/rh/ws/deploy.wsdd
19/09/2007 10:34:25 org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachmen
t support is disabled.
Processing file src/rh/ws/deploy.wsdd
Exception: AxisFault
faultCode: {http://xml.apache.org/axis/}HTTP
faultSubcode:
faultString: (400)No Host matches server name localhost
faultActor:
faultNode:
faultDetail:
{}:return code: 400

    {http://xml.apache.org/axis/}HttpErrorCode:400[/quote]

Já pesquisei no google alguma coisa parecida com essas informações, mas não encontro nada.
Apenas este aqui no site da sun Java Servlet - A question about: “(400)No Host matches server name localhost”, mas não consegui entender muito bem.
Alguém ja passou por esse problema ?

Você está executando na mesma máquina onde está rodando o app server?
Se sim, troque localhost por 127.0.0.1.

Sim estou rodando a app server na minha máquina, com o comando:
ava org.apache.axis.client.AdminClient -l"http://localhost:8080/rh/servlet/Axis
Servlet" src/rh/ws/deploy.wsdd

Você esta sugerindo substituir o comando acima de localhost para 127.0.0.1, OK.

Daniel, você viu algumas dúvidas que encaminhei a você em relação ao comando acima, pois tem algumas coisas no tutorial que não entendi, poderia responder para mim.
Muito obrigado.

[quote=Heider Matos]Daniel, você viu algumas dúvidas que encaminhei a você em relação ao comando acima, pois tem algumas coisas no tutorial que não entendi, poderia responder para mim.
Muito obrigado.[/quote]

Heider,
Estes assunstos deveriam ser tratados aqui no forum, não via mensagem privada.
Abraços

Ok.

Daniel, seguindo aquele turorial do GUJ sobre AXIS, no tópico PUBLICANDO UMA APLICAÇÃO WEB J2EE COM WEB SERVICE, estou tendo problemas ao utilizar a ferramenta AdminClient, executando o comando:

java org.apache.axis.client.AdminClient -l"http://localhost:8080/[color=red]rh[/color]/servlet/AxisServlet" src/rh/ws/deploy.wsdd

Na própria distribuição do Apache Axis, existe uma aplicação web inicial já configurada(C:\Java\axis\axis-bin-1_4\axis-1_4\webapps\axis), copiei e joguei dentro do webapps do tomcat.

Gostaria que você pudesse esclarecer apenas algumas dúvidas, para mim poder terminar a implementação do web service.

1º) A URL informada no parâmetro l, não entendi por que se utiliza rh após a porta 8080, não deveria ser [color=blue]axis [/color]?

2º) Estou executando o comando no diretório raiz da minha aplicação, para que possa ser encontrado o arquivo deploy.wsdd, conforme a estrutura de pacotes do projeto web do tutorial. Esta correto ?

3º) A servlet sendo executada no comando é a AxisServlet mapeada no web.xml do projeto web axis, que foi copiado da distribuição do AXIS-1_4 para dentro da pasta webapps do tomcat. Esta correto ?

4º) Devo copiar algum arquivo da minha aplicação web ExemploWebServicesAxis para o projeto axis que esta dentro do tomcat ? Tipo os arquivos .class, para dentro de tomcat-5.5.20\webapps\axis\WEB-INF\classes!!!

Gostaria que você pudesse dar um mãozinha com essas dúvidas, pois não estou conseguindo resolver e nem encontrar algo na net para solucionar meu problema.

Desde já agradeço, muito obrigado.

Se você usa a app “axis”, você pode omitir o parâmetro -l e a URL, já que este é o padrão. No meu exemplo eu criei uma aplicação chamada “rh”, por isso eu usei rh na URL.

Você que tem que me dizer se está certo… hheheheheh… eu não conheço a estrutura de diretórios e arquivos do seu projeto. Você só precisa referenciar o arquivo corretamente.

Sim

Todos os seus binários (classes) devem estar na sua aplicação web, senão eles não serão achados.

Seguindo o tutorial, não tem erro. Se você mudou o nome da sua app, é só mudar o que for necessário de nomes. É como somar maçãs, bananas ou abacaxis… só muda o nome… o resultado não muda.

Ok, eu havia trocado anteriormente o nome do contexto de rh para axis no comando da AdminClient, mas pelo fato de não gerar nada no deploy achei que ainda estava errado e por isso resolvi tirar esta duvida.

Executei o comando desta forma:
C:\Des\DesHeider\ExemploWebServicesAxis>[color=red]java org.apache.axis.client.AdminClient src/rh/ws/deploy.wsdd[/color]
20/09/2007 11:08:59 org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
Processing file src/rh/ws/deploy.wsdd
Done processing

Me parece que executou corretamente, mas não sei o que aconteceu, não foi gerado nada.
O AdminClient deveria gerar classes Service, SoapBindingStub, em algum lugar conforme o deploy.wsdd ?

O admin cliente não gera nada… apenas faz o “deploy” do WS.
Você tem que colocar as classes geradas (anteriormente pelo WSDL2Java) na sua app antes de fazer o deploy.