Web Service Apache Axis

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 ?

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

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.

[quote=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. [/quote]

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

Quando você diz:

[quote]É 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[/quote].
Você quer dizer que pacote ?
Que eu saiba o arquivos binarios .class, ficam no pacote WEB-INF\classes da minha app, correto ? :slight_smile:

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?

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

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.

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.


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…

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…