2017-01-26 2 views
1

Я использую среду SimpleXML для синтаксического анализа xmls в приложении для Android. У меня проблема с правильной обработкой @ElementList.Android - Framework SimpleXML не может разобрать @ElementList

фрагмент XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<SaleToPOIResponse> 
    <MessageHeader (...) /> 
    <ReconciliationResponse ReconciliationType="SaleReconciliation"> 
     <Response Result="Success"/> 
     <TransactionTotals PaymentInstrumentType="Card"> 
      <PaymentTotals TransactionType="Debit" TransactionCount="182" TransactionAmount="4.17"/> 
      <PaymentTotals TransactionType="Credit" TransactionCount="1" TransactionAmount="2.01"/> 
     </TransactionTotals> 
    </ReconciliationResponse> 
</SaleToPOIResponse> 

Мои классы выглядят:

ReconciliationResponseType.java:

@Root 
    @Order(elements = { 
      "Response", 
      "TransactionTotals" 
    }) 
    public class ReconciliationResponseType { 

     @Element(name = "Response", required = true) 
     protected ResponseType response; 
     @ElementList(name = "TransactionTotals", inline = true, required = false) 
     protected List<TransactionTotalsType> transactionTotals; 
     @Attribute(name = "ReconciliationType", required = true) 
     protected String reconciliationType; 

    // getters and setters 
    } 

TransactionTotalsType.java:

@Root 
    @Order(elements = { 
      "PaymentTotals", 
      "LoyaltyTotals" 
    }) 
    public class TransactionTotalsType { 

     @ElementList(name = "PaymentTotals", inline = true, required = false) 
     protected List<PaymentTotalsType> paymentTotals; 
     @Attribute(name = "PaymentInstrumentType", required = true) 
     protected String paymentInstrumentType; 

    // getters and setters 
    } 

я разобрать его с помощьюМетод:

public static SaleToPOIResponse fromXMLString(String xmlResponse) { 
    Reader reader = new StringReader(xmlResponse); 

    Serializer serializer = new Persister(); 
    try { 
     SaleToPOIResponse response = serializer.read(SaleToPOIResponse.class, reader, false); 
     return response; 
    } catch (Exception e) { 
     Log.e(TAG, "Exception during parsing String XML to SaleToPOIResponse: ", e); 
    } 
    return null; 
} 

Но каждый раз, когда я получаю исключение, что заказал «TransactionTotals» элемент отсутствует, даже если 1) не требуется 2) она существует в анализируемом XML

org.simpleframework.xml.core.ElementException: Ordered element 'TransactionTotals' missing for class pl.novelpay.epas.generated.saletopoimessages.ReconciliationResponseType 

Когда я комментирую «TransactionTotals» из @Order, xml анализируется без исключения, но результат TransactionTotals, полученный в результате, пуст. Что мне здесь не хватает?

ответ

0

я нашел то, что было проблема при чтении ответа на аналогичную проблему здесь: https://sourceforge.net/p/simple/mailman/message/25699359/

Я использовал name InstEd из entry. Таким образом, атрибут ElementList должен выглядеть следующим образом:

@ElementList(entry= "PaymentTotals", inline = true, required = false) 
protected List<PaymentTotalsType> paymentTotals; 

Теперь он отлично работает.

Смежные вопросы