JAXB Schemagen and unmarshalling error

h3x0r

New Member
I'm using JAXB to generate a XML Schema from my Java classes so the other developers can create instances of the classes easily without knowledge in Java.Here's the relevant part of the code:package-info.java\[code\]@XmlSchema(xmlns = @XmlNs(prefix = "p", namespaceURI = "http://mygame.com"), namespace = "http://mygame.com")package com.mygame.entity.properties;import javax.xml.bind.annotation.XmlNs;import javax.xml.bind.annotation.XmlSchema;\[/code\]Model.class\[code\]package com.mygame.entity.properties;@XmlType(name = "model", namespace = "http://mygame.com")@XmlRootElement(name = "model", namespace = "http://mygame.com")public class Model { @XmlAttribute(required = true) public String path; public Model() { }}\[/code\]Unit.class\[code\]@XmlType(name="unit", namespace="http://mygame.com")@XmlRootElement(name="unit", namespace="http://mygame.com")public class Unit extends GameObject {}\[/code\]GameObject.class\[code\]@XmlType(name = "gameobject", namespace = "http://mygame.com")public abstract class GameObject extends Thing { // Attributes public Armor armor; public Short maxHp; public Boolean walkable = false; public AbstractModel model;}\[/code\]Thing.class\[code\]@XmlType(name="thing", namespace="http://mygame.com")public abstract class Thing { // Constants // Attributes @XmlElement(required=false) public String icon;}\[/code\]Generated XML Schema\[code\]<?xml version="1.0" encoding="UTF-8" standalone="yes"?><xs:schema version="1.0" targetNamespace="http://mygame.com" xmlns:e="http://mygame.com" xmlns:s="http://mygame.com" xmlns:tns="http://mygame.com" xmlns:p="http://mygame.com" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="model" type="tns:model"/> <xs:element name="unit" type="tns:unit"/> <xs:complexType name="thing" abstract="true"> <xs:sequence> <xs:element name="icon" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> <xs:complexType name="unit"> <xs:complexContent> <xs:extension base="tns:gameobject"> <xs:sequence/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="gameobject" abstract="true"> <xs:complexContent> <xs:extension base="tns:thing"> <xs:sequence> <xs:element ref="tns:armor" minOccurs="0"/> <xs:element name="maxHp" type="xs:short" minOccurs="0"/> <xs:element name="walkable" type="xs:boolean" minOccurs="0"/> <xs:element ref="tns:model" minOccurs="0"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="model"> <xs:sequence/> <xs:attribute name="path" type="xs:string" use="required"/> </xs:complexType></xs:schema>\[/code\]Up to this point, everything is fine. It generates correctly a wanted XML (althought with those annoying TNS prefix, but that's fine).The problem is when I try to unmarshall a UNIT, I'm getting an error in one of the casesCase 1 - WorkingGiven this XML input, everything works fine and I get a instance of my class correctly.\[code\]<?xml version="1.0" encoding="UTF-8"?><tns:unit xmlns:tns="http://mygame.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/home/shirkit/jMonkeyProjects/Fortress Wars/Core/schema/full.xsd"><maxHp>100</maxHp><walkable>false</walkable><model path="Models/Oto/Oto.mesh.xml"/></tns:unit>\[/code\]Case 2 - Not workingGiven this, I get an error described below\[code\]<?xml version="1.0" encoding="UTF-8"?><tns:unit xmlns:tns="http://mygame.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/home/shirkit/jMonkeyProjects/Fortress Wars/Core/schema/full.xsd"><maxHp>100</maxHp><walkable>false</walkable><tns:model path="Models/Oto/Oto.mesh.xml"/></tns:unit>unexpected element (uri:"http://mygame.com", local:"model"). Expected elements are <{}icon>,<{}model>,<{}walkable>,<{}armor>,<{}maxHp>\[/code\]The only difference between the two XML input is that one has the element model, and the other has the element tns:model. I don't know why I'm getting this error in the Case 2, can someone give me an explanation for that?
 
Back
Top