Desenvolvendo um Cliente JAX-WS de um Arquivo WSDL
O conjunto de ferramentas da Java™ API for XML-Based Web Services (JAX-WS) suporta a geração de artefatos Java que você precisa para desenvolver clientes de serviços da Web JAX-WS estáticos ao iniciar com um arquivo Web Services Description Language (WSDL).
Antes de Iniciar
Se o arquivo WSDL for um arquivo local, a URL será semelhante
a este exemplo: file:drive:\path\file_name.wsdl.
Se
o arquivo WSDL for um arquivo local, a URL será semelhante a este exemplo: file:/path/file_name.wsdl.
Você também pode especificar os arquivos locais utilizando o caminho do sistema de arquivos absoluto ou relativo.
Sobre Esta Tarefa
- SEI (Service Endpoint Interface)
- Classe de Serviço
- Classe de exceção que é mapeada a partir da classe wsdl:fault (se houver uma)
- O JAXB (Java Architecture for XML Binding) gerou valores de tipo que são classes Java mapeadas a partir dos tipos de esquema XML


Além de usar as ferramentas da linha de comandos, você pode chamar essas ferramentas JAX-WS a partir de ambientes de construção Ant. Use a tarefa Ant com.sun.tools.ws.ant.WsImport a partir do ambiente de construção Ant para chamar a ferramenta wsimport. Para funcionar adequadamente, esta tarefa Ant requer que chame Ant usando o script ws_ant.
Procedimento
![[Windows]](../images/windows.gif)
app_server_root\bin\wsimport.bat wsdl_URL
![[AIX]](../images/aixlogo.gif)
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
app_server_root/bin/wsimport.sh wsdl_URL
![[IBM i]](../images/iseries.gif)
app_server_root/bin/wsimport wsdl_URL
- Use a opção -verbose para ver uma lista de arquivos gerados ao executar o comando.
- Utilize a opção -keep para manter arquivos Java gerados.
- Utilize a opção -wsdlLocation para especificar o local do arquivo
WSDL.
Boas Práticas: Uma boa prática para garantir que você produza um enterprise archive (EAR) de cliente de serviços da Web JAX-WS que seja portátil para outros sistemas é compactar o documento WSDL dentro do módulo aplicativo como um arquivo Java archive (JAR) ou um arquivo web application archive (WAR). É possível especificar um URI relativo para o local do arquivo WSDL utilizando o atributo de anotação -wsdllocation. Por exemplo, se seu arquivo MyService.wsdl estiver localizado no diretório META-INF/wsdl/, execute a ferramenta wsimport e use a opção -wsdllocation para especificar o valor a ser usado para o local do arquivo WSDL. Isso garante que os artefatos gerados contenham as informações corretas de -wsdllocation necessárias quando o aplicativo é carregado no console administrativo, por exemplo:
bpracwsimport -keep -wsdllocation /META-INF/wsdl/MyService.wsdl
- Utilize a opção -b se estiver utilizando customizações de WSDL ou de esquema
para especificar arquivos de ligação externos que contenham suas customizações.
É possível customizar as ligações em seu arquivo WSDL para permitir arquivos de mapeamentos ou anexos assíncronos. Para gerar interfaces assíncronas, inclua a declaração de ligação enableAsyncMapping de customização apenas do cliente no elemento wsdl:definitions ou em um arquivo de ligação externo que seja definido no arquivo WSDL. Use a declaração de ligação enableMIMEContent em seu cliente customizado ou arquivo de ligação do servidor ou desative as regras de mapeamento mime:content padrão. Para informações adicionais sobre declarações de ligações customizadas, consulte o capítulo 8, especificação JAX-WS.
Consulte sobre wsimport para obter informações adicionais sobre esse comando e opções adicionais que podem ser especificadas.
Resultados
Exemplo
- Copie o arquivo ping.wsdl a seguir para um diretório temporário.
<?xml version="1.0" encoding="UTF-8"?> <!-- * Este programa pode ser usado, executado, copiado, modificado e distribuído * sem os direitos autorais para fins de desenvolvimento, uso, marketing ou distribuição. --> <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://com/ibm/was/wssample/sei/ping/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="PingService" targetNamespace="http://com/ibm/was/wssample/sei/ping/"> <wsdl:types> <xsd:schema targetNamespace="http://com/ibm/was/wssample/sei/ping/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="pingStringInput"> <xsd:complexType> <xsd:sequence> <xsd:element name="pingInput" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="pingOperationRequest"> <wsdl:part element="tns:pingStringInput" name="parameter" /> </wsdl:message> <wsdl:portType name="PingServicePortType"> <wsdl:operation name="pingOperation"> <wsdl:input message="tns:pingOperationRequest" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="PingSOAP" type="tns:PingServicePortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="pingOperation"> <soap:operation soapAction="pingOperation" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> </wsdl:operation> </wsdl:binding> <wsdl:service name="PingService"> <wsdl:port binding="tns:PingSOAP" name="PingServicePort"> <soap:address location="http://localhost:9080/WSSampleSei/PingService" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
- Execute o comando wsimport a partir do diretório
app_server_root\bin\.
app_server_root\bin\wsimport.bat -keep -verbose ping.wsdl
Sistemas operacionais, como AIX ou Linux especificam a origem do script para o shell pai para herdar as variáveis exportadas, executando o seguinte comando:
a partir do diretório . /app_server_root>/bin. Execute o seguinte comando wsimport:. ./setupCmdLine.sh (Observe o espaço entre os pontos).
app_server_root/bin/wsimport.sh -keep -verbose ping.wsdl
app_server_root/bin/wsimport -keep -verbose ping.wsdl
com\ibm\was\wssample\sei\ping\ObjectFactory.java
com\ibm\was\wssample\sei\ping\package-info.java
com\ibm\was\wssample\sei\ping\PingServicePortType.java
com\ibm\was\wssample\sei\ping\PingService.java
com\ibm\was\wssample\sei\ping\PingStringInput.java
Os arquivos ObjectFactory.java, PingService.java e PingServicePortType.java são arquivos de classe Java gerados para usar quando compactar os artefatos Java com sua implementação do cliente dentro de um arquivo Java archive (JAR) ou de umarquivo Web application archive (WAR).