Я пытаюсь преобразовать экземпляр класса в XML с помощью XStream. Все работает отлично, за исключением того, что я надеюсь, что кто-то может помочь мне решить.Перейти к тегам, связанным с List with XStream
В помещении, у меня есть много «вложенных» классов (в порядке, OrderStatusImport
->OrderCollection
->Order
->OrderLine
), но координационный центр представлен классом Order
; как выражено выше, каждый экземпляр содержит список объектов OrderLine
. Просто так:
public class Order {
//attribute's declarations...
ArrayList<OrderLine> orderLines;
}
Это мой форматировщик класс, в котором я называю основной логики XStream:
private String createImportXml(OrderStatusImport orderStatusImport) {
Object xstream = null;
if (xstream == null) {
xstream = new XStream() {
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new UpperCaseMapper(next);
}
};
}
((XStream) xstream).alias("OrderStatusImport", OrderStatusImport.class);
((XStream) xstream).alias("OrderCollection", OrderCollection.class);
((XStream) xstream).alias("Order", Order.class);
((XStream) xstream).alias("OrderLine", OrderLine.class);
((XStream) xstream).omitField(Order.class, "OrderLines");
String decl = "\n";
String header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
String xml = "";
xml += ((XStream) xstream).toXML(orderStatusImport);
return (header + decl + xml + decl);
}
Проблема заключается в том, что полученный XML имеет нежелательные OrderLines тегов. Он представлен как:
<Order>
<OrderItemsTotal>266.00</OrderItemsTotal>
<OrderShipping>0.00</OrderShipping>
<OrderCodFee>0.00</OrderCodFee>
<OrderTotal>266.00</OrderTotal>
<OrderStatus>H4</OrderStatus>
<OrderLines>
<OrderLine>
<ItemNumber>000001</ItemNumber>
<DCNumber>DC10</DCNumber>
<StorageLocation>1001</StorageLocation>
<OrderLineStatus>C0</OrderLineStatus>
<CancelReasonCode></CancelReasonCode>
<Quantity>1</Quantity>
<ItemTotal>167.00</ItemTotal>
</OrderLine>
<OrderLine>
<ItemNumber>000002</ItemNumber>
<DCNumber>DC10</DCNumber>
<StorageLocation>1001</StorageLocation>
<OrderLineStatus>C0</OrderLineStatus>
<CancelReasonCode></CancelReasonCode>
<Quantity>1</Quantity>
<ItemTotal>99.00</ItemTotal>
</OrderLine>
</OrderLines>
</Order>
, в то время как я хочу, чтобы это (без OrderLines теги):
<Order>
<OrderItemsTotal>266.00</OrderItemsTotal>
<OrderShipping>0.00</OrderShipping>
<OrderCodFee>0.00</OrderCodFee>
<OrderTotal>266.00</OrderTotal>
<OrderStatus>H4</OrderStatus>
<OrderLine>
<ItemNumber>000001</ItemNumber>
<DCNumber>DC10</DCNumber>
<StorageLocation>1001</StorageLocation>
<OrderLineStatus>C0</OrderLineStatus>
<CancelReasonCode></CancelReasonCode>
<Quantity>1</Quantity>
<ItemTotal>167.00</ItemTotal>
</OrderLine>
<OrderLine>
<ItemNumber>000002</ItemNumber>
<DCNumber>DC10</DCNumber>
<StorageLocation>1001</StorageLocation>
<OrderLineStatus>C0</OrderLineStatus>
<CancelReasonCode></CancelReasonCode>
<Quantity>1</Quantity>
<ItemTotal>99.00</ItemTotal>
</OrderLine>
</Order>
Я попытался как с omitField()
, чем с @XStreamOmitField
аннотацию, но, может быть, я неправильно понимают эти те (Я новичок в XStream). Прежде чем вы упомянули об этом, я мог бы также использовать простой replace()
на результирующей String, но я не знаю, как сохранить отступ таким образом.
Спасибо ОЧЕНЬ много! Как раз для того, чтобы указать на это, первое решение не работает для меня (может быть, у меня есть проблема с разрешениями аннотаций?), Но вторая - идеальна. –
Для использования сначала вы должны установить 'xstream.autodetectAnnotations (true);' –