如何使用 spring 集成 dsl 解组 xml

     2023-02-16     251

关键词:

【中文标题】如何使用 spring 集成 dsl 解组 xml【英文标题】:How to unmarshall xml using spring integration dsl 【发布时间】:2018-09-18 22:37:00 【问题描述】:

我正在研究弹簧集成 dsl。要求是从队列中读取 xml 消息,基于消息头值,我需要调用不同的服务。我能够从队列中获取消息,但无法在 dsl 中编写代码以将 xml 消息解组为对象。有人可以帮忙吗?我有我的解组器,但无法用 dsl 连接它

 IntegrationFlows
            .from(Jms.inboundGateway(connectionFactory)
                    .destination(someQueue)
                    .configureListenerContainer(spec -> spec.get().setSessionTransacted(true)))
            .transform(??)

【问题讨论】:

【参考方案1】:

首先你可以用MarshallingMessageConverter配置Jms.inboundGateway()

/**
 * @param messageConverter the messageConverter.
 * @return the spec.
 * @see ChannelPublishingJmsMessageListener#setMessageConverter(MessageConverter)
 */
public S jmsMessageConverter(MessageConverter messageConverter) 
    this.target.getListener().setMessageConverter(messageConverter);
    return _this();

但如果你仍然坚持使用.transform(),那么考虑使用UnmarshallingTransformer

/**
 * An implementation of @link Transformer that delegates to an OXM
 * @link Unmarshaller. Expects the payload to be of type @link Document,
 * @link String, @link File, @link Source or to have an instance of
 * @link SourceFactory that can convert to a @link Source. If
 * @link #alwaysUseSourceFactory is set to true, then the @link SourceFactory
 * will be used to create the @link Source regardless of payload type.
 * <p>
 * The @link #alwaysUseSourceFactory is ignored if payload is
 * @link org.springframework.ws.mime.MimeMessage.
 * <p>
 * The Unmarshaller may return a Message, but if the return value is not
 * already a Message instance, a new Message will be created with that
 * return value as its payload.
 *
 * @author Jonas Partner
 * @author Artem Bilan
 */
public class UnmarshallingTransformer extends AbstractPayloadTransformer<Object, Object> 

https://docs.spring.io/spring-integration/docs/5.0.4.RELEASE/reference/html/xml.html#xml-unmarshalling-transformer

【讨论】:

谢谢。我进行了以下更改以使其正常工作。这是正确的方式吗.from(Jms.inboundGateway(connectionFactory) .destination(sourceQueue) .jmsMessageConverter(new MarshallingMessageConverter(jaxbMarshaller())) .configureListenerContainer(spec -&gt; spec.get().setSessionTransacted(true))) @Bean public org.springframework.oxm.Marshaller jaxbMarshaller() Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller(); .... return jaxb2Marshaller;

有一些方法可以为 spring 集成 dsl 流生成图表吗?

...器、聚合器、路由器等的Spring集成流程......这些流程都是使用spring集成dsl和注释创建的......所以 查看详情

如何处理 Spring 集成流的事务(Java DSL)

】如何处理Spring集成流的事务(JavaDSL)【英文标题】:HowtohandletransactionsforSpringintegrationflows(JavaDSL)【发布时间】:2018-09-2808:28:18【问题描述】:如何在Spring集成(JavaDSL)中为完整流程定义事务?通过Spring集成,我们可以定义一个... 查看详情

如何使用 jaxb 将 xml 字符串解组为 java 对象

】如何使用jaxb将xml字符串解组为java对象【英文标题】:howtounmarshallxmlstringtojavaobjectusingjaxb【发布时间】:2018-01-0616:00:49【问题描述】:我需要使用rest模板发送请求。在我发送之前,我需要在发送请求时将对象编组为xml。我收到... 查看详情

Spring 集成 DSL:配置仅在参数匹配时处理的处理程序

...atches【发布时间】:2018-03-0304:27:09【问题描述】:我正在使用SpringIntegrationDSL配置。是否可以添加方法引用处理程序,以便仅当消息有效负载与处理程序参数类型匹配时才调用处理程序?例如:在下 查看详情

在 Golang 中解组 XML 时如何在 interface 中获取数据?

】在Golang中解组XML时如何在interface中获取数据?【英文标题】:howtogetdataininterfacewhileunmarshalinganXMLinGolang?在Golang中解组XML时如何在interface中获取数据?【发布时间】:2014-05-1412:08:28【问题描述】:我正在尝试在golang中使用interface... 查看详情

如何将请求标头添加到 outboundGateway spring integration dsl

】如何将请求标头添加到outboundGatewayspringintegrationdsl【英文标题】:HowtoaddrequestheaderstooutboundGatewayspringintegrationdsl【发布时间】:2018-10-1500:31:57【问题描述】:我在spring集成dsl中找不到向outboundGateway添加标头的功能。.handle(outboundG... 查看详情

如何在 jax-ws 网络服务中解组 xml 文件

】如何在jax-ws网络服务中解组xml文件【英文标题】:Howtounmarshallxmlfileinajax-wswebservice【发布时间】:2013-05-2209:15:28【问题描述】:我试图解组一个使用jaxb的xml文件,它是netbeans中web服务方法中的一个xml文件。结果是解组永远不会... 查看详情

在将 XML 文件解组为对象后,如何让 JAXB 调用方法?

】在将XML文件解组为对象后,如何让JAXB调用方法?【英文标题】:HowcanIhaveJAXBcallamethodafterithascompletedunmarshallinganXMLfileintoanobject?【发布时间】:2010-11-0120:38:56【问题描述】:我正在使用JAXB将XML文件解组为Java对象——标准的东西... 查看详情

Spring数据查询dsl如何添加订单?

】Spring数据查询dsl如何添加订单?【英文标题】:Springdataquerydslhowtoaddorderby?【发布时间】:2019-03-0817:28:26【问题描述】:我是Querydsl的新手,我正在使用Spring数据和Querydsl来制作动态过滤器,我使用接口:QueryDslPredicateExecutor所以... 查看详情

使用 spring-integration-dsl 的动态 http 入站网关

】使用spring-integration-dsl的动态http入站网关【英文标题】:Dynamichttpinboundgatewayusingspring-integration-dsl【发布时间】:2018-09-2715:39:36【问题描述】:我正在尝试使用JavaDSL为HTTP入站网关创建和注册运行时集成流,如下所示@Autowiredprivat... 查看详情

Spring集成Java DSL:指定自定义反序列化器

】Spring集成JavaDSL:指定自定义反序列化器【英文标题】:SpringintegrationJavaDSL:specifycustomdeserializer【发布时间】:2016-10-1811:40:56【问题描述】:我有通过JMS传输到通过通道适配器侦听队列的组件的对象:IntegrationFlows.from(Jms.messageDri... 查看详情

如何将 SOAP XML 解组为 Java 对象 [重复]

】如何将SOAPXML解组为Java对象[重复]【英文标题】:HowtounmarshallSOAPXMLtoJavaObject[duplicate]【发布时间】:2014-11-2317:16:24【问题描述】:在尝试将我的soapXML解组为JAXB对象时,出现以下错误。我们收到错误,预期元素为无。在解组SOAPXM... 查看详情

使用 JAXB 解组多次出现的 XML 元素

】使用JAXB解组多次出现的XML元素【英文标题】:UnmarshallXMLelementthatoccursmorethanonceusingJAXB【发布时间】:2021-10-1817:02:38【问题描述】:我正在尝试将XML文档解组到我的模型中。问题是我有一个XML元素&lt;additional_detail&gt;在XML... 查看详情

如何在 Spring Integration DSL 中为通道设置多个消息处理程序?

】如何在SpringIntegrationDSL中为通道设置多个消息处理程序?【英文标题】:HowtosetseveralmessagehandlersforchannelinspringintegrationDSL?【发布时间】:2019-12-2720:26:31【问题描述】:我编写了我的第一个spring集成应用程序,它从springRSS读取数... 查看详情

使用 DTD 文件导致的 JAXB 解组 XML 时出错

】使用DTD文件导致的JAXB解组XML时出错【英文标题】:ErrorwhileunmarshalanXMLwithJAXBcausedbyDTDfile【发布时间】:2015-09-2610:04:50【问题描述】:我尝试使用JAXB(javax.xml.bind.JAXB)解组文件XML文件(test.xml),但它给了我这个错误:[org.xml.sax.SAXPar... 查看详情

如何使用 Spring DSL 在骆驼中记录标头值

】如何使用SpringDSL在骆驼中记录标头值【英文标题】:HowcanIlogaheadervalueincamelusingspringDSL【发布时间】:2013-09-2312:39:34【问题描述】:这似乎应该很简单,请原谅双关语。我正在尝试在springDSL路由中记录骆驼的标头。我已经看到... 查看详情

如何在 Spring Boot 和 Spring WebFlux 中使用“功能 bean 定义 Kotlin DSL”?

】如何在SpringBoot和SpringWebFlux中使用“功能bean定义KotlinDSL”?【英文标题】:Howtouse"FunctionalbeandefinitionKotlinDSL"withSpringBootandSpringWebFlux?【发布时间】:2018-02-0617:20:56【问题描述】:https://github.com/spring-projects/spring-fram 查看详情

JAXB:如何在解组 XML 文档期间忽略命名空间?

】JAXB:如何在解组XML文档期间忽略命名空间?【英文标题】:JAXB:HowtoignorenamespaceduringunmarshallingXMLdocument?【发布时间】:2010-09-2114:34:28【问题描述】:我的架构指定了一个命名空间,但文档没有。在JAXB解组(XML->对象)期间忽... 查看详情