簡體   English   中英

使用Apache Camel將XML文件轉換為std:out(格式化)

[英]XML file to std:out (formated) with Apache Camel

我想使用Apache Camel打印以控制台格式化XML文件:

預期輸出為:

XML->

<client book="Camel in Action" author="4995" title="1"/>

std:out->

Client
book: Camel in Action
author: 4995
title: 1

我當前的代碼:

    public class MyRouteBuilder extends RouteBuilder {
        @Override
        public void configure() throws Exception {

        JAXBContext jaxbContext =    
        JAXBContext.newInstance(Client.class);
        JaxbDataFormat jaxbDataFormat = new  
        JaxbDataFormat(jaxbContext);


        from("file:/home/tkaczmarek/usr/data/inbox/")
            .unmarshal(jaxbDataFormat)
            .to("file:/home/tkaczmarek/usr/data/outbox")
            .log("${body}");
    }
}

客戶端.java

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Client {

@XmlAttribute
private String book;

@XmlAttribute
private String author;

@XmlAttribute
private String title;
}

如何獲得預期的輸出? 現在,它只是打印到std:out帶有標簽的XML文件:(

好的,所以我不完全了解您的工作,但是可以使用如下所示的bean()代替log()來打印未編組的 xml並以所需的任何方式對其進行格式化。

from("file:/home/tkaczmarek/usr/data/inbox/")
    .to("file:/home/tkaczmarek/usr/data/outbox")
    .bean(XmlToBean.class);

這是XmlToBean類-

public class XmlToBean {
    public void transformXmlObject(Client client){
        System.out.println(client.toString());
    }
}

注意,除非您有一些特殊要求,否則我什至沒有使用過unmarshal()因為僅在類路徑中才需要使用它。 如果您認為添加另一個類是多余的,那么process()也足夠了,如下所示:

from("file:/home/tkaczmarek/usr/data/inbox/")
    .to("file:/home/tkaczmarek/usr/data/outbox")
    .process(exchange -> {
        System.out.println(exchange.getIn().getBody(Client.class));
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM