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

标签 java xml bean-io

我请求有关此 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 中不应该有用于重复嵌套元素的嵌套段标记。同时嵌套标签<ePrestationList><ePrestation>输入 XML 中应相应更改。更新以下代码片段后的 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>

关于java - BeanIO 的 Xml 映射,列表未正确解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55002712/

相关文章:

java - 如何在向 ArrayList 插入数据期间阻止检索 ArrayList 信息

java - JS 日期输出到隐藏文本字段

java - 尝试在 jSTL 中获取并解析 session 变量(xml 字符串)

java - 无法执行 android :on remind me 的方法

java - BeanIO 将带注释的类写入固定长度

java - 一条记录多行,只有第一个带有 RID

java - 在java中解析JSON响应以提取值

java - 如何修复 Catch 语句中的 SQLException?

java - 如何修改log4j中的map lookup