Web Service Apache Axis

32 respostas
D

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.

32 Respostas

A

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@

D

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.

D

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?

D

Certamente você não configurou o CLASSPATH corretamente.

R

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.

D

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:

<blockquote>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)</blockquote>

Alguém conhece este erro ? Esta acontecendo na classe RecursosHumanos descrita no tutorial, mas não consegui identificar.
R

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

D

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.

D

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?

D

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

D

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.

D

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

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</blockquote>

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 ?

D

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

D

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.

D

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.

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

D

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.

D

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.

D

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 ?

D

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.

D

Eu já havia colocado as classes geradas pelo WSDL2Java no src da minha aap, antes de rodar o comando do AdminClient.
Após executar comando, para onde o AdminClient faz o deploy ?

D

src ???
Cara, você conhece a estrutura de uma aplicação java web?

D

Sim… rsrsrsrsss…
Quando vc diz colocar os arquivos .java gerados na app, vc quiz dizer onde então ?

Adicionei junto com as classes Empregado.java e RecursosHumanos.java implementadas na minha app, conforme o tutorial.

D

Artigo Tutorial do Apache Axis 1.3:
PUBLICANDO UMA APLICAÇÃO WEB J2EE COM WEB SERVICE
A publicação de uma aplicação web J2EE que possui Web Services se dá em duas fases: publicação (deploy) da aplicação no servidor de aplicações e depois a publicação (deloy) dos Web Services.

A publicação de aplicação web J2EE se dá de forma padrão, seja num pacote WAR ou EAR. É importante que o pacote da aplicação contenha todas as classes, inclusive as classes com as lógicas de negócio e as classes geradas pela ferramenta Apache Axis, além do web.xml com as configurações necessárias para o funcionamento do Axis e suas bibliotecas.

Você tem que colocar os BINÁRIOS (.class) na sua aplicação.

D

Quando você diz:

É importante que o pacote da aplicação contenha todas as classes, inclusive as classes com as lógicas de negócio e as classes geradas pela ferramenta Apache Axis
.
Você quer dizer que pacote ?
Que eu saiba o arquivos binarios .class, ficam no pacote WEB-INF\classes da minha app, correto ? :slight_smile:

D
D

Vamos por partes:
Passos que eu segui, conforme o tutorial (Tutorial do Apache Axis 1.3):

Feito o download do Web Service AXIS, dentro da sua distribuição, especificamente na pasta webapps, existe uma aplicação web chamada axis, esta foi copiada para dentro da pasta webapps do tomcat.

Eu tenho uma app web criada no meu Eclipse chamada ExemploWebServicesAxis, essa app contém esta estrutura conforme o tutorial:

ExemploWebServicesAxis bin (Diretórios onde são gerados os arquivos .class) rh (Empregado.class e RecursosHumanos.class) ws (.class dos arquivos gerados pelo WSDL2Java) config META-INF resource (Possui o rh.wsdl) WEB-INF (Possui o arquivo web.xml) classes rh (Empregado.class e RecursosHumanos.class) ws (.class dos arquivos gerados pelo WSDL2Java) lib (Bibliotecas da distribuiçã AXIS-1_4\lib) deploy src (Diretorios onde são gerados os arquivos .java) rh (Empregado.java e RecursosHumanos.java) ws (.java dos arquivos gerados pelo WSDL2Java) web html jsp

CRIANDO O WSDL PARA O WEB SERVICE:

C:\Des\DesHeider\ExemploWebServicesAxis\bin>
[color=red]java -cp .;%CLASSPATH% org.apache.axis.wsdl.Java2WSDL -o …/config/resource/rh.wsdl -l"http://localhost:8080/axis/services/RecursosHumanosWS" -n “urn:RecursosHumanos” rh.RecursosHumanos[/color]
17/09/2007 16:48:22 org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
[color=red]OK[/color]


CRIANDO AS CLASSES SERVER-SIDE DO WEB SERVICE:

C:\Des\DesHeider\ExemploWebServicesAxis>
[color=red]java -cp .;%CLASSPATH% org.apache.axis.wsdl.WSDL2Java -o ./src -s -S true -Nurn:RecursosHumanos=rh.ws config/resource/rh.wsdl[/color]
17/09/2007 17:03:05 org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
[color=red]OK[/color]

[color=red]OBS.:[/color] O comando acima utiliza o WSDL2Java para gerar as classes responsáveis pela orquestração do Web Service e pela chamada à classe de negócios.

Após gerar as classes, compilei todas e copiei para dentro da pasta WEB-INF\classes do projeto [color=blue]axis[/color], localizado em tomcat\webapps\axis\WEB-INF\classes.


PUBLICANDO UMA APLICAÇÃO WEB J2EE COM WEB SERVICE:

C:\Des\DesHeider\ExemploWebServicesAxis>
[color=red]java org.apache.axis.client.AdminClient src/rh/ws/deploy.wsdd[/color]
20/09/2007 16:12:26 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
[color=blue]Exception: AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.lang.reflect.InvocationTargetException
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname:ti294[/color] [color=red]O TI294 É O NOME DA MINHA MÁQUINA[/color]

ADICIONANDO OS .CLASS DENTRO DO MEU TOMCAT, É GERADO A EXCEÇÃO ACIMA!!!

  • Tem alguma outro passo que devo seguir para que a publicação funcione corretamente ?
    Após ter gerado o rh.wsdl e as classes responsáveis pela orquestração do Web Service e pela chamada à classe de negócios.

  • Os arquivos binários .class das classes de negócio e as classes server-side dio web service devem estar em que local ?
    Dentro da minha app ExemploWebServicesAxis\config\WEB-INF\classes ou dentro de tomcat\webapps\axis\WEB-INF\classes quando for executado o comando de publicação?

D

Você reiniciou o Tomcat depois de copiar os .class para a aplicação?

D

Sim.
Adicionei os .class dentro de C:\Java\tomcat-5.5.20\webapps\axis\WEB-INF\classes, e reiiniciei o tomcat, não apareceu nenhum erro no console, foi startado corretamente.
Mas quando executo o comando na minha app, onde esta o deploy.wsdl, acontece aquela exceção.

D

Consegui publicar minha app web utilizando o AdminClient do AXIS.

C:\Des\DesHeider\ExemploWebServicesAxis>[color=red]java org.apache.axis.client.AdminClient src/rh/ws/deploy.wsdd[/color]
28/09/2007 09:06:15 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</Admin>

Este comando acessa o Servlet do Apache Axis no servidor. Por fim é informado o caminho do arquivo wsdd em disco que contém as informações de deploy do Web Service. Por default é invocado esse “http://localhost:8080/[color=red]axis[/color]/servlet/AxisServlet” ao rodar o comando, quando for copiar a app web disponivel na distribuição do axis para webapps do tomcat, se for renomeada de axis para um outro nome qualquer , por exemplo teste é necessário informar o nome da app dentro do tomcat, como o exemplo abaixo:

java org.apache.axis.client.AdminClient -l"http://localhost:8080/teste/servlet/AxisServlet" src/rh/ws/deploy.wsdd

Após rodar esse comando acima, é gerado o arquivo server-config.wsdd dentro de tomcat-5.5.20\webapps\axis\WEB-INF, depois é só acessar via url o seguinte endereço http://localhost:8080/rh/servlet/AxisServlet, serão listados todos os Web Services e seus métodos, publicados pelo Apache Axis.

Funfou, rsrsrsrs…

Obrigado a todos pela ajuda com algumas dúvidas.

L

L

pessoal,

tentei usar este mesmo comando java2WSDL com este mesmo exemplo do tutorial e apareceu o seguinte erro:

Could not create the java virtual machine.

alguem sabe o que pode ser…

S

Pessoal, estou seguindo o exemplo do guj, o msm q o colega estava seguindo, porém ao executar o comando para geração do WSDL da o seguinte erro:

comando:

C:\Projetos\ExemploWS\build>java -cp .;%CLASSPATH% org.apache.axis.wsdl.Java2WSDL -o Soma.wsdl -l"http://localhost:8080/axis/services/SomaWS" -n “urn:Soma” ws.Soma

Exception in thread main java.lang.NoClassDefFoundError: de

Caused by: java.lang.ClassNotFoundException: de

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 java.lang.ClassLoader.loadClassInternal(Unknown Source)

Could not find the main class: de.  Program will exit.

Se alguem puder me ajudar…
agradeço…

Criado 12 de setembro de 2007
Ultima resposta 14 de dez. de 2009
Respostas 32
Participantes 6