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
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.



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.

- 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")
Procedimento
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.

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.gotchaExemplo
- 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; } }
- Abra um prompt de comandos.
- Execute a ferramenta do gerador de esquema schemagen a partir do diretório no qual você copiou o arquivo Bookdata.java.
app_server_root\bin\schemagen.bat Bookdata.java
app_server_root/bin/schemagen.sh Bookdata.java
app_server_root/bin/schemagen Bookdata.java
- 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.