Pessoal,
estou com dificuldade para exportar meus dados para o xml, validando com um xsd. O xsd foi criado utilizando o editor do netbeans 6, as classes java foram criadas utilizando o utilitário do JAXB: xjc.bat. Eu não deveria ter problemas já que as classes java refletem os xsd, mas eu tenho o seguinte erro:
Line:Col[-1:-1]:cvc-elt.1: Cannot find the declaration of element 'root'.
javax.xml.bind.MarshalException
- with linked exception:
[org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'root'.]
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:331)
at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:257)
at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:75)
at br.com.kyros.resolucao447.ExcelParser.exportToXML(ExcelParser.java:362)
at br.com.kyros.resolucao447.ExcelParser.exportarXMLRBR(ExcelParser.java:175)
at br.com.kyros.resolucao447.ExcelParser.readXLS(ExcelParser.java:87)
at br.com.kyros.resolucao447.ExcelParser.<init>(ExcelParser.java:66)
at br.com.kyros.resolucao447.ExcelParser.main(ExcelParser.java:379)
Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'root'.
at com.sun.org.apache.xerces.internal.jaxp.validation.Util.toSAXParseException(Util.java:109)
at com.sun.org.apache.xerces.internal.jaxp.validation.ErrorHandlerAdaptor.error(ErrorHandlerAdaptor.java:104)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:382)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:316)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1944)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:705)
at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorHandlerImpl.startElement(ValidatorHandlerImpl.java:335)
at org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:527)
at com.sun.xml.bind.v2.runtime.output.SAXOutput.endStartTag(SAXOutput.java:124)
at com.sun.xml.bind.v2.runtime.output.ForkXmlOutput.endStartTag(ForkXmlOutput.java:102)
at com.sun.xml.bind.v2.runtime.XMLSerializer.endAttributes(XMLSerializer.java:302)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsSoleContent(XMLSerializer.java:588)
at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:312)
at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:490)
at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:328)
... 7 more
eis o meu xsd:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xml.netbeans.org/schema/RBR"
xmlns:tns="http://xml.netbeans.org/schema/RBR"
elementFormDefault="unqualified">
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Cabecalho" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Itens" minOccurs="1" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="Qualificacao" type="xsd:string" use="required"/>
<xsd:attribute name="EntidadeRespGuarda" type="xsd:string" use="required"/>
<xsd:attribute name="Vinculacao" type="xsd:string" use="required"/>
<xsd:attribute name="NumPatrimonio" type="xsd:string" use="required"/>
<xsd:attribute name="SBNPatrimonio" type="xsd:string" use="optional" />
<xsd:attribute name="DataIncorporacao" type="xsd:dateTime" use="required" />
<xsd:attribute name="Descricao" type="xsd:string" use="required" />
<xsd:attribute name="NomeFabricante" type="xsd:string" />
<xsd:attribute name="Modelo" type="xsd:string" />
<xsd:attribute name="Serie" type="xsd:string" />
<xsd:attribute name="Quantidade" type="xsd:long" use="required" />
<xsd:attribute name="Referencia" type="xsd:int" use="required" />
<xsd:attribute name="Localizacao" type="xsd:string" use="required" />
<xsd:attribute name="Numero" type="xsd:int" />
<xsd:attribute name="Bairro" type="xsd:string" />
<xsd:attribute name="Complemento" type="xsd:string" />
<xsd:attribute name="UF" type="xsd:string" use="required" />
<xsd:attribute name="CEP" type="xsd:long" />
<xsd:attribute name="CodigoMunicipio" type="xsd:long" />
<xsd:attribute name="CustoAquisicao" type="xsd:double" use="required" />
<xsd:attribute name="DepreciacaoAcumulada" type="xsd:double" use="required" />
<xsd:attribute name="ValorResidual" type="xsd:double" use="required" />
<xsd:attribute name="PatrimonioPrestadora" type="xsd:string" use="required"/>
<xsd:attribute name="Onerado" type="xsd:string" use="required" />
<xsd:attribute name="EstadoConservacao" type="xsd:int" use="required" />
<xsd:attribute name="NumeroContaRBR" type="xsd:string" use="required" />
<xsd:attribute name="NumeroContaEmpresa" type="xsd:string" />
<xsd:attribute name="DescricaoContaEmpresa" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="TipoArquivo" type="xsd:int"/>
<xsd:attribute name="AnoReferencia" type="xsd:int"/>
<xsd:attribute name="NumeroContratoAnatel" type="xsd:long"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
este é o código de exportação, quem souber de algo
private void exportToXML(Collection col, String xsdFileName, String xmlFileName){
try{
//DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
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();
}
}