Pessoal,
No forum tem trocentos post sobre JAXB, XML, Marshalling, Validação, Schema.
Deve ser muito fácil pois ninguém diz como criar um XML a partir disso tudo.
Nao to falando de pegar um XML, ler e usá-lo validando.
To falando de criar um novo usando as classes geradas pelo JAXB.
Como se começa um novo XML que seguirá um xsd???
Tentei por exemplo assim:
JAXBElement<Carro> element = ObjectFactory().getCarro(); //algo assim
Mas diz que precisa de um JAXBElement e tá vindo um Carro , somente.
Alguém tem idéia se tem mudar o factory, ou se tem de fazer um casting?
Em outro posto achei um código extenso:
private void exportToXML(Collection col, String xsdFileName, String xmlFileName) {
try {
JAXBContext context = JAXBContext.newInstance("br.com.kyros.resolucao447.rbr");
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(new File(xsdFileName));
Marshaller marsh = context.createMarshaller();
marsh.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, new Boolean(true));
marsh.setEventHandler(new ValidationEventHandler() {
// allow unmarshalling to continue even if there are errors
public boolean handleEvent(ValidationEvent ve) {
// ignore warnings
if (ve.getSeverity() != ValidationEvent.WARNING) {
ValidationEventLocator vel = ve.getLocator();
System.out.println("Line:Col[" + vel.getLineNumber()
+ ":" + vel.getColumnNumber()
+ "]:" + ve.getMessage());
}
return false;
}
});
marsh.setSchema(schema);
marsh.marshal(col.iterator().next(), new FileOutputStream("c:\\" + xmlFileName));
} catch (JAXBException jaxbe) {
jaxbe.printStackTrace();
} catch (SAXException saxe) {
saxe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
Mas não diz o que tem nessa Collection que vem como parâmetro. Alguém tem idéia do que seja?
Desde já agradeço. Tá muito dificil de encontrar algo consistente que abranja tudo isso de XML.
Cada post tem um pedaço incompleto e quase ninguém volta, depois que achou o problema, para postar a solução.