Я пытаюсь переключиться с 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>
Moxy:
<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 namespace resolver, но немного потерял;)? BTW: префиксMapper используется Moxy для других пространств имен (например, «xbrli»), но не для этого iso4217, в чем разница?
Я haved добавил «bd-algemeen», поскольку префикс mapper вызывается для префикса «bd-algemeen». Это сопоставление не использует QName, как используется iso4217.
3) Я попробовал аннотацию @XmlSchema в pacakage-info.java в сгенерированном iso4217 pacakge, чтобы определить префикс, но не повезло, и я не хочу использовать его, поскольку он касается сгенерированного кода, который легко перезаписывается ,
домен объекта:
@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, но это также непосредственно используется в других местах и используется правильно. Например, Moxy способен генерировать этот фрагмент:
<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 Moxy вы используете? –
Извините, я просто забыл, только что добавил (RI: 2.2.7; Moxy: 2.5.2) – edbras
МОКСИ вообще не попадает в 'NamespacePrefixMapper', или он ударяет его по всем элементам, но не по значению текстового значения? –