unmarshal parse jaxbunmarshaller example convert java jaxb unmarshalling

parse - javax.xml.bind.UnmarshalException: elemento inesperado. Los elementos esperados son(ninguno)



string unmarshal jaxb (3)

Alternativamente, si desea persistir en el uso de la clase DocumentType . Luego, puede agregar la siguiente anotación sobre su clase DocumentType.

@XmlRootElement(name="document")

Nota: el "document" valor de cadena se refiere al nombre de la etiqueta raíz del mensaje xml.

Recibo este error, mientras deshago una cadena. He creado archivos Java usando JAXB.

JAXBContext jaxbContext = JAXBContext.newInstance(DocumentType.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); // Input string posted below DocumentType dType = (DocumentType) unmarshaller.unmarshal(new StringReader("input string"));

Stack trace:

Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd", local:"document"). Expected elements are (none) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:647) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:243) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:238) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:105) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1048) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:483) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:465) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:135) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:376) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:602) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3065) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:881) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:203) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:175) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:214) at JaxbTest.main(JaxbTest.java:19)

XSD:

<?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd" elementFormDefault="qualified"> <xs:element name="document" type="tns:documentType"></xs:element> <xs:complexType name="documentType"> <xs:sequence> <xs:element name="businessCard" type="tns:businessCardType" minOccurs="0" maxOccurs="1"></xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="businessCardType"> <xs:sequence> <xs:element name="field" type="tns:fieldType" minOccurs="0" maxOccurs="unbounded"></xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="fieldType"> <xs:sequence> <xs:element name="value" type="xs:string" minOccurs="1" maxOccurs="1"> </xs:element> <xs:element name="characters" type="tns:charactersType" minOccurs="0" maxOccurs="1"></xs:element> <xs:element name="fieldComponents" type="tns:fieldComponentsType" minOccurs="0" maxOccurs="1"></xs:element> </xs:sequence> <xs:attribute name="type" type="tns:typeType"></xs:attribute> </xs:complexType> <xs:simpleType name="typeType"> <xs:restriction base="xs:string"> <xs:enumeration value="Name"></xs:enumeration> <xs:enumeration value="Phone"></xs:enumeration> <xs:enumeration value="Mobile"></xs:enumeration> <xs:enumeration value="Fax"></xs:enumeration> <xs:enumeration value="Company"></xs:enumeration> <xs:enumeration value="Job"></xs:enumeration> <xs:enumeration value="Address"></xs:enumeration> <xs:enumeration value="Email"></xs:enumeration> <xs:enumeration value="Web"></xs:enumeration> <xs:enumeration value="Text"></xs:enumeration> </xs:restriction> </xs:simpleType> <xs:complexType name="charactersType"> <xs:sequence> <xs:element name="char" type="tns:charType" minOccurs="0" maxOccurs="unbounded"></xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="charType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="suspicious" type="xs:boolean" use="optional"></xs:attribute> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:complexType name="fieldComponentsType"> <xs:sequence> <xs:element name="fieldComponent" type="tns:fieldComponentType" minOccurs="0" maxOccurs="unbounded"></xs:element> </xs:sequence> </xs:complexType> <xs:complexType name="fieldComponentType"> <xs:sequence> <xs:element name="value" type="xs:string" minOccurs="1" maxOccurs="1"> </xs:element> </xs:sequence> <xs:attribute name="type" type="tns:fieldComponentTypeType"></xs:attribute> </xs:complexType> <xs:simpleType name="fieldComponentTypeType"> <xs:restriction base="xs:string"> <xs:enumeration value="FirstName"></xs:enumeration> <xs:enumeration value="MiddleName"></xs:enumeration> <xs:enumeration value="LastName"></xs:enumeration> <xs:enumeration value="ExtraName"></xs:enumeration> <xs:enumeration value="PhonePrefix"></xs:enumeration> <xs:enumeration value="PhoneCountryCode"></xs:enumeration> <xs:enumeration value="PhoneCode"></xs:enumeration> <xs:enumeration value="PhoneBody"></xs:enumeration> <xs:enumeration value="PhoneExtension"></xs:enumeration> <xs:enumeration value="ZipCode"></xs:enumeration> <xs:enumeration value="Country"></xs:enumeration> <xs:enumeration value="City"></xs:enumeration> <xs:enumeration value="StreetAddress"></xs:enumeration> <xs:enumeration value="JobPosition"></xs:enumeration> <xs:enumeration value="JobDepartment"></xs:enumeration> </xs:restriction> </xs:simpleType> </xs:schema>

Cadena de entrada:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd" xmlns="http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd"> <businessCard> <field type="Phone"> <value>783-37-00</value> </field> <field type="Phone"> <value>783-37-01</value> </field> <field type="Fax"> <value>783-26-63</value> </field> <field type="Email"> <value>[email protected]</value> </field> <field type="Web"> <value>www.abbyy.com</value> </field> <field type="Address"> <value>Otradnaya str., 2b, bld.6, 127273, Moscow, Russia</value> </field> <field type="Name"> <value>John Smith</value> </field> <field type="Company"> <value>ABBYY Headquarters</value> </field> <field type="Job"> <value>Product Analyst</value> </field> <field type="Text"> <value>ABBYY ABBYY Headquarters John Smith Product Analyst ABBYY Headquarters Otradnaya str., 2b, bld.6, 127273, Moscow, Russia Tel: 783-37-00 Fax: 783-26-63 [email protected] www.abbyy.com </value> </field> </businessCard> </document>


Cuando genera un modelo JAXB a partir de un Esquema XML, los elementos globales que corresponden a tipos complejos con nombre tendrán esos metadatos capturados como una anotación @XmlElementDecl en un método de creación en la clase ObjectFactory . Como está creando el JAXBContext solo en la clase DocumentType , estos metadatos no se están procesando. Si generó su modelo JAXB a partir de un Esquema XML, debe crear el JAXBContext en el nombre del paquete generado o en la clase ObjectFactory para asegurarse de que se ObjectFactory todos los metadatos necesarios.

Ejemplo de solución:

JAXBContext jaxbContext = JAXBContext.newInstance(my.generatedschema.dir.ObjectFactory.class); DocumentType documentType = ((JAXBElement<DocumentType>) jaxbContext.createUnmarshaller().unmarshal(inputStream)).getValue();


Una de las razones de este error es el uso de la implementación jaxb de jdk. No estoy seguro de por qué un problema así puede aparecer en situaciones de análisis XML bastante simples. Puede usar la última versión de la biblioteca jaxb de un repositorio maven público:

http://mvnrepository.com

<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.2.12</version> </dependency>