かなり単純な XML ドキュメントを単純な Java オブジェクトにアンマーシャリングする際に問題があります。
これは私のXMLがどのように見えるかです:
<?xml version="1.0" encoding="UTF-8"?>
<codeSystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:hl7-org:v3 vocab.xsd" xmlns="urn:hl7-org:v3">
<name>RoleCode</name>
<desc>Codes voor rollen</desc>
<code code="SON" codeSystem="2.16.840.1.113883.5.111" displayName="natural sonSon ">
<originalText>The player of the role is a male offspring of the scoping entity (parent).</originalText>
</code>
<code code="DAUC" codeSystem="2.16.840.1.113883.5.111" displayName="Daughter">
<originalText> The player of the role is a female child (of any type) of scoping entity (parent) </originalText>
</code>
</codeSystem>
これは、人物間の関係を表す Hl7v3 コード システムの仕様である、はるかに大きなファイルの一部です。
CodeSystem 要素と Code 要素用に 2 つの Java クラスを作成しました。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class CodeSystem
{
private String name;
private String desc;
@XmlElement(name = "code")
private List<Code> codes;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType
public class Code
{
@XmlAttribute
private String code;
@XmlAttribute
private String codeSystem;
@XmlAttribute
private String displayName;
private String originalText;
}
以下を含む package-info.java を追加しました。
@XmlSchema(
namespace = "urn:hl7-org:v3",
elementFormDefault = XmlNsForm.UNQUALIFIED,
attributeFormDefault = XmlNsForm.UNQUALIFIED,
xmlns = {
@javax.xml.bind.annotation.XmlNs(prefix = "", namespaceURI = "urn:hl7-org:v3")
}
)
package nl.topicuszorg.hl7v3.vocab2enum.model;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
アンマーシャリングは非常に簡単です。
JAXBContext context = JAXBContext.newInstance(CodeSystem.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
CodeSystem codeSystem = (CodeSystem) unmarshaller.unmarshal(new File(args[0]));
ただし、これは空の CodeSystem オブジェクトになります。ルート要素以外は XML から解析されません。
name、desc、および code 要素が認識されない理由がわかりません。それらはルート要素とは異なる名前空間に存在しますか? ルート要素の名前空間宣言は接頭辞が付いていないため、そうすべきではありません。
私は何が欠けていますか?