У меня есть 2 файла схемы XSD, которые я использовал XJC для преобразования в POJO. Когда я пытаюсь разобрать строки XML для классов, я обнаружил, что элементы ref
, которые становятся @XmlElementRef
, особенно в классах, содержащих списки (from), не разбираются полностью. Они ссылаются на правильные типы и значения, но не просто представляют себя. Я прочитал некоторые нотации в коде, утверждая, что некоторые из них @link
для живых списков, а не снимков. Я, наконец, пытаюсь конвертировать не маршаллированный XML в JSON. Это текущее поведение (фрагмент):
.xsd
<xs:element name="ControlTransaction">
<xs:complexType>
<xs:sequence>
<xs:element ref="ixretail:ReasonCode"/>
<xs:choice>
<xs:element ref="dtv:SystemCycleType"/>
<xs:element ref="ixretail:NoSale"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
ControlTransaction.java класс
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"reasonCode",
"systemCycleTypeOrNoSale"
})
@XmlRootElement(name = "ControlTransaction")
public
class ControlTransaction {
@XmlElement(name = "ReasonCode", required = true)
protected String reasonCode;
@XmlElementRefs({
@XmlElementRef(name = "NoSale", namespace = "http://www.nrf-arts.org/IXRetail/namespace/", type = JAXBElement.class, required = false),
@XmlElementRef(name = "SystemCycleType", namespace = "http://www.datavantagecorp.com/xstore/", type = JAXBElement.class, required = false)
})
protected JAXBElement<String> systemCycleTypeOrNoSale;
/**
* Gets the value of the reasonCode property.
*
* @return
* possible object is
* {@link String }
*
*/
public String getReasonCode() {
return reasonCode;
}
/**
* Sets the value of the reasonCode property.
*
* @param value
* allowed object is
* {@link String }
*
*/
public void setReasonCode(String value) {
this.reasonCode = value;
}
/**
* Gets the value of the systemCycleTypeOrNoSale property.
*
* @return
* possible object is
* {@link JAXBElement }{@code <}{@link String }{@code >}
* {@link JAXBElement }{@code <}{@link String }{@code >}
*
*/
- IntelliJ показывает, как геттер и сеттер никогда не используются
Transaction.java - родительский элемент ControlTransaction
public List<Object> getForeignCurrencyExchangeRateOrTenderExchangeOrTimeClockTransaction() {
if (foreignCurrencyExchangeRateOrTenderExchangeOrTimeClockTransaction == null) {
foreignCurrencyExchangeRateOrTenderExchangeOrTimeClockTransaction = new ArrayList<Object>();
}
return this.foreignCurrencyExchangeRateOrTenderExchangeOrTimeClockTransaction;
}
содержит только get
ОБРАЗЕЦ XML
<ControlTransaction>
<ReasonCode>Store Open</ReasonCode>
<dtv:SystemCycleType>Store Open</dtv:SystemCycleType>
</ControlTransaction>
Вывод JSON показывает значение, но не простое {"ключ": "значение"}
"foreignCurrencyExchangeRateOrTenderExchangeOrTimeClockTransaction" : [ {
"reasonCode" : "Store Open",
"systemCycleTypeOrNoSale" : {
"name" : "{http://www.datavantagecorp.com/xstore/}SystemCycleType",
"declaredType" : "java.lang.String",
"scope" : "javax.xml.bind.JAXBElement$GlobalScope",
"value" : "Store Open",
"nil" : false,
"globalScope" : true,
"typeSubstituted" : false
}
} ],
Как я могу обеспечить, чтобы при отмене разбивки последующий JSON содержал пары k: v? Значения есть, а типы известны, но вывод слишком подробный. Это опция, которую можно добавить в файл привязок или что-то еще с логикой. В моих XSD слишком много примеров для создания пользовательских адаптеров, поэтому я надеюсь, что это можно исправить на этапе создания XJC, JAXB pojo. Заранее спасибо.