我需要在我的Camel路由中将入站xml编组为SOAP数据格式以用于数据转换,我遇到一个问题,其中入站消息包含在除了root之外的元素中定义的命名空间,这导致部分邮件丢失或格式不正确。
我如何为具有多个名称空间的消息定义SoapJaxbDataFormat?
示例Camel Route我一直用来追踪我的问题
import com.example.ws.ExampleDataResponse;
import javax.xml.namespace.QName;
import org.apache.camel.dataformat.soap.name.QNameStrategy;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.dataformat.SoapJaxbDataFormat;
public class ExampleCamelRoute extends RouteBuilder {
// defining my SOAP format
SoapJaxbDataFormat soapExampleDataResponse;
@Override
public void configure() throws Exception {
// Setting my data format
soapExampleDataResponse = new SoapJaxbDataFormat(ExampleDataResponse.class.getPackage().getName(), new QNameStrategy(new QName("http://ws.example.com","exampleDataResponse")));
// Enter route definition here
from("amqp:queue:{{ExampleDataResponse.queue}}").routeId("ExampleDataResponse")
.streamCaching()
.log("Data receved from example")
// view the orignal message
.to("file:C:/Camel_Target?fileName=ExampleData_Orignal.xml", "direct:writeMarshaledData", "direct:writeUnMarshaledData");
from("direct:writeMarshaledExampleData").routeId("writeMarshaledExampleData")
.marshal(soapExampleDataResponse)
// view the marshaled message
.to("file:C:/Camel_Target?fileName=ExampleData_marshal.xml");
from("direct:writeUnMarshaledExampleData").routeId("writeUnMarshaledExampleData")
.unmarshal(soapExampleDataResponse)
// view the unmarshaled message
.to("file:C:/Camel_Target?fileName=ExampleData_UnMarshaled.xml");
}
}
写入文件的原始入站xml邮件示例,我需要将此数据编组/解组为SOAP格式
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<exampleDataResponse xmlns="http://ws.example.com">
<exampleDataReturn>
<name>user1</name>
<number>8797877979877</number>
<contacts>
<ns1:name xmlns:ns1="http://contact.ws.example.com">contact1</ns1:name>
<ns2:number xmlns:ns2="http://contact.ws.example.com">4545664464564</ns2:number>
</contacts>
</exampleDataReturn>
</exampleDataResponse>
</soapenv:Body>
</soapenv:Envelope>
写入文件的示例封送数据
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns2:Envelope xmlns:ns5="http://data.contact.ws.example.com" xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns4="http://contact.ws.example.com" xmlns:ns3="http://ws.example.com">
<ns2:Body>
<ns3:exampleDataResponse>4545664464564</ns3:exampleDataResponse>
</ns2:Body>
</ns2:Envelope>
正如您所看到的,此处的数据不正确。
写入文件的解组邮件示例
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<ns2:exampleDataResponse xmlns="http://contact.ws.example.com" xmlns:ns2="http://ws.example.com"/>
正如你可以看到这里的数据是不正确的,我在我的骆驼路线中使用了很多SoapJaxbDataFormat并且之前没有遇到过这个问题,陌生人仍然没有错误。
感谢您提供有关我如何正确定义此格式的任何帮助。