プロジェクトで JAXB を使用していますが、解決できない問題に直面することがあります。私は次のように環境をセットアップしました:
アーマークラス
package com.fortresswars.entity.component;
@XmlType(name = "armor", namespace = "http://fortresswars.com")
public class ArmorComponent extends AbstractComponent
パッケージ情報.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 プレフィックスを削除できないことです。私は ant タスク ( 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 を UNQUALIFIED に設定しましたが、これは機能しません。なぜこの例外が発生するのですか? また、生成されたスキーマから TNS プレフィックスを削除できますか?