0

JSON ペイロードをアンマーシャリングし、ヘッダーとフッターを含むすべてのレコードをテキスト ファイルに書き込もうとしています。すべてのレコードには | があります。ヘッダーとフッターを含む区切り文字。交換したい | |"(パイプ + 引用符) を使用します。

プロセスで例外を下回っています。org.apache.camel.language.bean.RuntimeBeanExpressionException: メソッドの呼び出しに失敗しました: null で replace('|', '|"') が原因: org.apache.camel.component.bean.MethodNotFoundException: 名前のメソッド: replace ('|', '|"')

誰かが問題を解決するのを手伝ってくれますか?

@Component
public class EmployeePackageRoute extends RouteBuilder {

    @Autowired
    private Header header;
    
    private Trailer footer;
    
    @SuppressWarnings("deprecation")
    @Override
    public final void configure() {
        System.out.println("fetching employee details from employee api");
        try {
            
            from("jetty://http://localhost:8084/employee-package/getEmployee")
            .unmarshal().json(JsonLibrary.Jackson, RecurringPaymentResults.class)
            .process(
                    ex -> {
                        RecurringPaymentResults result = ex.getIn().getBody(RecurringPaymentResults.class);
                        List<RecurringPaymentsDeduct> employee = result.getResults();
                        ex.getOut().setBody(employee);
                        
                    })
            .to("seda:employeeFeed");
            
            final DataFormat bindy = new BindyFixedLengthDataFormat(RecurringPaymentsDeduct.class);
            
            footer = new Trailer("TRAILER",3);
            
            Map<String, Object> headerObjMap = new HashMap<String,Object>();
            headerObjMap.put(Header.class.getName(), header);
            
            Map<String, Object> footerObjMap = new HashMap<String,Object>();
            footerObjMap.put(Trailer.class.getName(), footer);
            
            from("seda:employeeFeed")
            .log("process csv")
            .process(
                    ex -> {
                                                
                        ex.getOut().setHeader(BindyFixedLengthDataFormat.CAMEL_BINDY_FIXED_LENGTH_HEADER, headerObjMap);
                        ex.getOut().setBody(ex.getIn().getBody());
                        ex.getOut().setHeader(BindyFixedLengthDataFormat.CAMEL_BINDY_FIXED_LENGTH_FOOTER, footerObjMap);
                        
                    })
            .marshal(bindy)
            .log("csv processed")
            .transform(simple("${body.replace('|', '|\"')}"))
            //.to("file://C:\\Users\\testfolder?fileName=test.csv")
            .to("file://C:\\Users\\testfolder?fileName=test.txt")
            .end();
            
                        
        } catch(Exception e) {
            System.out.println("Error occurred while processing employee data: "+e.getMessage());
            e.printStackTrace();
        }
    }
}

    @Data
    @Section(number = 2)
    @FixedLengthRecord(header = Header.class, footer = Trailer.class)
    public class RecurringPaymentsDeduct implements Serializable {
    
        private static final long serialVersionUID = 1L;
        
       @DataField(pos = 1, length = 5, delimiter = "|")
    public String RECTY;
    
    @DataField(pos = 2, length = 5, delimiter = "|")
    public String CLIID;
    
    @DataField(pos = 3, length = 5, delimiter = "|")
    public String INTCA;
    
    @DataField(pos = 4, length = 5, delimiter = "|")
    public String ORDNO;
    
    @DataField(pos = 5, length = 5, delimiter = "|")
    public String IOPER;
    
    @DataField(pos = 6, length = 5, delimiter = "|")
    public String INFTY;
    
    @DataField(pos = 7, length = 5, delimiter = "|")
    public String SUBTY;
    
    @DataField(pos = 8, length = 5, delimiter = "|")
    public String BEGDA;
    
    @DataField(pos = 9, length = 5, delimiter = "|")
    public String ENDDA;
    
    @DataField(pos = 10, length = 5, delimiter = "|")
    public String OBJPS;
    
        
    }


@Configuration
@EnableConfigurationProperties
@ConfigurationProperties("test")
@Data
@Section(number = 1)
@FixedLengthRecord()
public class Header implements Serializable {

    private static final long serialVersionUID = 1L;

    @DataField(pos = 1, length = 5, delimiter = "|")
    private String header1;
    
    @DataField(pos = 2, length = 6, delimiter = "|")
    private String header2;
    
    @DataField(pos = 3, length = 13, delimiter = "|")
    private String header3;
    
    @DataField(pos = 4, length = 37, delimiter = "|")
    private String header4;
    
    @DataField(pos = 5, length = 15, delimiter = "|")
    private String header5;
    
    @DataField(pos = 6, length = 33, delimiter = "|")
    private String header6;
    
    @DataField(pos = 7, length = 47, delimiter = "|")
    private String header7;
    
    @DataField(pos = 8, length =  8, pattern = "YYYYMMDD", delimiter = "|")
    private String header8;
    
    @DataField(pos = 9, length = 6, delimiter = "|")
    private String header9;
    
    @DataField(pos = 10, length = 1, delimiter = "|")
    private String header10;
    
    @DataField(pos = 11, length = 2, delimiter = "|")
    private String header11;
    
    @DataField(pos = 12, length = 2, delimiter = "|")
    private String header12;
    
    @DataField(pos = 13, length = 2, delimiter = "|")
    private String header13;
}


@Section(number = 3)
@FixedLengthRecord
public class Trailer implements Serializable {

    private static final long serialVersionUID = 1L;

   @DataField(pos = 1, length = 7, delimiter = "|")
    private String trailer;
    
    @DataField(pos = 2, length = 2)
    private int count;
    
    public String getTrailer() {
        return trailer;
    }
    public void setTrailer(String trailer) {
        this.trailer = trailer;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
}

出力例: HEADR|GVEMQG|xxxx GROUP|Tech Workplace HR Team|+61 408 188 031|itghrteam@xxxx.com|AQEMQG_20171113170000_AUMBCR_HRMD01_DUT8G2I.SAP|YYYYMMDD|HHMMSS|P|01|||

RECTY|CLIID|INTCA|ORDNO|IOPER|INFTY|SUBTY|BEGDA|ENDDA|OBJPS|SRPPS|SEQNR|EXTRA|LGART|BETRG|WAERS|ANZHL|ZEINH|ZDATE|ZFPER|ZANZL|ZEINZ|ZUORD|MODEL|UWDAT

トレーラー| 3

4

2 に答える 2