Note that there are some explanatory texts on larger screens.

plurals
  1. PODynamic JAXB exceptions
    primarykey
    data
    text
    <p>I am using eclipse link(v2.5.0) Dynamic JAXB to convert XML to JSON and viceversa using a multiple schemas.</p> <p>emp.xsd</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:emp="Employee:2:0" targetNamespace="Employee:2:0" elementFormDefault="unqualified" attributeFormDefault="unqualified" version="2.0"&gt; &lt;xsd:element name="searchManager" type="emp:SearchManager" /&gt; &lt;xsd:complexType name="SearchManager"&gt; &lt;xsd:sequence&gt; &lt;xsd:element name="CompanyName" type="xsd:string" /&gt; &lt;xsd:element name="objects" type="emp:Employee" minOccurs="0" maxOccurs="unbounded" /&gt; &lt;/xsd:sequence&gt; &lt;/xsd:complexType&gt; &lt;xsd:complexType name="Employee"&gt; &lt;xsd:complexContent&gt; &lt;xsd:extension base="emp:Organization"&gt; &lt;xsd:sequence&gt; &lt;xsd:element name="EmpId" type="xsd:string" minOccurs="0" /&gt; &lt;/xsd:sequence&gt; &lt;/xsd:extension&gt; &lt;/xsd:complexContent&gt; &lt;/xsd:complexType&gt; &lt;xsd:complexType name="Projects"&gt; &lt;xsd:complexContent&gt; &lt;xsd:extension base="emp:Organization"/&gt; &lt;/xsd:complexContent&gt; &lt;/xsd:complexType&gt; &lt;xsd:complexType name="Organization"&gt; &lt;xsd:annotation&gt; &lt;xsd:documentation&gt;Abstract base class &lt;/xsd:documentation&gt; &lt;/xsd:annotation&gt; &lt;/xsd:complexType&gt; &lt;/xsd:schema&gt; </code></pre> <p>Manager.xsd</p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;xs:schema targetNamespace="Manager:1:0" xmlns:emp="Employee:2:0" xmlns:manager="Manager:1:0" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified" version="1.0"&gt; &lt;!-- schema imports --&gt; &lt;xs:import namespace="Employee:2:0" schemaLocation="emp.xsd" /&gt; &lt;xs:complexType name="Manager"&gt; &lt;xs:annotation&gt; &lt;xs:documentation&gt; Definition of class Employee &lt;/xs:documentation&gt; &lt;/xs:annotation&gt; &lt;xs:complexContent&gt; &lt;xs:extension base="emp:Employee"&gt; &lt;xs:sequence&gt; &lt;xs:element name="teamSize" type="xsd:int" minOccurs="0" /&gt; &lt;xs:element name="project1" type="manager:Project1" minOccurs="0" maxOccurs="unbounded" /&gt; &lt;/xs:sequence&gt; &lt;/xs:extension&gt; &lt;/xs:complexContent&gt; &lt;/xs:complexType&gt; &lt;xs:complexType name="Project1"&gt; &lt;xs:complexContent&gt; &lt;xs:extension base="manager:Developement"&gt; &lt;xs:sequence&gt; &lt;xs:element name="type" type="xsd:int" minOccurs="0" /&gt; &lt;/xs:sequence&gt; &lt;/xs:extension&gt; &lt;/xs:complexContent&gt; &lt;/xs:complexType&gt; &lt;xs:complexType name="Developement"&gt; &lt;xs:annotation&gt; &lt;xs:documentation&gt; Abstract base class for an Development &lt;/xs:documentation&gt; &lt;/xs:annotation&gt; &lt;xs:complexContent&gt; &lt;xs:extension base="emp:Projects"/&gt; &lt;/xs:complexContent&gt; &lt;/xs:complexType&gt; &lt;/xs:schema&gt; </code></pre> <p>sample.xml</p> <pre><code>&lt;emp:searchManager xmlns:emp="Employee:2:0" xmlns:manager="Manager:1:0"&gt; &lt;CompanyName&gt;Test&lt;/CompanyName&gt; &lt;objects xmlns:ns2="Manager:1:0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:Manager"&gt; &lt;EmpId&gt;123456&lt;/EmpId&gt; &lt;teamSize&gt;10&lt;/teamSize&gt; &lt;project1&gt; &lt;type&gt;1&lt;/type&gt; &lt;/project1&gt; &lt;/objects&gt; &lt;/emp:searchManager&gt; </code></pre> <p>The sample driver program</p> <pre><code>public class XMLToJSON { /** * @param args */ public static void main(String[] args) { FileInputStream xsdInputStream; try { xsdInputStream = new FileInputStream("Manager.xsd"); DynamicJAXBContext jaxbContext = DynamicJAXBContextFactory.createContextFromXSD(xsdInputStream, new MyEntityResolver(), null, null); FileInputStream xmlInputStream = new FileInputStream("sample.xml"); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); JAXBElement&lt;DynamicEntity&gt; manager = (JAXBElement) unmarshaller.unmarshal(xmlInputStream); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //input xml to print marshaller.marshal(manager, System.out); Map namespaces = new HashMap(); namespaces.put("http://www.w3.org/2001/XMLSchema-instance", "xsi"); namespaces.put("Employee:2:0", "ns1"); namespaces.put("Manager:1:0", "ns2"); // XML to JSON marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json"); marshaller.setProperty(MarshallerProperties.NAMESPACE_PREFIX_MAPPER, namespaces); FileOutputStream jsonOutputStream = new FileOutputStream("sample.json"); marshaller.marshal(manager, jsonOutputStream); marshaller.marshal(manager, System.out); //JSON to XML JAXBUnmarshaller jsonUnmarshaller = jaxbContext.createUnmarshaller(); jsonUnmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); jsonUnmarshaller.setProperty(UnmarshallerProperties.JSON_NAMESPACE_PREFIX_MAPPER, namespaces); jsonUnmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, true); StreamSource json = new StreamSource("sample.json"); JAXBElement&lt;DynamicEntity&gt; myroot = (JAXBElement) jsonUnmarshaller.unmarshal(json); Marshaller m = jaxbContext.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true); m.marshal(myroot, System.out); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (JAXBException e) { e.printStackTrace(); } } } </code></pre> <p>EntityResolver</p> <pre><code>class MyEntityResolver implements EntityResolver { public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException { String filename = new File(systemId).getName(); // Now prepend the correct path InputSource is = new InputSource(ClassLoader.getSystemResourceAsStream(filename)); is.setSystemId(filename); return is; } } </code></pre> <p>Generated JSON</p> <pre><code>{ "searchManager" : { "CompanyName" : "Test", "objects" : [ { "type" : "Manager", "EmpId" : "123456", "teamSize" : 10, "project1" : [ { "type" : 1 } ] } ] } } </code></pre> <p>While unmarshalling the below exception was seen</p> <pre><code>Exception in thread "main" java.lang.NullPointerException at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:264) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:443) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:374) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:241) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:443) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:374) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:241) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:443) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:296) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parseRoot(JSONReader.java:166) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:125) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:140) at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:778) at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:666) at org.eclipse.persistence.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:593) at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:287) at XMLToJSON.main(XMLToJSON.java:65) </code></pre> <p>If the namespaces are disabled in the sample driver program, the following exception is seen</p> <pre><code>Exception in thread "main" Local Exception Stack: Exception [EclipseLink-43] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DescriptorException Exception Description: Missing class for indicator field value [1] of type [class java.lang.String]. Descriptor: XMLDescriptor(manager._1._0.Project1 --&gt; []) at org.eclipse.persistence.exceptions.DescriptorException.missingClassForIndicatorFieldValue(DescriptorException.java:938) at org.eclipse.persistence.internal.oxm.QNameInheritancePolicy.classFromRow(QNameInheritancePolicy.java:264) at org.eclipse.persistence.internal.oxm.TreeObjectBuilder.classFromRow(TreeObjectBuilder.java:182) at org.eclipse.persistence.internal.oxm.TreeObjectBuilder.classFromRow(TreeObjectBuilder.java:1) at org.eclipse.persistence.internal.oxm.XMLRelationshipMappingNodeValue.processChild(XMLRelationshipMappingNodeValue.java:63) at org.eclipse.persistence.internal.oxm.XMLCompositeCollectionMappingNodeValue.startElement(XMLCompositeCollectionMappingNodeValue.java:184) at org.eclipse.persistence.internal.oxm.record.UnmarshalRecordImpl.startElement(UnmarshalRecordImpl.java:834) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:372) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:241) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:443) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:374) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:241) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:443) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:296) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parseRoot(JSONReader.java:166) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:125) at org.eclipse.persistence.internal.oxm.record.json.JSONReader.parse(JSONReader.java:140) at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:778) at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:666) at org.eclipse.persistence.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:593) at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:287) at XMLToJSON.main(XMLToJSON.java:65) </code></pre> <p>Is this a bug in Dynamic JAXB Moxy? Are there any workaround without changing the schema or xml files?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload