Gostaria de gerar o código do lado servidor a partir do wsdl. Alguém tem idéia de como se pode fazer isso?
Nossa… pra que voce quer gerar isso no servidor? É uma geração dinâmica? o WSDL vai mudar?
Voce pode dar uma olhada no Axis, mas acho que o que voce está querendo fazer é meio estranho.
:?:
ceduardo.roque
Eh pq eu tenho o wsdl gerado pelo servidor, mas nao tenho acesso a ele.
Entao queria reproduzir ele na minha maquina… entende?
[quote=.paula]Eh pq eu tenho o wsdl gerado pelo servidor, mas nao tenho acesso a ele.
Entao queria reproduzir ele na minha maquina… entende?[/quote]
entao… se ele está no servidor, ele está numa aplicação WEB?
Se estiver, voce tem acesso a ele via browser, certo? pois ele é um XML.
Agora se voce precisa dele pra gerar os stubs para conectar com o web service a partir de um cliente no servidor web, então basta voce usar o axis pra criar os stubs. O eclipse tem isso nativo. Voce vai na aplicação web, pega o wsdl de lá de dentro (ele vai aparecer no browser mesmo). Voce gera um wsdl na sua aplicação, e clica em:
New --> Web Service --> Generate Client
Daí lá ele pede o wsdl (que voce tem porque voce copiou, certo?) e voce tem os stubs prontinhos gerados pelo eclipse. É isso que voce quer? :?:
Espero ter ajudado. :?
ceduardo.roque
Eu acho que esta frase está equivocada, o WSDL já é gerado pelo servidor (Web Service) e disponibilizado em um endereço http ou https.
Assim, você deve desenvolver um Client para acessar este serviço.
O Assim é super fácil de utilizar, com ele você pode gerar todas as classes do Client executando uma linha de comando.
A minha frase não está equivocada.
Como disse, nós NÃO temos acesso ao Web Service, mas alguém que tem nos disponibilizou o wsdl para que possamos desenvolver o cliente.
É inviável desenvolver o cliente sem o web service para testarmos o funcionamento, então vamos desenvolver um Web Service para SIMULAR o que teríamos que acessar realmente.
Então, de posse do wsdl gerado pelo servidor original, eu preciso gerar o máximo possível desse servidor que simulará o Web Service.
Não conheço nada sobre Web Services, estou pesquisando por causa dessa necessidade de desenvolver o cliente no meu estágio.
Obrigada a todos!
Ahhhhh… sim… agora eu entendi…
Bom… vamos por partes… com o WSDL na mão, voce pode gerar o cliente, certo? e voce deve saber como fazer isso… se não sabe, é só olhar o meu outro post…
Agora, se voce está querendo “acessar” o WS pra ver se o seu código de chamada está funcionando, então sem o WS original não vai rolar, a não ser que você faça OUTRO web service você mesma, veja como acessá-lo utilizando as classes geradas (pelo Axis, no Eclipse), e faz igual com as classes geradas para o seu WS desconhecido. :lol:
A parte boa da história é que como as classes do cliente são geradas AUTOMATICAMENTE pelo Axis, se voce fizer uma vez funcionar acessando um WS gerado por voce mesma, chamar o WS desconhecido será exatamente igual. 8)
Em geral, o Axis gera uma classe de Locator (algo como BlaBlaBlaLocator), e nela você tem um método (gerado por ele) que é algo do tipo getBlaBlaBlaWebService(), e nele você tem a chamada do método original do Web Service. É importante você notar que nas classes do cliente geradas pelo Axis voce NÂO mexerá, e sim só invocará os seus métodos. O máximo que voce vai ter que mexer é o endereço do Web Service, isso se ele mudar.
Isso porque o wsdl possui todas as informações de onde está o WS, de quais métodos ele disponibiliza. E o Axis tem o dom de ler isso e criar as classes do cliente para voce. O único trabalho que você vai ter será chamar o método a partir das classes geradas pelo Axis.
Amanhã de manhã eu te mando um código que eu fiz no meu serviço e você entenderá melhor. Aqui em casa eu não tenho nenhum. :!:
E não precisa ficar brava. Estamos aqui pra tentar ajudar. :roll:
Espero ter ajudado.
Estou brava nao…
Pelo contrario… estou muito feliz que vcs estao me ajudando.
Fico no aguardo do codigo entao… mas infelizmente vou demorar um pouco para dar noticias de como as coisas estao indo…
Semana de provas na faculdade eh fogo!
Mas muito obrigada pela ajuda! Vou tentar seguir o que foi dito aqui qnd for tentar resolver a questao novamente.
Olá… entao…
esse é o meu Web Service:
public class PDFConverterWS {
public String converteArquivoEmPDF(String caminho, String nomeDoArquivo) {
PDFConverterHelper helper = new PDFConverterHelper();
return helper.converterArquivoEmPDF(caminho, nomeDoArquivo);
}
}
Este foi o wsdl que o eclipse gerou:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://ws.pdfconverter.prodam.sp.gov.br" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://ws.pdfconverter.prodam.sp.gov.br" xmlns:intf="http://ws.pdfconverter.prodam.sp.gov.br" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://ws.pdfconverter.prodam.sp.gov.br" xmlns="http://www.w3.org/2001/XMLSchema">
<element name="converteArquivoEmPDF">
<complexType>
<sequence>
<element name="caminho" type="xsd:string"/>
<element name="nomeDoArquivo" type="xsd:string"/>
</sequence>
</complexType>
</element>
<element name="converteArquivoEmPDFResponse">
<complexType>
<sequence>
<element name="converteArquivoEmPDFReturn" type="xsd:string"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<wsdl:message name="converteArquivoEmPDFResponse">
<wsdl:part element="impl:converteArquivoEmPDFResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="converteArquivoEmPDFRequest">
<wsdl:part element="impl:converteArquivoEmPDF" name="parameters"/>
</wsdl:message>
<wsdl:portType name="PDFConverterWS">
<wsdl:operation name="converteArquivoEmPDF">
<wsdl:input message="impl:converteArquivoEmPDFRequest" name="converteArquivoEmPDFRequest"/>
<wsdl:output message="impl:converteArquivoEmPDFResponse" name="converteArquivoEmPDFResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PDFConverterWSSoapBinding" type="impl:PDFConverterWS">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="converteArquivoEmPDF">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="converteArquivoEmPDFRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="converteArquivoEmPDFResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="PDFConverterWSService">
<wsdl:port binding="impl:PDFConverterWSSoapBinding" name="PDFConverterWS">
<wsdlsoap:address location="http://localhost:8080/PDFGeneratorWebService/services/PDFConverterWS"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Com o WSDL, o eclipse tem a opção de gerar a Client Application, que gera as seguintes classes: (com o Axis embutido)
[list] PDFConverterWS[/list]
[list] PDFConverterWSProxy[/list]
[list] PDFConverterWSService[/list]
[list] PDFConverterWSServiceLocator[/list]
[list] PDFConverterWSSoapBindingStub[/list]
Dai pra voce invocar o seu webservice, (isso se voce tiver acesso a ele), é como abaixo:
[code]
public class TestClient {
public static void main(String[] args) {
PDFConverterWSServiceLocator locator = new PDFConverterWSServiceLocator();
try {
String result = locator.getPDFConverterWS().converteArquivoEmPDF("c:\\temp", "1.xls");
System.out.println(result);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}[/code]
Espero que ajude!
Att.
ceduardo.roque
oi!
consegui gerar as classes que eu precisava!
mas misteriosamente nao sei como fiz isso…
fui criar um novo pacote no projeto e td apareceu la…
guardei o que foi gerado e estou tentando reproduzir o feito…
sem sucesso ainda…
vlw!
mentira… gerei nada… gerei o cliente e ja descobri como.
tenho que gerar o skeleton agora…
Só pq eu mandei poucas mensagens hj…
Quando tento rodar o comando que gera o skeleton (ex: java org.apache.axis.wsdl.WSDL2Java -o ./src -s -S true -p rh.ws config/resource/rh.wsdl) está dando o seguinte erro:
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/axis/wsdl/WSDL2Java
Alguém sabe o que pode ser?
Vi que talvez seja a falta do axis-schema.jar, mas nao consegui baixar ele para colocar no classpath.
vlw!
[quote=.paula]Só pq eu mandei poucas mensagens hj…
Quando tento rodar o comando que gera o skeleton (ex: java org.apache.axis.wsdl.WSDL2Java -o ./src -s -S true -p rh.ws config/resource/rh.wsdl) está dando o seguinte erro:
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/axis/wsdl/WSDL2Java
Alguém sabe o que pode ser?
Vi que talvez seja a falta do axis-schema.jar, mas nao consegui baixar ele para colocar no classpath.
vlw!
[/quote]
Olá .paula!
tudo bem?
então… por que voce está tentando fazer deste jeito?
Por que voce não poe o WSDL num projeto no eclipse, clica em New --> Web Service --> Web Service Client…
E pronto… ele gera todas as classes necessárias pra voce acessar… dai vc faz igual o meu código lá em cima.
att.
ceduardo.roque
Eu fiz isso e realmente ele criou todas aquelas classes.
Mas o que eu preciso criar é o que essas classes vao acessar, entende?
Eu nao tenho acesso ao web service… preciso gerar uma “cópia” dele, p que o lado cliente possa acessar essa cópia.
[quote=.paula]Eu fiz isso e realmente ele criou todas aquelas classes.
Mas o que eu preciso criar é o que essas classes vao acessar, entende?
Eu nao tenho acesso ao web service… preciso gerar uma “cópia” dele, p que o lado cliente possa acessar essa cópia.[/quote]
Entendi… mas dai voce vai ter que criar um web service que tenha os métodos que você quer acessar pra poder testar né?
Para isso, basta criar um Pojo no eclipse, e que tenha o método COM OS PARAMETROS CORRETOS e clica com o botão direito em cima da classe, WEB Services, e Create Web Service.
E pronto, ele já cria o WSDL pro seu “novo” web service. e voce pode fazer o deploy deste no tomcat.
ceduardo.roque