BeanIO 2.1包装细分

问题描述:

你好家伙我正在使用BeanIO写入CSV文件。BeanIO 2.1包装细分

我有一个复杂的类结构,我想在一列输出。这里是我正在使用的课程。 “主” 类GprsEvent

public class GprsEvent 
{ 
    private ListOfServiceData listOfServiceData; 
    // setters and getters omitted 
} 

public class ListOfServiceData implements Serializable 
{ 
    private List<ChangeOfServiceCondition> seqOf = null; 
    // setters and getters omitted 
} 

public class ChangeOfServiceCondition implements Serializable 
{ 
    private RatingGroupId ratingGroup = null; 
    private ChargingRuleBaseName chargingRuleBaseName = null; 
    private ResultCode resultCode = null; 
    private LocalSequenceNumber localSequenceNumber = null; 
    private TimeStamp timeOfFirstUsage = null; 
    private TimeStamp timeOfLastUsage = null; 
    private CallDuration timeUsage = null; 
    private ServiceConditionChange serviceConditionChange = null; 
    **private EPCQoSInformation qoSInformationNeg = null;** // Complex Type 
    private GSNAddress servingNodeAddress = null; 
    private DataVolumeGPRS datavolumeFBCUplink = null; 
    private DataVolumeGPRS datavolumeFBCDownlink = null; 
    private TimeStamp timeOfReport = null; 
    private FailureHandlingContinue failureHandlingContinue = null; 
    private ServiceIdentifier serviceIdentifier = null; 
    private BerOctetString userLocationInformation = null; 
    // setters and getters omitted 
} 

public class EPCQoSInformation implements Serializable 
{ 

    public byte[] code = null; 
    private BerInteger qCI = null; 
    private BerInteger maxRequestedBandwithUL = null; 
    private BerInteger maxRequestedBandwithDL = null; 
    private BerInteger guaranteedBitrateUL = null; 
    private BerInteger guaranteedBitrateDL = null; 
    private BerInteger aRP = null; 
    // setters and getters omitted 
} 

我已经通过BeanIO文档阅读,发现怎么做,我打算:http://beanio.org/2.1/docs/reference/index.html#AdvancedTopics - 5.8.2。包装成块

所以这是我beanio XML文件的一部分:

<record class="net.atos.tools.radiation.convert.event.gprs.GprsEvent" 
     name="sGWRecord" maxOccurs="unbounded" minOccurs="0" order="1"> 

    <segment name="listOfServiceData"> 
    <segment name="listOfServiceData" class="net.atos.open.muc.generated.datatypes.ListOfServiceData"> 
     <segment name="changeOfServiceCondition"> 
     <segment name="changeOfServiceCondition" class="net.atos.open.muc.generated.datatypes.ChangeOfServiceCondition" collection="list" minOccurs="0" maxOccurs="unbounded"> 
      <field name="ratingGroup" type="net.atos.open.muc.generated.datatypes.RatingGroupId" /> 
      <field name="chargingRuleBaseName" type="net.atos.open.muc.generated.datatypes.ChargingRuleBaseName" /> 
      <field name="resultCode" type="net.atos.open.muc.generated.datatypes.ResultCode" /> 
      <field name="localSequenceNumber" type="net.atos.open.muc.generated.datatypes.localSequenceNumberp"/> 
      <field name="timeOfFirstUsage" type="net.atos.open.muc.generated.datatypes.TimeStamp"/> 
      <field name="timeOfLastUsage" type="net.atos.open.muc.generated.datatypes.TimeStamp"/> 
      <field name="timeUsage" type="net.atos.open.muc.generated.datatypes.CallDuration"/> 
      <segment name="qoSInformationNeg"> 
      <segment name="qoSInformationNeg" class="net.atos.open.muc.generated.datatypes.EPCQoSInformation" occursRef="timeUsage"> 
        <field name="qCI" type="org.openmuc.jasn1.ber.types.BerInteger"/> 
        <field name="maxRequestedBandwithUL" type="org.openmuc.jasn1.ber.types.BerInteger"/> 
        <field name="maxRequestedBandwithDL" type="org.openmuc.jasn1.ber.types.BerInteger"/> 
        <field name="guaranteedBitrateUL" type="org.openmuc.jasn1.ber.types.BerInteger"/> 
        <field name="guaranteedBitrateDL" type="org.openmuc.jasn1.ber.types.BerInteger"/> 
        <field name="aRP" type="org.openmuc.jasn1.ber.types.BerInteger"/> 
      </segment> 
      </segment> 
     </segment> 
     </segment> 
    </segment> 
    </segment> 

</record> 

我receving以下错误:org.beanio.BeanIOConfigurationException:无效的段 'qoSInformationNeg',在段 'qoSInformationNeg',段'changeOfServiceCondition',段'changeOfServiceCondition',段'listOfServiceData',段'listOfServiceData',记录'sGWRecord',流'gprs'中:当maxOccurs大于1并且设置了类时所需的集合

Okay foun d解决方案,当存在多个collection="list"时会发生问题。例如,在我的XML文件中,第一个列表中出现的是:

<field name="sgsnAddressLength" type="java.lang.Integer" typeHandler="sgsnAddressLengthHandler" /> 
<field name="sgsnAddresses" type="net.atos.open.muc.generated.datatypes.GSNAddress" collection="list" occursRef="sgsnAddressLength" typeHandler="sgsnAddressesHandler" /> 

如果下一个列表后发生:

<segment name="changesOfServiceCondition" class="net.atos.open.muc.generated.datatypes.ChangeOfServiceCondition" 
        collection="list" minOccurs="0" maxOccurs="1"> 

在第一个列表occourance存在的领域,你必须添加:occursRef关键字。在我的情况下,第一个列表名称是sgsnAddresses,我必须添加occursRef="sgsnAddressLength",因为sgsnAddressLength是在第一个列表occourance之前的字段。