Usando a ferramenta schemagen JAXB para gerar um arquivo de esquema XML a partir de uma classe Java

Use a ferramenta schemagen Java™ Architecture for XML Binding (JAXB) para gerar um arquivo de esquema XML a partir de classes Java.

Antes de Iniciar

Identifique as classes Java ou um conjunto de objetos Java para mapear para um arquivo esquema XML.

Sobre Esta Tarefa

Utilize APIs e ferramentas de JAXB para estabelecer mapeamentos entre classes Java e o esquema XML. Os documentos dos esquemas XML descrevem os elementos de dados e os relacionamentos em um documento XML. Após a existência de uma ligação ou mapeamento de dados, é possível converter os documentos XML para e a partir de objetos Java. Agora você pode acessar dados armazenados em um documento XML sem a necessidade de entender a estrutura dos dados.

Para desenvolver serviços da Web usando uma abordagem de desenvolvimento ascendente começando a partir de JavaBeans ou enterprise beans existentes, use a ferramenta wsgen para gerar os artefatos para aplicativos Java API for XML-Based Web Services (JAX-WS). Após a geração dos artefatos Java para o seu aplicativo, é possível criar um documento do esquema XML a partir de um aplicativo Java existente que representa os elementos de dados de um aplicativo Java usando o gerador de esquema JAXB, ferramenta da linha de comandos schemagen. O gerador de esquema JAXB processa os arquivos de classe ou arquivos de origem Java. As anotações de classe Java fornecem a capacidade para customizar os mapeamentos padrão a partir de classes Java existentes para os componentes do esquema gerados. O arquivo de esquema XML juntamente com os arquivos de classe Java anotados contém todas as informações necessárias que o tempo de execução JAXB necessita para analisar os documentos XML para marshaling e unmarshaling.

É possível criar um documento de esquema XML a partir de um aplicativo Java existente que representa os elementos de dados de um aplicativo Java, utilizando o gerador de esquema JAXB, ferramenta de linha de comandos schemagen. O gerador de esquema JAXB processa os arquivos de classe ou arquivos de origem Java. As anotações de classe Java fornecem a capacidade para customizar os mapeamentos padrão a partir de classes Java existentes para os componentes do esquema gerados. O arquivo de esquema XML juntamente com os arquivos de classe Java anotados contém todas as informações necessárias que o tempo de execução JAXB necessita para analisar os documentos XML para marshaling e unmarshaling.

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
Configurações suportadas Configurações suportadas: Esse produto suporta a especificação JAXB 2.2. JAX-WS 2.2 requer JAXB 2.2 para ligação de dados. sptcfg

O JAXB fornece suporte de compilação para permitir que você configure o gerador de esquema schemagen de modo que não gere automaticamente um novo esquema. Isso será útil, se você estiver utilizando um esquema comum, como o W3C (World Wide Web Consortium), o Esquema XML, o WSDL (Web Services Description Language) ou o WS-Addressing, e não quiser que um novo esquema seja gerado para um determinado pacote referenciado. O atributo location na anotação @XmlSchema faz com que o gerador schemagen se refira ao URI do esquema existente em vez de gerar um novo.

Além de usar a ferramenta schemagen da linha de comandos, você pode chamar esta ferramenta JAXB a partir dos ambientes de construção Ant. Use a tarefa Ant com.sun.tools.jxc.SchemaGenTask a partir do ambiente de construção Ant para chamar a ferramenta do gerador de esquema schemagen. Para funcionar adequadamente, esta tarefa Ant requer que chame Ant usando o script ws_ant.

Evitar Problemas Evitar Problemas: Ao executar a ferramenta schemagen, o gerador de esquema não lê corretamente as anotações @XmlSchema a partir do arquivo de classe package-info para derivar targetNamespaces. Em vez de usar a anotação @XMLSchema, use um dos seguintes métodos:
  • Forneça um arquivo package-info.java com o @XmlSchema; por exemplo:
    schemagen sample.Address sample\package-info.java
  • Use o atributo de espaço de nomes da anotação @XmlType para especificar um espaço de nomes; por exemplo:
    @XmlType(namespace="http://myNameSpace")
gotcha

Procedimento

  1. Localize os arquivos de origem Java ou os arquivos de classe Java a serem utilizados na geração de um arquivo esquema XML. Assegure-se de que todas as classes referenciadas por seus arquivos de classe Java estejam contidos no classpath ou sejam fornecidos à ferramenta utilizando as opções-classpath/-cp.
  2. Utilize o gerador de esquema JAXB, o comando schemagen, para gerar um esquema XML. O gerador de esquema está localizado no diretórioapp_server_root\bin\.
    [Windows]
    app_server_root\bin\schemagen.bat myObj1.java myObj2.java
    [AIX][HP-UX][Linux][Solaris]
    app_server_root/bin/schemagen.sh myObj1.java myObj2.java
    [IBM i]
    app_server_root/bin/schemagen myObj1.java myObj2.java

    Os parâmetros myObj1.java e myObj2.java são os nomes dos arquivos Java que contêm os objetos de dados. Se myObj1.java ou myObj2.java referirem-se a classes Java não transmitidas para o comando schemagen, você deverá usar a opção -cp para fornecer o local de classpath para essas classes Java.

    Consulte sobre o comando schemagen para obter informações adicionais sobre esse comando e opções adicionais que podem ser especificadas.
  3. (Opcional) Utilize as anotações do programa JAXB definidas no pacote javax.xml.bind.annotations para customizar os mapeamentos de esquema XML JAXB.
  4. (Opcional) Configure a propriedade location na anotação @XmlSchema para indicar ao compilador de esquema para usar um esquema existente em vez de gerar um novo. Por exemplo:
    @XmlSchema(namespace="foo")
    package foo;
    @XmlType
    class Foo {
    @XmlElement Bar zot;
    }
    @XmlSchema(namespace="bar",
    location="http://example.org/test.xsd")
    package bar;
    @XmlType
    class Bar {
    ...
    }
    <xs:schema targetNamespace="foo">
    <xs:import namespace="bar"
    schemaLocation="http://example.org/test.xsd"/>
    <xs:complexType name="foo">
    <xs:sequence>
    <xs:element name="zot" type="bar:Bar" xmlns:bar="bar"/>
    </xs:sequence>
    </xs:complex
    O location="http://example.org/test.xsd" indica o local no esquema existente para a ferramenta schemagen e um novo esquema não é gerado.

Resultados

Agora que você gerou um arquivo esquema XML a partir de classes Java, está pronto para executar marshal e unmarshal dos objetos Java como documentos de instância XML.

Evitar Problemas Evitar Problemas: O comando schemagen 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:
Error: Two classes have the same XML type name ....
Utilize @XmlType.name e @XmlType.namespace para designar nomes diferentes a elas...
Este erro indica que você possui nomes de classe ou valores @XMLType.name que possuem o mesmo nome, mas existem dentro de diferentes pacotes Java. Para evitar esse erro, inclua a classe @XML.Type.namespace na anotação @XMLType existente para diferenciar entre os tipos XML.gotcha

Exemplo

O seguinte exemplo ilustra como a ferramenta JAXB pode gerar um arquivo de esquema XML a partir de uma classe Java existente, Bookdata.java.
  1. Copie o arquivo Bookdata.java a seguir para um diretório temporário.
    package generated;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlType;
    import javax.xml.datatype.XMLGregorianCalendar;
    
    
    
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "bookdata", propOrder = {
        "author",
        "title",
        "genre",
        "price",
        "publishDate",
        "description"
    })
    public class Bookdata {
    
        @XmlElement(required = true)
        protected String author;
        @XmlElement(required = true)
        protected String title;
        @XmlElement(required = true)
        protected String genre;
        protected float price;
        @XmlElement(name = "publish_date", required = true)
        protected XMLGregorianCalendar publishDate;
        @XmlElement(required = true)
        protected String description;
        @XmlAttribute
        protected String id;
    
         public String getAuthor() {
            return author;
        }
        public void setAuthor(String value) {
            this.author = value;
        }
        public String getTitle() {
            return title;
        }
    
         public void setTitle(String value) {
            this.title = value;
        }
    
      
        public String getGenre() {
            return genre;
        }
       
        public void setGenre(String value) {
            this.genre = value;
        }
    
        
        public float getPrice() {
            return price;
        }
    
        
        public void setPrice(float value) {
            this.price = value;
        }
    
       
        public XMLGregorianCalendar getPublishDate() {
            return publishDate;
        }
    
        
        public void setPublishDate(XMLGregorianCalendar value) {
            this.publishDate = value;
        }
    
       
        public String getDescription()  {
            return description;
        }
    
        
        public void setDescription(String value) {
            this.description = value;
        }
    
       
        public String getId() {
            return id;
        }
    
        
        public void setId(String value) {
            this.id = value;
        }
    
    }
  2. Abra um prompt de comandos.
  3. Execute a ferramenta do gerador de esquema schemagen a partir do diretório no qual você copiou o arquivo Bookdata.java.
    [Windows]
    app_server_root\bin\schemagen.bat Bookdata.java
    [Linux][AIX][HP-UX][Solaris]
    app_server_root/bin/schemagen.sh Bookdata.java 
    [IBM i]
    app_server_root/bin/schemagen Bookdata.java
  4. O arquivo de esquema XML, schema1.xsd, é gerado:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    
      <xs:complexType name="bookdata">
        <xs:sequence>
          <xs:element name="author" type="xs:string"/>
          <xs:element name="title" type="xs:string"/>
          <xs:element name="genre" type="xs:string"/>
          <xs:element name="price" type="xs:float"/>
          <xs:element name="publish_date" type="xs:anySimpleType"/>
          <xs:element name="description" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:string"/>
      </xs:complexType>
    </xs:schema>

Consulte a documentação de implementação JAXB Reference para obter informações adicionais sobre o comando schemagen.


Í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_jaxbjava2schema
Nome do arquivo: twbs_jaxbjava2schema.html