如何使用 apache camel 在 xml 中生成自定义标签名称和命名空间
How to generate custom tag names and namespaces in xml using apache camel
我正在尝试使用 camel bindy 将管道分隔的字符串数据转换为 xml。但它会生成标签以及 class 名称。我还想将名称空间添加到我的标签中。
我尝试使用 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>
上面发布的是给定 transformation.In 第一个标签的输出,它正在打印带有整个包的标签名称和 class 名称(例如:com.abc.domain.Pojo)。另外我'我正在尝试生成命名空间,但它没有在我的输出中生成它。
也许您可以添加额外的 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?)
我正在尝试使用 camel bindy 将管道分隔的字符串数据转换为 xml。但它会生成标签以及 class 名称。我还想将名称空间添加到我的标签中。
我尝试使用 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>
上面发布的是给定 transformation.In 第一个标签的输出,它正在打印带有整个包的标签名称和 class 名称(例如:com.abc.domain.Pojo)。另外我'我正在尝试生成命名空间,但它没有在我的输出中生成它。
也许您可以添加额外的 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?)