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

Para desenvolver um aplicativo de serviço da Web Java API for XML-Based Web Services (JAX-WS), você deve primeiro desenvolver uma implementação service endpoint interface (SEI) que explícita ou implicitamente descreva o SEI.

Sobre Esta Tarefa

Quando usar uma abordagem ascendente para desenvolver serviços da Web JAX-WS, use a ferramenta de linha de comandos wsgen na implementação do terminal em serviço existente. A ferramenta wsgen processa uma classe de implementação de terminal de serviços compilada como entrada e gera os seguintes artefatos portáveis:
  • 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.
Configurações suportadas Configurações suportadas: As ferramentas de linha de comandos wsimport, wsgen, schemagen e xjc não são suportadas na plataforma z/OS. Essa funcionalidade é permitida pelas ferramentas de montagem fornecidas com o WebSphere Application Server em execução na plataforma z/OS. Consulte sobre essas ferramentas de linha de comandos para aplicativos JAX-WS para saber mais sobre elas.sptcfg
Boas Práticas Boas Práticas: WebSphere Application Server fornece API Java para XML-Based Web Services (JAX-WS) e ferramentas do Java Architecture para XML Binding (JAXB). As ferramentas de linha de comandos wsimport, wsgen, schemagen e xjc estão localizadas no diretório app_server_root\bin\ no WebSphere Application Server tradicional.Os comandos xjc e schemagen estão localizados no diretório app_server_root\jaxb\bin\, no perfil Liberty. Em determinadas ocasiões, os artefatos gerados pelas ferramentas fornecidas pelo WebSphere Application Server e pelo JDK suportam os mesmos níveis das especificações. Em geral, os artefatos gerados pelas ferramentas JDK são portáteis entre outros ambientes de tempo de execução compatíveis. Entretanto, é uma boa prática usar as ferramentas fornecidas com este produto para obter uma perfeita integração no ambiente do WebSphere Application Server e para aproveitar os recursos que talvez só sejam suportados no WebSphere Application Server. Para usufruir das vantagens dos conjuntos de ferramentas JAX-WS e JAXB V2.2, use as ferramentas fornecidas com o servidor de aplicativos localizado no diretório app_server_root\bin\.bprac

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

  1. Localize o arquivo de classe de implementação de terminal de serviço.
  2. Execute o comando wsgen para gerar os artefatos portáveis. A ferramenta wsgen está localizada no diretório app_server_root/bin/.
    [Windows]
    app_server_root\bin\wsgen.bat [options] service_implementation_class
    [AIX][HP-UX][Linux][Solaris]
    app_server_root/bin/ wsgen.sh [options] service_implementation_class
    [IBM i]
    app_server_root/bin/ wsgen [options] service_implementation_class
    (Opcional) Utilize as seguintes opções com o comando wsgen:
    • Utilize a opção -verbose para ver uma lista de arquivos gerados juntamente com mensagens informativas adicionais.
    • Utilize a opção -keep para manter arquivos Java gerados.
    • Utilize a opção -wsdl para gerar um arquivo WSDL. Se você estiver desenvolvendo um bean de implementação de serviço que seja chamado utilizando-se o transporte HTTP, o arquivo WSDL gerado pela ferramenta de linha de comandos wsgen durante essa etapa será opcional. No entanto, se estiver desenvolvendo um bean de implementação de serviço que seja chamado utilizando-se o transporte SOAP via JMS, o arquivo WSDL gerado pela ferramenta wsgen durante essa etapa será necessário em etapas de desenvolvimento subseqüentes de aplicativos JAX-WS, portanto, não é opcional.

    Consulte sobre wsgen para obter informações adicionais sobre esse comando e opções adicionais que podem ser especificadas.

Resultados

Você tem os artefatos Java necessários para criar um serviço da Web JAX-WS.

Evitar Problemas Evitar Problemas: O comando wsgen não diferencia o espaço de nomes XML entre várias anotações XMLType que têm o mesmo nome @XMLType definido nos diferentes pacotes Java. Quando esse cenário ocorre, o seguinte erro é produzido:
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.gotcha

Com 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

O exemplo a seguir demonstra como usar o comando wsgen para processar a classe de implementação de terminal em serviço para gerar artefatos JAX-WS. Este exemplo de classe de implementação de serviço EchoService utiliza um terminal em serviço JavaBeans explícito.
  1. 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);
    
    }
  2. 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.
    [Windows]
    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\
    [Linux][AIX][HP-UX][Solaris]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/
Depois de gerar os artefatos Java utilizando o comando wsgen, são gerados os seguintes arquivos:
/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.


Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_devjaxwsartifactsbean
Nome do arquivo: twbs_devjaxwsartifactsbean.html