我对beanio的RecordTerminator Parser属性感兴趣。它也适用于"段末期"等细分市场?也就是说,我有一个固定长度格式的流,其中包含具有可重复段的单个记录,所有流都是一行。因此,我已经设置了RecordTerminator =",但是它仍然给了我
==> Invalid 'state': Expected minimum 1 occurrences
==> Invalid 'city': Expected minimum 1 occurrences
==> Invalid 'street': Invalid field length, expected 35 characters
==> Invalid 'zip': Expected minimum 1 occurrences
它不会抱怨要重复段之前的字段,并且对可重复段中的字段的投诉是在映射中定义的,xml中的定义不正确,看起来像这样:
<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="employeeFile" format="fixedlength">
<parser>
<property name="recordTerminator" value="" />
</parser>
<record name="employee" class="example.Employee">
<field name="firstName" length="35" />
<field name="lastName" length="35" />
<field name="title" length="35" />
<field name="salary" length="35" />
<segment name="addressList" collection="list" minOccurs="1" maxOccurs="unbounded" class="example.Address">
<field name="street" length="35" />
<field name="city" length="35" />
<field name="state" length="35" />
<field name="zip" length="10" />
</segment>
</record>
</stream>
</beanio>
类实现是这样的:
package example;
public class Employee {
String firstName;
String lastName;
String title;
String salary;
List<Address> addressList;
// getters and setters not shown...
}
package example;
public class Address {
private String street;
private String city;
private String state;
private String zip;
// getters and setters not shown...
}
如果我从映射和输入字符串中删除了所有前面的字段以重复段,则剩余的字符串将适当地删除,并随后将其编组到JSON中,我什至没有更改Java类的实现,因此前面的字段留下来正如预期的那样,非初始化,但在编组后正确打印出来。我在哪里做错了?
好吧,我的骆驼代码在Spring XML中,看起来像这样:
<route id="simple-route">
<!-- from id="request-file" uri="file://C:/mqdocuments/?fileName=response464.txt"/-->
<from id="request-file" uri="file://C:/mqdocuments/?fileName=request464.txt"/>
<log id="route-log-request" message="request: ${body}"/>
<setHeader headerName="CamelJmsDestinationName" id="_setHeader1">
<constant>queue://QM_TEST/INPUTQ?targetClient=1</constant>
</setHeader>
<to id="_to1" pattern="InOut" uri="websphere:queue:SYSTEM.DEFAULT.LOCAL.QUEUE?useMessageIDAsCorrelationID=true&replyTo=REPLYQ"/>
<log id="route-log-response" message="response: ${body}"/>
<transform>
<simple>${body} </simple>
</transform>
<unmarshal ref="parseTransactions464"/>
<marshal ref="jack"/>
<log id="route-log-json" message="jackson: ${body}"/>
</route>
基本上,当我从文件中输入输入时,保存回复响应并在评论MQ中放置在端点上时,请删除,但是如果我将请求提交给队列并获得响应,那么我希望通过简单地添加EOF字符的转换来纠正问题,因为没有它,它就会给我我首先报告的错误。转换无济于事,因为我不知道如何编写EOF(ASCII 26(,但是即使我弄清楚了,我不确定它会有所帮助。
我将尝试以此为答案,不幸的是我无法测试,我没有任何设置可与骆驼一起使用。首先,我不会更改BeanIO
的默认recordTerminator
值,并将其保留为使用CR
,LF
或CRLF
中的任何默认值。
然后,在消息的转换中,我将附加一个newline( n(而不是