我試圖從JAXB RI 2.2.7切換到MOXy JAXB 2.5.2實現。 我注意到在生成的XML輸出片段中的命名空間和前綴以下區別:MOXy創建比JAXB不同的命名空間前綴RI
JAXB RI:
<xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:bd-algemeen="http://www.nltaxonomie.nl/7.0/basis/bd/items/bd-algemeen" xmlns:iso4217="http://www.xbrl.org/2003/iso4217">
<bd-algemeen:OperatingSystem contextRef="cc_131">W</bd-algemeen:OperatingSystem>
<xbrli:unit id="uu_692">
<xbrli:measure>iso4217:EUR</xbrli:measure>
</xbrli:unit>
</xbrli:xbrl>
莫西:
<xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:bd-algemeen="http://www.nltaxonomie.nl/7.0/basis/bd/items/bd-algemeen">
<bd-algemeen:OperatingSystem contextRef="cc_131">W</bd-algemeen:OperatingSystem>
<xbrli:unit id="uu_662">
<xbrli:measure xmlns:ns0="http://www.xbrl.org/2003/iso4217">ns0:EUR</xbrli:measure>
</xbrli:unit>
</xbrli:xbrl>
1)如何配置MOXy輸出相同的RI? MOXy輸出有效,但我創建的XML(實際上是XBRL)文檔必須具有預定義的前綴。
2)我使用「com.sun.xml.bind.marshaller.NamespacePrefixMapper」的實例來指示應該使用的前綴。然而,MOXy在iso4217命名空間中不會調用這個,爲什麼(我調試了MOXy命名空間解析器但有點丟失了)? BTW:Moxy使用prefixMapper作爲其他命名空間(比如「xbrli」),但不是這個iso4217,有什麼區別?
我添加了「bd-algemeen」,因爲前綴映射器被稱爲前綴「bd-algemeen」。該映射不使用iso4217所使用的QName。 3)我在生成的iso4217封裝中的pacakage-info.java中嘗試@XmlSchema註釋來定義前綴,但沒有運氣,我也不想使用它,因爲它涉及容易覆蓋的生成代碼。
域對象:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "divide", "measures" })
@XmlRootElement(name = "unit")
public class Unit {
protected Divide divide;
@XmlElement(name = "measure")
protected List<QName> measures;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "operatingSystem"})
public static class TaxDataBedrijf {
@XmlElement(name = "OperatingSystem", namespace = "http://www.nltaxonomie.nl/7.0/basis/bd/items/bd-algemeen")
protected Astring1ItemType operatingSystem;
該股實例的創建:
final Unit item = new Unit();
item.getMeasures().add(new QName("http://www.xbrl.org/2003/iso4217", "EUR", "iso4217"));
taxData = new TaxDataBedrijf();
taxData.setOperatingSystem(createOperatingSystem(context, 'W'));
我想這可能是因爲的QName使用的,但這也是直接在其他地方使用並正確使用。例如,莫西能夠生成這個片段:
<xbrli:xbrl xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:bd-domains="http://www.nltaxonomie.nl/7.0/basis/bd/domains/bd-domains" xmlns:bd-axes="http://www.nltaxonomie.nl/7.0/domein/bd/axes/bd-axes">
<xbrli:scenario>
<xbrldi:explicitMember dimension="bd-axes:TimeDimension">bd-domains:Current</xbrldi:explicitMember>
</xbrli:scenario>
</xbrli:xbrl>
以及相應的Java綁定:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "value" })
@XmlRootElement(name = "explicitMember")
public class ExplicitMember {
@XmlValue
protected QName value;
@XmlAttribute(name = "dimension")
protected QName dimension;
}
它的創作:
final ExplicitMember item = new ExplicitMember();
item.setDimension(new QName("http://www.nltaxonomie.nl/7.0/domein/bd/axes/bd-axes", "TimeDimension"));
item.setValue(new QName("http://www.nltaxonomie.nl/7.0/basis/bd/domains/bd-domains", "Current"));
請一些建議。如何解決這個問題,以便我可以使用MOXY而不是RI(在Moxy代碼中查找的地方也許?)。
其中的EclipseLink莫西的版本您使用的? – 2014-11-21 18:43:43
對不起,我忘記了,只是添加了它(RI:2.2.7; Moxy:2.5.2) – edbras 2014-11-21 18:46:31
MOXy根本沒有擊中'NamespacePrefixMapper',還是擊中了所有元素,但不是合格的文本值? – 2014-11-21 18:53:49