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之前的字段。