gpt4 book ai didi

apache-camel - 使用spring-ws客户端的Camel路由偶尔会抛出javax.xml.transform.stax.StAXSource异常

转载 作者:行者123 更新时间:2023-12-04 03:58:31 26 4
gpt4 key购买 nike

我有一条 Camel “seda”路线,其中包含大致的代码:

JaxbDataFormat jaxb = new JaxbDataFormat(false);
jaxb.setContextPath("com.example.data.api");

from("seda:validate")
.marshal(jaxb)
.to("spring-ws:" + getDataServiceURL())
.unmarshal(jaxb)

我从 com.example.data.api 发送一个对象,JaxbDataFormat 格式化程序将它设置为 SOAP 请求,并将它传递给 wo spring-ws 以实际发送到我的服务。大多数时候,这就像一种魅力。

我说“最”是因为,spring-ws 时不时会抛出一个异常,如下所示:
org.springframework.ws.client.WebServiceTransformerException: Transformation error: Can't transform a Source of type javax.xml.transform.stax.StAXSource; nested exception is javax.xml.transform.TransformerException: Can't transform a Source of type javax.xml.transform.stax.StAXSource
at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:608)
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:537)
at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:492)
at org.springframework.ws.client.core.WebServiceTemplate.sendSourceAndReceive(WebServiceTemplate.java:479)
at org.springframework.ws.client.core.WebServiceTemplate.sendSourceAndReceive(WebServiceTemplate.java:470)
at org.apache.camel.component.spring.ws.SpringWebserviceProducer.process(SpringWebserviceProducer.java:81)
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)

其核心是此错误消息:“无法转换 javax.xml.transform.stax.StAXSource 类型的源”。

这些都没有道理。 Jaxb 编码将已经确保所讨论的对象是一个 XML 字符串(根据我所做的任何调试日志记录)。此外,这个确切的代码大部分时间都有效,只是偶尔会失败。它看起来是随机的。

例如,几分钟前我运行了一个测试,我向我的路由发送了一条消息并收到了这个错误。然后我重新启动了我的服务并重新发送了完全相同的消息......它就像一个魅力。相同的代码;相同的环境;相同的测试——两​​个不同的结果。

正是这种随机性使这如此令人抓狂。任何想法我应该寻找以确保这永远不会发生?

最佳答案

问题不在于 Camel,而在于 Spring-WS。修改 WS 模板配置中的 TransformerFactoryClass 会起作用

<bean id="baseCamelMarshallerWSTemplate" class="org.springframework.ws.client.core.WebServiceTemplate" scope="prototype">
<constructor-arg ref="messageFactory" />
<property name="messageSender">
<ref bean="httpSender"/>
</property>
<property name="checkConnectionForError" value="true"/>
**<property name="transformerFactoryClass" value="com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"/>**
</bean>

如果您仍然遇到问题,请分享 spring WS 配置和测试用例

关于apache-camel - 使用spring-ws客户端的Camel路由偶尔会抛出javax.xml.transform.stax.StAXSource异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14530533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com