Gerando Artefatos Java para Aplicativos JAX-WS
Use as ferramentas da Java™ API for XML-Based Web Services (JAX-WS) para gerar os artefatos do JAX-WS e Java Architecture for XML Binding (JAXB) Java necessários para os aplicativos de serviços da Web JAX-WS quando iniciar a partir dos componentes JavaBeans ou enterprise beans.
Antes de Iniciar
Sobre Esta Tarefa
- As classes JAXB (Java Architecture for XML Binding) que são necessárias para organizar e desorganizar o conteúdo da mensagem.
- um arquivo WSDL (Web Services Description Language), se o argumento -wsdl opcional for especificado.


Não é necessário que você desenvolva um arquivo WSDL durante o desenvolvimento dos serviços da Web JAX-WS utilizando a abordagem bottom-up de começar com JavaBeans. O uso de anotações fornece todas as informações do WSDL necessárias para configurar o terminal de serviço ou o cliente. O servidor de aplicativos suporta documentos WSDL 1.1 que estão em conformidade com as especificações WS-I (Web Services-Interoperability) Basic Profile 1.1 e são documentos em estilo Documento/Literal ou RPC/Literal. Além disso, documentos WSDL com ligações que declaram um atributo USE de valor LITERAL são suportados, enquanto o valor ENCODED não é suportado. Para documentos WSDL que implementam um padrão agrupado Document/Literal, um elemento raiz é declarado no esquema XML e utilizado como um wrapper de operação para um fluxo de mensagens. Separe as definições do elemento wrapper que existem para pedido e resposta.
Para assegurar-se de que o comando wsgen não perca os métodos herdados em um bean de implementação de terminal de serviço, você deve incluir a anotação @WebService na superclasse desejada ou pode substituir o método herdado na classe de implementação por uma chamada para o método de superclasse.
Embora um arquivo WSDL seja normalmente opcional ao desenvolver um bean de implementação de serviço JAX-WS, ele será necessário se seus terminais JAX-WS forem expostos utilizando-se o transporte SOAP via JMS e você estiver publicando seu arquivo WSDL. Se você estiver desenvolvendo um bean de implementação de serviço JavaBeans corporativo que é chamado utilizando-se o transporte SOAP via JMS e quiser publicar o WSDL para que o arquivo WSDL publicado contenha a URL de terminal JMS resolvida completa, deixe a ferramenta wsgen gerar o arquivo WSDL especificando o argumento -wsdl . Nesse cenário, você deve compactar o arquivo WSDL com o seu aplicativo de serviço da Web.
Além de usar as ferramentas da linha de comandos, você pode chamar estas ferramentas JAX-WS a partir de ambientes de construção Ant. Use a tarefa Ant com.sun.tools.ws.ant.WsGen de dentro do ambiente de construção Ant para chamar a ferramenta wsgen. Para funcionar adequadamente, esta tarefa Ant requer que chame Ant usando o script ws_ant.
Procedimento
Resultados
Você tem os artefatos Java necessários para criar um serviço da Web JAX-WS.

Erro: duas classes têm o mesmo nome de tipo XML ....
Utilize @XmlType.name e @XmlType.namespace para designar nomes diferentes a elas...
Esse
erro indica que você possui classes ou valores @XMLType.name
com o mesmo nome, mas que existem em pacotes Java diferentes. Para evitar esse erro, inclua a classe
@XML.Type.namespace na anotação @XMLType existente para diferenciar entre os tipos XML.gotchaCom os aplicativos JAX-WS, a ferramenta da linha de comandos wsgen poderá não localizar os arquivos de classes compartilhadas. É possível especificar o local desses arquivos de classe utilizando a propriedade customizadacom.ibm.websphere.webservices.WSDL_Generation_Extra_ClassPath. Para obter informações adicionais, consulte a documentação sobre as propriedades customizadas da Java virtual machine.
Exemplo
- Copie o arquivo de classe de implementação de serviço de amostra
EchoServicePortTypeImpl e o arquivo de classe da interface
de serviço EchoServicePortType associado em um diretório.
O diretório deve conter uma estrutura em árvore do diretório que corresponde ao
nome do pacote com.ibm.was.wssample.echo para o arquivo de classe.
/* Esse é o arquivo EchoServicePortTypeImpl.java de amostra. */ package com.ibm.was.wssample.echo; @javax.jws.WebService(serviceName = "EchoService", endpointInterface = "com.ibm.was.wssample.echo.EchoServicePortType", targetNamespace="http://com/ibm/was/wssample/echo/", portName="EchoServicePort") public class EchoServicePortTypeImpl implements EchoServicePortType { public EchoServicePortTypeImpl() { } public String invoke(String obj) { System.out.println(">> Serviço do Provedor JAXB: Request received.\n"); String str = "Failed"; if (obj != null) { try { str = obj; } catch (Exception e) { e.printStackTrace(); } } return str; } }
/* Esse é um arquivo EchoServicePortType.java de amostra. */ package com.ibm.was.wssample.echo; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.ws.RequestWrapper; import javax.xml.ws.ResponseWrapper; @WebService(name = "EchoServicePortType", targetNamespace = "http://com/ibm/was/wssample/echo/", wsdlLocation="WEB-INF/wsdl/Echo.wsdl") public interface EchoServicePortType { /** * * @param arg0 * @return * returns java.lang.String */ @WebMethod @WebResult(name = "response", targetNamespace = "http://com/ibm/was/wssample/echo/") @RequestWrapper(localName = "invoke", targetNamespace = "http://com/ibm/was/wssample/echo/", className = "com.ibm.was.wssample.echo.Invoke") @ResponseWrapper(localName = "echoStringResponse", targetNamespace = "http://com/ibm/was/wssample/echo/", className = "com.ibm.was.wssample.echo.EchoStringResponse") public String invoke( @WebParam(name = "arg0", targetNamespace = "http://com/ibm/was/wssample/echo/") String arg0); }
- Execute o comando wsgen a partir do diretório
app_server_root\bin\. A opção -cp especifica o local do arquivo de classe de
implementação do serviço. A opção -s especifica o diretório para os arquivos de origem
gerados. A opção -d especifica o diretório para os arquivos de saída
gerados. Ao usar as opções
-s ou -d, é necessário criar primeiro o
diretório para os arquivos de saída gerados.
app_server_root\bin\wsgen.bat -wsdl -s c:\generated_source\ -cp c:\my_application\classes\ com.ibm.was.wssample.echo.EchoServicePortTypeImpl -verbose -d c:\generated_artifacts\
Execute o comando wsgen, por exemplo:
app_server_root/bin/wsgen.sh -wsdl -s c:/generated_source/ -cp c:/my_application/classes/ com.ibm.was.wssample.echo.EchoServicePortTypeImpl -verbose -d c:/generated_artifacts/
/generated_source/com/ibm/was/wssample/echo/EchoStringResponse.java
/generated_source/com/ibm/was/wssample/echo/Invoke.java
/generated_artifacts/EchoService.wsdl
/generated_artifacts/EchoService_schema1.xsd
/generated_artifacts/com/ibm/was/wssample/echo/EchoStringResponse.class
/generated_artifacts/com/ibm/was/wssample/echo/Invoke.class
Os arquivos EchoStringResponse.java e Invoke.java são os arquivos de classe Java gerados. As versões compiladas dos arquivos Java gerados são os arquivos EchoStringResponse.class e Invoke.class. Os arquivos EchoService.wsdl e EchoService_schema1.xsd são gerados porque a opção -wsdl foi especificada.
O que Fazer Depois
Conclua a implementação do seu aplicativo de serviço da Web JAX-WS.