Gerar xsd a partir de classes java com validação

9 respostas
Lucas_Cavalcanti

Olá pessoal…

usando o jaxb conseguimos a partir de um xsd gerar POJOs e a partir deles
fazer marshalling e unmarshalling de objetos para xml…

usando o xjc do jaxb conseguimos gerar as classes java a partir do xsd…

e usando o schemagen do jaxb conseguimos gerar um xsd a partir das classes java…
o problema é que esse schemagen não gera um xsd com validação de elementos
(elemento X não pode ter mais de 10 caracteres, elemento Y não tem que obedecer
a expressão regular Z, etc)

enfim, minhas classes java estão com as anotações do jaxb (@XmlType, @XmlElement, etc)
e eu quero gerar um xsd delas… mas o xsd que o schemagen gera é muito básico
(praticamente só coloca os atributos da classe num elemento do xsd com o nome da classe,
e diz se a ordem importa ou não)

alguém conhece alguma outra ferramenta pra gerar xsd a partir de classes, ou algum jeito
de usar o schemagen de uma forma mais completa??

[]'s

9 Respostas

J

Lucascs,

se vc tiver usando o JDeveloper da Oracle, vai em NEW>General>XML>XML Document from XML Schema

pronto…siga as orientações e seu XSD será criado.

J

Lucascs,

vc sabe validar o schema??

eu to tendo esse problema…ve se vc pode me ajudar

eu estou validando um schema (XSD) usando JAXP…

tenho esse código

static 
{ 
System.setProperty("org.apache.xerces.xni.parser.XMLParserConfiguration", "org.apache.xerces.parsers.XMLGrammarCachingConfiguration"); 
String schemaLanguage = XMLConstants.W3C_XML_SCHEMA_NS_URI; 
sfactory = SchemaFactory.newInstance(schemaLanguage); 
}

mas ta aparecendo esse erro:

<blockquote>

view plaincopy to clipboardprint?

java.lang.ExceptionInInitializerError

Caused by: java.lang.IllegalArgumentException: <a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>

at javax.xml.validation.SchemaFactory.newInstance(SchemaFactory.java:181)

at br.com.cna.util.xml.JAXPValidate.(JAXPValidate.java:54)

Process exited.

java.lang.ExceptionInInitializerError

Caused by: java.lang.IllegalArgumentException: <a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>

at javax.xml.validation.SchemaFactory.newInstance(SchemaFactory.java:181)

at br.com.cna.util.xml.JAXPValidate.(JAXPValidate.java:54)

Process exited. </blockquote>

Voce sabe me dizer porque da esse erro?

Lucas_Cavalcanti

Muito provavelmente a implementação que vc tá usando do JAXP não
tem esse atributo implementado…

Teoricamente esse código valida o xml:

Schema schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(xsd);
schema.newValidator().validate(new StreamSource(xml));
J

Não entendi o que vc quis dizer com isso…

Muito provavelmente a implementação que vc tá usando do JAXP não tem esse atributo implementado...

Lucas_Cavalcanti

O que acontece é que o java apenas especifica as APIs…

esse SchemaFactory.newInstance é implementado por alguem… provavelmente
o xerces (julgando pelas primeiras linhas do código)…

tenta ver se vc não está com uma versão muito antiga do xerces, ou está usando
alguma implementação beta do jaxp

J

Lucascs,

acabei de testar com o código que vc me passou e deu o mesmo erro.
Provavelmente deve ser biblioteca mesmo…vou testar e posto aqui

J

É…esse maldito erro continua

<blockquote>

java.lang.ExceptionInInitializerError

Caused by: java.lang.IllegalArgumentException: <a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>

at javax.xml.validation.SchemaFactory.newInstance(SchemaFactory.java:181)

at br.com.cna.util.xml.JAXPValidate.(JAXPValidate.java:54)

Process exited. </blockquote>

Para fazer funcionar, as bibliotecas jaxp-api.jar
jaxrpc.jar
xercesImpl.jar são suficientes? ou preciso de outras?

Lucas_Cavalcanti

Na verdade, se vc estiver usando o Java 6 já funciona…
não precisa adicionar o jaxp-api nem nada…

J

Lucascs

já encontrei o problema…é que eu tava usando o java 1.4. E a validacao schema XSD só tem suporte para JDK 5

valeu pela ajuda

Criado 17 de março de 2008
Ultima resposta 19 de ago. de 2008
Respostas 9
Participantes 2