2013-08-06 5 views
0

최근 내 플랫 (탭 구분) 파일을 Java 객체로 구문 분석하기 위해 BeanIO 프레임 워크를 2.0.6 버전으로 업그레이드했으며 이상한 동작을 발견했습니다. BeanIO가 나에게이 오류 메시지를 던지기 때문에 끝에있는 마지막 파일 줄에 필드를 null로 남겨 둘 수 없습니다 : "예상 최소 1 번 발생."BeanIO - 예상 최소 1 회

전체 레코드에서 maxLength를 4로 설정하여 끝에 여분의 null 필드를 차지하도록했지만 그 예외를 여전히 throw합니다. 이상한 점은 마지막 줄에만 적용되고 다른 줄에는 null 필드가 아니라는 것입니다.

매핑 :

<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="Inventory" format="delimited" strict="true" resourceBundle="com.crunchtime.mapping.cdp.Inventory"> 
    <record name="myRecord" minOccurs="1" maxOccurs="unbounded" minLength="0" maxLength="4" class="com.test.Record"> 
     <field name="userName" type="string"/> 
     <field name="userId" type="string"/> 
     <field name="type" type="string"/> 
     <field name="version" type="string"/> 
    </record> 
    </stream> 
</beanio> 

파일 :

Mark User1 M 1.0 
Tom User2 D 1.1 
Jim User3 M 2.0 
Scott User4 G 

사람이 그 동작을 비활성화하는 방법에 대한 아이디어를 가지고 있습니까? beanio.properties를 보았지만 잠겨 있기 때문에 수정할 수 없습니다.

답변

4

BeanIO 2.0 이상을 사용하면 minOccurs = "0"인 입력 스트림에없는 필드를 구성해야합니다.

+0

그래, 그게 해결할 것이지만 내가 이해하지 못하는 이유는 이것이 마지막 줄에만 왜 왜 그렇지 않으면 제대로 필드를 정의 할 때 null 값을 갖는지 (나는 그것에 대한 탭이 있음) "존재하지 않는다 들". 기본 beanio.properties 파일과 org.beanio.field.minOccurs.delimited = 1 설정을 덮어 쓸 좋은 방법이 있는지 알고 계십니까? beanio.properties를 수정할 수 있도록 Maven을 통해 BeanIO를 얻지 만 프로젝트의 일부로 실제로 체크인 할 수 있습니다. 이미 maven에서 jar 파일을 가져 오는 방법이 있지만 StreamFactory.class에 내 로컬 beanio.properties 파일을 사용하는 방법을 알려주시겠습니까? – goe

+0

Beanio.properties 파일을 클래스 경로에 추가하면 BeanIO가이를 사용하여 기본 설정을 덮어 씁니다. – Kevin