我在我的項目上使用JAXB,但不時遇到一些我無法解決的問題。我已經安裝我的環境是這樣的:JAXB Unmarshall錯誤
護甲類
package com.fortresswars.entity.component;
@XmlType(name = "armor", namespace = "http://fortresswars.com")
public class ArmorComponent extends AbstractComponent
package-info.java
@XmlSchema(xmlns = @XmlNs(namespaceURI = "http://fortresswars.com", prefix = "fw"), elementFormDefault = XmlNsForm.UNQUALIFIED, namespace = "http://fortresswars.com")
package com.fortresswars.entity.component;
生成的模式頭幾乎是正確的:
<xs:schema elementFormDefault="unqualified" version="1.0" targetNamespace="http://fortresswars.com" xmlns:fw="http://fortresswars.com" xmlns:tns="http://fortresswars.com" xmlns:xs="http://www.w3.org/2001/XMLSchema">
唯一我不喜歡的是JAXB放在那裏的TNS前綴,我無法刪除。我正在使用一個螞蟻任務(com.sun.tools.jxc.SchemaGenTask
),我記得在某處讀到這是問題。
生成的方案的其餘部分如下。我會告訴大約只有盔甲的相關部分:
<xs:complexType name="armor">
<xs:complexContent>
<xs:extension base="tns:abstractComponent">
<xs:sequence>
<xs:element name="value" type="xs:short" minOccurs="0"/>
<xs:element name="type" type="tns:armor-type" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
就是用裝甲組件的元素:
<xs:complexType name="character">
<xs:complexContent>
<xs:extension base="tns:thing">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="armor" type="tns:armor"/>
<xs:element name="model" type="tns:model"/>
<xs:element name="status" type="tns:status"/>
<xs:element name="costs" type="tns:costs"/>
</xs:choice>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
爲了測試這一點,我創建了一個XML文檔(見TNS前綴,我需要把它,或者fw
前綴,以及xmlns:fw也)。
<?xml version="1.0" encoding="UTF-8"?><tns:character xmlns:tns="http://fortresswars.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/home/shirkit/jMonkeyProjects/Fortress Wars/Core/schema/full.xsd">
<armor>
<value>5</value>
<type>NORMAL</type>
</armor>
</tns:character>
但是,當我解組這個文件,這是我得到的錯誤:
Exception: unexpected element (uri:"", local:"armor"). Expected elements are <{http://fortresswars.com}armor>,<{http://fortresswars.com}attacks>,<{http://fortresswars.com}costs>,<{http://fortresswars.com}model>,<{http://fortresswars.com}abilities>,<{http://fortresswars.com}status>,<{http://fortresswars.com}movement>
我有安裝將elementFormDefault不合格,即使這是行不通的。爲什麼我得到這個異常?我可以從生成的模式中刪除TNS前綴嗎?
我不明白你期待什麼發生?一切都按照你目前定義的方式工作。 – jtahlborn 2012-07-25 17:35:59
沒有@jtahlborn,我在嘗試解組創建的文檔時收到異常。異常消息寫在那裏,它是最後一個代碼塊。 – SHiRKiT 2012-07-25 17:44:40
你說它適用於tns前綴? – jtahlborn 2012-07-25 17:57:55