Note that there are some explanatory texts on larger screens.

plurals
  1. POJAXB XmlTransient doesn't work
    primarykey
    data
    text
    <p>I'm trying to unmarshall the following XML with JAXB:</p> <pre><code>&lt;artist xmlns="http://www.spotify.com/ns/music/1"&gt; &lt;name&gt;Basement Jaxx&lt;/name&gt; &lt;albums&gt; &lt;album href="spotify:album:3xOulZzGRe4Ycwm59iCdKg"&gt; &lt;name&gt;Back 2 the Wild&lt;/name&gt; &lt;artist href="spotify:artist:4YrKBkKSVeqDamzBPWVnSJ"&gt; &lt;name&gt;Basement Jaxx&lt;/name&gt; &lt;/artist&gt; &lt;released&gt;2013&lt;/released&gt; &lt;id type="upc"&gt;5055489272702&lt;/id&gt; &lt;album&gt; &lt;/albums&gt; &lt;/artist&gt; </code></pre> <p>When I use <code>@XmlTransient</code> on the artist within the album to just skip it, it gets parsed regardless.</p> <p>What can I do to make JAXB handle fields marked <code>@XmlTransient</code> correctly?</p> <p><strong>Edit 1 - files</strong></p> <p>Test xml:</p> <pre><code>&lt;artist&gt; &lt;name&gt;Adema&lt;/name&gt; &lt;albums&gt; &lt;album href="spotify:album:07tjJowJIddz8c74x5WOvj"&gt; &lt;name&gt;Topple the Giants&lt;/name&gt; &lt;artist href="spotify:artist:3n4ersmDo55xV4fPSCKpXb"&gt; &lt;name&gt;Adema&lt;/name&gt; &lt;/artist&gt; &lt;released&gt;2013&lt;/released&gt; &lt;id type="upc"&gt;886443922082&lt;/id&gt; &lt;availability&gt; &lt;territories&gt;AD AT AU BE CA CH DE DK EE ES FI FR GB HK IE IS IT LI LT LU LV MC MX MY NL NO NZ PL PT SE SG US&lt;/territories&gt; &lt;/availability&gt; &lt;/album&gt; &lt;album href="spotify:album:06QaJLqG068uXHQbAcPZKU"&gt; &lt;name&gt;Kill The Headlights&lt;/name&gt; &lt;artist href="spotify:artist:3n4ersmDo55xV4fPSCKpXb"&gt; &lt;name&gt;Adema&lt;/name&gt; &lt;/artist&gt; &lt;released&gt;2007&lt;/released&gt; &lt;id type="upc"&gt;4030816195283&lt;/id&gt; &lt;availability&gt; &lt;territories&gt;AD AT BE CH DE DK EE ES FI FR GB IE IS IT LI LT LU LV MC NL NO PL PT SE&lt;/territories&gt; &lt;/availability&gt; &lt;/album&gt; &lt;/albums&gt; &lt;/artist&gt; </code></pre> <p>XTest.java:</p> <pre><code>package dao.spotify; import dao.spotify.lookup.entities.LookupArtist; import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import javax.xml.bind.helpers.DefaultValidationEventHandler; public class XTest { public XTest() { load(); } public void load() { try { File file = new File("c:/tmp/test5.xml"); JAXBContext jc = JAXBContext.newInstance(LookupArtist.class); Unmarshaller um = jc.createUnmarshaller(); um.setEventHandler(new DefaultValidationEventHandler()); LookupArtist spotifyArtistWrapper = (LookupArtist) um.unmarshal(file); System.err.println("Done"); } catch (JAXBException ex) { ex.printStackTrace(); } } public static void main(String... args) { XTest test = new XTest(); } } </code></pre> <p>LookupArtist.java:</p> <pre><code>package dao.spotify.lookup.entities; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "artist") @XmlAccessorType(XmlAccessType.FIELD) public class LookupArtist { @XmlElement private String name; @XmlElementWrapper(name = "albums") @XmlElement(name = "album") private List&lt;LookupInnerAlbum&gt; albums = new ArrayList(); } </code></pre> <p>LookupInnerAlbum.java:</p> <pre><code>package dao.spotify.lookup.entities; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; @XmlRootElement(name = "album") @XmlAccessorType(XmlAccessType.FIELD) public class LookupInnerAlbum { @XmlAttribute private String href; private String name; private int released; private String id; private LookupInnerAvailability availability; @XmlTransient private LookupInnerArtist artist; } </code></pre> <p>LookupInnerAvailability.java:</p> <pre><code>package dao.spotify.lookup.entities; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "availability") @XmlAccessorType(XmlAccessType.FIELD) public class LookupInnerAvailability { @XmlElement private String territories; } </code></pre> <p>LookupInnerArtist.java:</p> <pre><code>package dao.spotify.lookup.entities; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; @XmlType(name = "artist") @XmlAccessorType(XmlAccessType.FIELD) public class LookupInnerArtist { @XmlElement private String name; @XmlAttribute private String href; } </code></pre> <p>When running this I get:</p> <pre><code>DefaultValidationEventHandler: [ERROR]: unexpected element (uri:"", local:"artist"). Expected elements are &lt;{}id&gt;,&lt;{}released&gt;,&lt;{}name&gt;,&lt;{}availability&gt; javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"artist"). Expected elements are &lt;{}id&gt;,&lt;{}released&gt;,&lt;{}name&gt;,&lt;{}availability&gt; Location: line 6 of file:/c:/tmp/test5.xml at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:662) at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:258) at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:253) at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:120) at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.childElement(Loader.java:105) at com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.childElement(StructureLoader.java:262) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:498) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:480) at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:150) 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.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2717) 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.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:258) at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:229) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:136) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:141) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:150) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:168) at dao.spotify.XTest.load(XTest.java:30) at dao.spotify.XTest.&lt;init&gt;(XTest.java:21) at dao.spotify.XTest.main(XTest.java:38) </code></pre>
    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