Spring通过JAXB或其他工具集成动态XML
目前,我有一个Spring集成XML文件,它使用JAXB将JavaPOJO编组为XML,然后将它们作为JMS消息发送。但是,我不想编组Java POJO并通过JMS发送,而是想将Java文件中动态生成的XML字符串发送到下面同一个集成文件中的JMS。因此,我认为可能会通过替换下面文件中请求的现有封送拆收器和转换器来完成,但我不知道具体如何完成 简而言之,我想知道如何用动态XML字符串发送并替换Java POJO的编组 更新 我研究并发现DOMSource将是生成动态XML的完美工具。我能够在Java文件中轻松地将DOM转换为字符串,但无法通过Spring集成实现。我需要使用下面的spring集成文件将字符串转换为XML,而不是Java对象转换为XMLSpring通过JAXB或其他工具集成动态XML,xml,spring-boot,jaxb,spring-integration,Xml,Spring Boot,Jaxb,Spring Integration,目前,我有一个Spring集成XML文件,它使用JAXB将JavaPOJO编组为XML,然后将它们作为JMS消息发送。但是,我不想编组Java POJO并通过JMS发送,而是想将Java文件中动态生成的XML字符串发送到下面同一个集成文件中的JMS。因此,我认为可能会通过替换下面文件中请求的现有封送拆收器和转换器来完成,但我不知道具体如何完成 简而言之,我想知道如何用动态XML字符串发送并替换Java POJO的编组 更新 我研究并发现DOMSource将是生成动态XML的完美工具。我能够在Ja
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element root = document.createElement("Root");
document.appendChild(root);
Element foo = document.createElement("Foo");
foo.appendChild(document.createTextNode("Bar"));
root.appendChild(foo);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(document), result);
System.out.println("XML IN String format is: \n" + writer.toString());
我的要求是通过以下XML中的Spring集成将DOMSource的结果转换为字符串。更改可能必须在下面XML格式的bean id中完成:Verify_Flight_Detail_Req_MarshallingTransformer
**
**
这就是POJO当前被编组的方式
@xmlacessortype(xmlacesstype.FIELD)
@XmlRootElement(name=“Root”)
公共类VerifyFlightDetailReq{
私有静态最终长serialVersionUID=1L;
@XmlElement(name=“航班号”)
私人字符串航班号;
@XmlElement(name=“PNR\U编号”)
私有字符串pnr_编号;
@XmlElement(name=“客户全名”)
私有字符串customerFullName;
更新2:
请看下面对我有用的答案。经过一番努力,我终于明白了自己的意思。我使用DomSource生成XML字符串,然后通过自定义转换器而不是JaxB转换器将其传递给JMS 在服务/存储库类中
VerifyFlightReqID req = VerifyFlightReqID();
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element root = document.createElement("Root");
document.appendChild(root);
Element foo = document.createElement("Foo");
foo.appendChild(document.createTextNode("Bar"));
root.appendChild(foo);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
req.setXmlPayload(writer.toString());
verifyFlightDetailGateway.requestreply(req);
public class DynamicXmlTransformer {
@Transformer
public Message<String> buildTransformer(Message message) {
//Your Data Type which you send through gateway or you can use just use string to pass XML from your service interface
VerifyFlightReqID req = (VerifyFlightReqID ) message.getPayload();
return MessageBuilder.withPayload(req.xmlpayload).build();
}
变压器类
VerifyFlightReqID req = VerifyFlightReqID();
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element root = document.createElement("Root");
document.appendChild(root);
Element foo = document.createElement("Foo");
foo.appendChild(document.createTextNode("Bar"));
root.appendChild(foo);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
req.setXmlPayload(writer.toString());
verifyFlightDetailGateway.requestreply(req);
public class DynamicXmlTransformer {
@Transformer
public Message<String> buildTransformer(Message message) {
//Your Data Type which you send through gateway or you can use just use string to pass XML from your service interface
VerifyFlightReqID req = (VerifyFlightReqID ) message.getPayload();
return MessageBuilder.withPayload(req.xmlpayload).build();
}
公共类DynamicXmlTransformer{
@变压器
公共消息buildTransformer(消息消息){
//您通过网关发送的数据类型,或者您可以使用字符串从服务接口传递XML
VerifyFlightReqID req=(VerifyFlightReqID)消息。getPayload();
返回MessageBuilder.withPayload(req.xmlpayload.build();
}
Spring不整合XML更改
<bean id="DynamicXmlTransformer" class="cipac.integration.mq.common.DynamicXmlTransformer" />
<int:chain id="Verify_Flight_Detail_Req_Chain"
input-channel="Verify_Flight_Detail_Req"
output-channel="Verify_Flight_Detail_Req_Raw" >
<!-- transform -->
ref="DynamicXmlTransformer" method="buildTransformer"/>
</int:chain>
ref=“dynamicxmltransfer”method=“buildTransformer”/>