Xml BeanIO 的映射,列表未正确解释

Xml mapping for BeanIO, the list not properly interpreted

我请求有关此 BeanIO Xml 映射的帮助。 由于某种原因,列表段未正确解释为列表 根据参考指南,这应该像下面的代码示例一样进行编码,但是在这种情况下,我会收到如下所述的错误消息。

如果我将集合标记更改为以下内容,则 xml 文件会正确转换为 bean,但只会读取一个 ePrestation。 (这也与参考指南冲突)

知道我可能做错了什么吗? 或者将此 xml 正确转换为 bean 的替代解决方案?

Exception in thread "main" org.beanio.BeanIOConfigurationException: Invalid segment 'ePrestation', in segment 'ePrestationList', in segment 'eattest', in record 'registerEattestRequest', in stream 'requestStream': No such property 'ePrestation' in class 'be.cm.apps.application.beanz.Eattest'
        at org.beanio.internal.compiler.ProcessorSupport.process(ProcessorSupport.java:93)
        at org.beanio.internal.compiler.ParserFactorySupport.createStream(ParserFactorySupport.java:95)
        at org.beanio.internal.compiler.xml.XmlParserFactory.createStream(XmlParserFactory.java:51)
        at org.beanio.internal.compiler.StreamCompiler.createStreamDefinitions(StreamCompiler.java:149)
        at org.beanio.internal.compiler.StreamCompiler.loadMapping(StreamCompiler.java:103)
        at org.beanio.internal.DefaultStreamFactory.load(DefaultStreamFactory.java:58)
        at org.beanio.StreamFactory.loadResource(StreamFactory.java:215)
        at org.beanio.StreamFactory.loadResource(StreamFactory.java:198)
        at be.cm.apps.application.beanz.ExampleReader.readRequestBean2(ExampleReader.java:62)
        at be.cm.apps.application.Main.main(Main.java:29)
Caused by: org.beanio.BeanIOConfigurationException: No such property 'ePrestation' in class 'be.cm.apps.application.beanz.Eattest'
        at org.beanio.internal.compiler.ParserFactorySupport.getPropertyDescriptor(ParserFactorySupport.java:1331)
        at org.beanio.internal.compiler.ParserFactorySupport.reflectCollectionType(ParserFactorySupport.java:1143)
        at org.beanio.internal.compiler.ParserFactorySupport.reflectAggregationType(ParserFactorySupport.java:988)
        at org.beanio.internal.compiler.ParserFactorySupport.finalizeSegmentIteration(ParserFactorySupport.java:709)
        at org.beanio.internal.compiler.ParserFactorySupport.finalizeSegment(ParserFactorySupport.java:697)
        at org.beanio.internal.compiler.ProcessorSupport.handleComponent(ProcessorSupport.java:135)
        at org.beanio.internal.compiler.ProcessorSupport.handleComponent(ProcessorSupport.java:133)
        at org.beanio.internal.compiler.ProcessorSupport.handleComponent(ProcessorSupport.java:133)
        at org.beanio.internal.compiler.ProcessorSupport.handleComponent(ProcessorSupport.java:125)
        at org.beanio.internal.compiler.ProcessorSupport.handleComponent(ProcessorSupport.java:109)
        at org.beanio.internal.compiler.ProcessorSupport.process(ProcessorSupport.java:46)
        ... 9 more

Process finished with exit code 1

定义文件:

<beanio xmlns="http://www.beanio.org/2012/03"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">

    <stream name="requestStream" format="xml" xmlType="none"  >
        <record name="registerEattestRequest" class="be.cm.apps.application.beanz.RequestEattest" minOccurs="1" maxOccurs="1">
            <segment name="requestContext" minOccurs="1" maxOccurs="1"  class="be.cm.apps.application.beanz.RequestContext" >
                <field name="b2bReference"  />
                <field name="externalReference"  />
                <field name="creationDate"  />
                <field name="creationTime"  />
                <field name="requestorNihii"  />
                <field name="messageDate"  />
                <field name="messageTime"  />
                <field name="receptionDate" />
                <field name="receptionTime" />
                <field name="requestorType"  />
                <field name="nippinReference" />
            </segment>
            <segment name="eattest" minOccurs="1" maxOccurs="1" class="be.cm.apps.application.beanz.Eattest" >
                <field name="invoicingDate" />
                <field name="invoicingTime" />
                <field name="attestorNihii" />
                <field name="providerFeeAmount" />
                <field name="entrepriseNumber" />
                <field name="receivedNissNumber" />
                <segment name="ePrestationList"   >
                    <segment name="ePrestation" class="be.cm.apps.application.beanz.ePrestation" collection="list" minOccurs="1" maxOccurs="unbounded">
                        <field name="order" />
                        <field name="creationDetailDate" />
                        <field name="creationDetailTime" />
                        <field name="providerNihii" />
                        <field name="prestationCode" />
                        <field name="quantity" />
                        <field name="beginDate" />
                        <field name="endDate" />
                    </segment>

                </segment>
            </segment>
        </record>
    </stream>
</beanio>

待处理样本xml:

<registerEattestRequest>
    <requestContext>
        <b2bReference>MULTI_KO2019030510:12:41</b2bReference>
        <externalReference>10765515001.MULTI_KO20190305</externalReference>
        <creationDate>2019-03-05</creationDate>
        <creationTime>10:12:41</creationTime>
        <requestorNihii>10765515001</requestorNihii>
        <messageDate>2019-03-05</messageDate>
        <messageTime>10:12:41</messageTime>
        <receptionDate>2019-03-05</receptionDate>
        <receptionTime>10:12:41</receptionTime>
        <requestorType>persphysician</requestorType>
        <nippinReference>MULTI_KO2019030510:12:41</nippinReference>
    </requestContext>
    <eattest>
        <invoicingDate>2019-03-05</invoicingDate>
        <invoicingTime>10:12:41</invoicingTime>
        <attestorNihii>10765515001</attestorNihii>
        <providerFeeAmount>24.00</providerFeeAmount>
        <entrepriseNumber>0635769870</entrepriseNumber>
        <receivedNissNumber>19640721 489 80</receivedNissNumber>
        <ePrestationList>
            <ePrestation>
                <order>2</order>
                <creationDetailDate>2019-03-05</creationDetailDate>
                <creationDetailTime>10:12:41</creationDetailTime>
                <providerNihii>10765515001</providerNihii>
                <prestationCode>101010</prestationCode>
                <quantity>1</quantity>
                <beginDate>2019-03-05</beginDate>
                <endDate>2019-03-05</endDate>
            </ePrestation>
            <ePrestation>
                <order>3</order>
                <creationDetailDate>2019-03-05</creationDetailDate>
                <creationDetailTime>10:12:41</creationDetailTime>
                <providerNihii>10765515001</providerNihii>
                <prestationCode>144034</prestationCode>
                <quantity>1</quantity>
                <beginDate>2019-03-05</beginDate>
                <endDate>2019-03-05</endDate>
            </ePrestation>
        </ePrestationList>
    </eattest>
</registerEattestRequest>

参与类:

public class RequestEattest {

   private RequestContext requestContext;
   private Eattest eattest;

   public RequestContext getRequestContext() {
      return requestContext;
   }
   public void setRequestContext(RequestContext requestContext) {
      this.requestContext = requestContext;
   }

   public Eattest getEattest() {
      return eattest;
   }
   public void setEattest(Eattest eattest) {
      this.eattest = eattest;
   }
}

package be.cm.apps.application.beanz;

public class RequestContext {
   private String b2bReference;
   private String externalReference;
   private String creationDate;
   private String creationTime;
   private String requestorNihii;
   private String messageDate;
   private String messageTime;
   private String receptionDate;
   private String receptionTime;
   private String requestorType;
   private String nippinReference;

   public String getReceptionDate() {
      return receptionDate;
   }
   public void setReceptionDate(String receptionDate) {
      this.receptionDate = receptionDate;
   }
   public String getReceptionTime() {
      return receptionTime;
   }
   public void setReceptionTime(String receptionTime) {
      this.receptionTime = receptionTime;
   }
   public String getB2bReference() {
      return b2bReference;
   }
   public void setB2bReference(String b2bReference) {
      this.b2bReference = b2bReference;
   }
   public String getExternalReference() {
      return externalReference;
   }
   public void setExternalReference(String externalReference) {
      this.externalReference = externalReference;
   }
   public String getCreationDate() {
      return creationDate;
   }
   public void setCreationDate(String creationDate) {
      this.creationDate = creationDate;
   }
   public String getCreationTime() {
      return creationTime;
   }
   public void setCreationTime(String creationTime) {
      this.creationTime = creationTime;
   }
   public String getRequestorNihii() {
      return requestorNihii;
   }
   public void setRequestorNihii(String requestorNihii) {
      this.requestorNihii = requestorNihii;
   }
   public String getMessageDate() {
      return messageDate;
   }
   public void setMessageDate(String messageDate) {
      this.messageDate = messageDate;
   }
   public String getMessageTime() {
      return messageTime;
   }
   public void setMessageTime(String messageTime) {
      this.messageTime = messageTime;
   }
   public String getRequestorType() {
      return requestorType;
   }
   public void setRequestorType(String requestorType) {
      this.requestorType = requestorType;
   }
   public String getNippinReference() {
      return nippinReference;
   }
   public void setNippinReference(String nippinReference) {
      this.nippinReference = nippinReference;
   }
}

public class Eattest {
   private String invoicingDate;
   private String invoicingTime;
   private String attestorNihii;
   private String providerFeeAmount;
   private String entrepriseNumber;
   private String receivedNissNumber;
   private List<ePrestation> ePrestationList = new ArrayList<>();

   public List<ePrestation> getePrestationList() {
      return ePrestationList;
   }
   public void setePrestationList(List<ePrestation> ePrestationList) {
      this.ePrestationList = ePrestationList;
   }
   public String getInvoicingDate() {
      return invoicingDate;
   }
   public void setInvoicingDate(String invoicingDate) {
      this.invoicingDate = invoicingDate;
   }
   public String getInvoicingTime() {
      return invoicingTime;
   }
   public void setInvoicingTime(String invoicingTime) {
      this.invoicingTime = invoicingTime;
   }
   public String getAttestorNihii() {
      return attestorNihii;
   }
   public void setAttestorNihii(String attestorNihii) {
      this.attestorNihii = attestorNihii;
   }
   public String getProviderFeeAmount() {
      return providerFeeAmount;
   }
   public void setProviderFeeAmount(String providerFeeAmount) {
      this.providerFeeAmount = providerFeeAmount;
   }
   public String getEntrepriseNumber() {
      return entrepriseNumber;
   }
   public void setEntrepriseNumber(String entrepriseNumber) {
      this.entrepriseNumber = entrepriseNumber;
   }
   public String getReceivedNissNumber() {
      return receivedNissNumber;
   }
   public void setReceivedNissNumber(String receivedNissNumber) {
      this.receivedNissNumber = receivedNissNumber;
   }
}

public class ePrestation {
   private int order;
   private String creationDetailDate;
   private String creationDetailTime;
   private String providerNihii;
   private String prestationCode;
   private int quantity;
   private String beginDate;
   private String endDate;
   public int getOrder() {
      return order;
   }

   public void setOrder(int order) {
      this.order = order;
   }
   public String getCreationDetailDate() {
      return creationDetailDate;
   }
   public void setCreationDetailDate(String creationDetailDate) {
      this.creationDetailDate = creationDetailDate;
   }
   public String getCreationDetailTime() {
      return creationDetailTime;
   }
   public void setCreationDetailTime(String creationDetailTime) {
      this.creationDetailTime = creationDetailTime;
   }
   public String getProviderNihii() {
      return providerNihii;
   }
   public void setProviderNihii(String providerNihii) {
      this.providerNihii = providerNihii;
   }
   public String getPrestationCode() {
      return prestationCode;
   }
   public void setPrestationCode(String prestationCode) {
      this.prestationCode = prestationCode;
   }
   public int getQuantity() {
      return quantity;
   }
   public void setQuantity(int quantity) {
      this.quantity = quantity;
   }
   public String getBeginDate() {
      return beginDate;
   }
   public void setBeginDate(String beginDate) {
      this.beginDate = beginDate;
   }
   public String getEndDate() {
      return endDate;
   }
   public void setEndDate(String endDate) {
      this.endDate = endDate;
   }
}

参考第4.5.2. Repeating Segments节,定义XML中不应该有用于重复嵌套元素的嵌套段标记。同时,输入 XML 中的嵌套标记 <ePrestationList><ePrestation> 应相应更改。按照以下代码片段更新 XML 应该可以解决问题。

定义XML

            ...
            <field name="receivedNissNumber" />
            <!-- <segment name="ePrestationList"> -->
            <segment name="ePrestationList"
                class="be.cm.apps.application.beanz.ePrestation" collection="list"
                minOccurs="1" maxOccurs="unbounded">
                <field name="order" />
                <field name="creationDetailDate" />
                <field name="creationDetailTime" />
                <field name="providerNihii" />
                <field name="prestationCode" />
                <field name="quantity" />
                <field name="beginDate" />
                <field name="endDate" />
            </segment>
            <!-- </segment> -->
        </segment>  

输入XML

    ...
    <ePrestationList>
        <!-- <ePrestation> -->
        <order>2</order>
        <creationDetailDate>2019-03-05</creationDetailDate>
        <creationDetailTime>10:12:41</creationDetailTime>
        <providerNihii>10765515001</providerNihii>
        <prestationCode>101010</prestationCode>
        <quantity>1</quantity>
        <beginDate>2019-03-05</beginDate>
        <endDate>2019-03-05</endDate>
        <!-- </ePrestation> --> 
    </ePrestationList>
    <!-- <ePrestation> -->
    <ePrestationList>
        <order>3</order>
        <creationDetailDate>2019-03-05</creationDetailDate>
        <creationDetailTime>10:12:41</creationDetailTime>
        <providerNihii>10765515001</providerNihii>
        <prestationCode>144034</prestationCode>
        <quantity>1</quantity>
        <beginDate>2019-03-05</beginDate>
        <endDate>2019-03-05</endDate>
    <!-- </ePrestation> -->
    </ePrestationList>
</eattest>