我正在尝试将@Group 与 beanio 一起使用。但我不断收到这个错误。
org.beanio.BeanWriterException: Bean identification failed: no record or group mapping for bean class 'class com.apps.abc.transfer.test$Main' at the current position
at org.beanio.internal.parser.BeanWriterImpl.write(BeanWriterImpl.java:81)
at org.beanio.internal.parser.BeanWriterImpl.write(BeanWriterImpl.java:51)
at com.surveysampling.apps.rewardbatchprocessor.avios.transfer.test.should write file(test.groovy:81)
我尝试了几种不同的方法,但似乎没有任何效果。有没有人有这个工作?
这是 groovy 中的测试类:它的工作原理非常重要。任何帮助表示赞赏。
package com.apps.abc.transfer
import org.beanio.builder.FixedLengthParserBuilder
import spock.lang.Specification
import org.beanio.*
import org.beanio.annotation.*
import org.beanio.builder.StreamBuilder
class test extends Specification
{
BeanWriter out;
def setup()
{
StreamFactory streamFactory = StreamFactory.newInstance();
StreamBuilder builder2 = new StreamBuilder("abc")
.format("fixedlength")
.parser(new FixedLengthParserBuilder())
.addGroup(Main.class);
streamFactory.define(builder2);
StringWriter writer = new StringWriter()
out = streamFactory.createWriter("abc", writer);
}
def "should write file"()
{
given:
Header header = new Header()
header.name = "A"
BatchHeader batchHeader = new BatchHeader()
batchHeader.name = "B"
BatchDetail batchDetail = new BatchDetail()
batchDetail.name = "C"
BatchDetail batchDetail2 = new BatchDetail()
batchDetail2.name = "E"
BatchFooter batchFooter = new BatchFooter()
batchFooter.name = "F"
Batch batch = new Batch()
batch.batchHeader = batchHeader
batch.batchFooter = batchFooter
ArrayList<BatchDetail> arrayList = new ArrayList<>()
arrayList.add(batchDetail)
arrayList.add(batchDetail2)
batch.details = arrayList
Main main = new Main()
main.header = header
main.batch = batch
when:
out.write(main)
then:
println("out : " + out)
}
@Group
static class Main {
@Record
public Header header;
@Group
public Batch batch;
}
static class Header {
@Field(at=0, rid=true, literal="H", length = 1 )
public String type;
@Field(at=1, length = 1)
public String name;
}
static class Batch {
@Record(order=1, maxOccurs=1)
public BatchHeader batchHeader;
@Record(order=2)
public List<BatchDetail> details;
@Record(order=3, maxOccurs=1)
public BatchFooter batchFooter;
}
static class BatchHeader {
@Field(at=0, rid=true, literal="BH", length = 2)
public String type;
@Field(at=1, length = 1)
public String name;
}
static class BatchDetail {
@Field(at=0, rid=true, literal="BD", length = 2)
public String type;
@Field(at=1, length = 1)
public String name;
}
static class BatchFooter {
@Field(at=0, rid=true, literal="BF", length = 2)
public String type;
@Field(at=1, length = 1)
public String name;
}
}
谢谢