beanio 能否根据另一个字段中的条件值支持动态段?



我正在尝试映射固定长度的消息,该消息可能根据另一个字段中的值具有不同的段?

例如:

<stream name="employeeFile" format="csv">
<record name="employee" class="example.Employee">
<field name="firstName" length="10" />
<field name="lastName" length="10" />
<field name="title" length="10" />
<field name="salary" length="6" padding="0" justify="right" />
<field name="hireDate" length="8" format="MMddyyyy" />
<field name="segmentEnum" length="10" />
<segment name="mailingAddressSimple" class="example.Address">
<field name="street" length="50" />
<field name="city" length="20" />
<field name="state" length="2" />
<field name="zip" length="5" />
</segment>
<segment name="mailingAddressFull" class="example.FullAddress">
<field name="street" length="30" />
<field name="state" length="2" />
<field name="city" length="20" />
<field name="zip" length="5" />
<field name="country" length="10" />
<field name="phone" length="10" />
</segment>
</record>
</stream>
</beanio>

在此示例中,我需要根据 segmentEnum 值映射具有动态段的固定长度消息。当segmentEnum值为"Simple"时,使用段"mailingAddressSimple"来映射字符串,但是当值为"Full"时,通过"mailingAddressFull"段映射邮件。它要么简单,要么完整。

根据我对用户手册的了解和理解,您所要求的是不可能的。

我看到简单映射和完整映射之间的区别只是完整映射的额外最后 2 个字段。我的建议是只在mapping.xml文件中包含完整映射的详细信息,并将最后 2 个字段(countryphone(设为可选。这仍然允许您完全读取平面文件并填充对象。然后,我会在阅读文件后遍历对象图,然后可能会根据枚举的值将FullAddress对象拆分为AddressFullAddress对象。

这完全取决于您的用例以及您对使用它的代码和流程的控制。如果您能详细说明所涉及的其他因素,我们也许可以找到另一种解决方案。

编辑:您可以考虑的唯一选择是为您的细分使用内联map。但它仍然需要一些后处理来确定它是Simple地址还是Full地址。请参阅重复句段文档,尤其是Sec 4.5.2.1 Inline Maps

相关内容

  • 没有找到相关文章

最新更新