关键词:
【中文标题】如何使用 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 -> 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元素<additional_detail>在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->对象)期间忽... 查看详情