【问题标题】:How to generate custom tag names and namespaces in xml using apache camel如何使用 apache camel 在 xml 中生成自定义标签名称和命名空间
【发布时间】:2020-01-30 04:37:09
【问题描述】:

我正在尝试使用骆驼绑定将管道分隔的字符串数据转换为 xml。但它正在生成标签以及类名。另外我想将命名空间添加到我的标签中。

我尝试使用 Camel 进程生成自定义标签,它不起作用。

ConverterRoute.java


    private static final String SOURCE_INPUT_PATH = "file://inbox?fileName=3000.txt";

    private static final String SOURCE_OUTPUT_PATH = "file://outbox?fileName=itemfile.xml";

    public void addRoutesToCamelContext(CamelContext context) throws Exception {
        context.addRoutes(new RouteBuilder() {
            public void configure() {
                try {
                    DataFormat bindyFixed = new BindyCsvDataFormat(PartInboundIFD.class);

                    NameSpace nameSpace = new NameSpace("PART_INB_IFD","https://apache.org.com");
                    from(SOURCE_INPUT_PATH).
                            unmarshal(bindyFixed).
                            marshal().
                            xstream().
                            to(SOURCE_OUTPUT_PATH);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

Pojo.java

@CsvRecord(separator = "\\|",skipField = true)
public class Pojo {

    @Link
    private ControlSegment CONTROL_SEGMENT;

}

CamelComponent.java

public class CamelConfig extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        try {
            CamelContext context = new DefaultCamelContext();
            ConverterRoute route = new ConverterRoute();
            route.addRoutesToCamelContext(context);
            context.start();
            Thread.sleep(5000);
            context.stop();
        } catch (Exception exe) {
            exe.printStackTrace();
        }
    }
}

输出 Result.xml

<list>
    <com.abc.domain.Pojo>
        <CONTROL__SEGMENT/>
            <TRNNAM>PART_TRAN</TRNNAM>
            <TRNVER>9.0</TRNVER>
    </com.abc.domain.Pojo>
</list>

上面发布的是给定转换的输出。在第一个标签中,它正在打印带有整个包和类名的标签名称(例如:com.abc.domain.Pojo)。我也在尝试生成它的命名空间没有在我的输出中生成。

【问题讨论】:

    标签: java xml apache-camel bindy


    【解决方案1】:

    也许您可以添加额外的 XSLT 路由 (https://camel.apache.org/components/latest/xslt-component.html)。 在 XSLT 中,可以根据自己的喜好转换 XML 并添加正确的命名空间 (How can I add namespaces to the root element of my XML using XSLT?)

    【讨论】:

    • 这帮助我们解决了命名空间问题。但是我可以在同一个输出文件中生成单个 xml 而不是 xml 列表吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    相关资源
    最近更新 更多