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

2024-05-30

我有一条骆驼“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 字符串(根据我所做的任何调试日志记录)。此外,这个确切的代码在大多数情况下都有效,只是偶尔会失败。它看起来是随机的。

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

正是这种随机性使得事情变得如此令人抓狂。我应该寻找什么来确保这一点never发生?


问题不在于 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 配置和测试用例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • java.lang.IllegalArgumentException:缺少某些字段(可选或强制)

    我正在尝试使用 Apache Camel Bindy 创建固定文件阅读器 但出现异常 请帮助我找到解决方案 没有页眉和页脚 效果很好 Update 文件很小 现在无法理解 并且添加了 public 文件内容 101 08 2009 30A9
  • Camel是否为每条路线创建一个线程

    最近我开始使用camel 我发现它有可能满足我的许多集成层需求 我创建了一个 java 客户端应用程序 不在任何容器中运行 其中定义了两条路由 路线 1 将文件从传入文件夹 1 移动到文件夹 2 路线2 将文件内容从folderx移动到mq
  • 如何使用 spring DSL 在camel 中记录标头值

    这看起来应该很简单 请原谅双关语 我正在尝试在 Spring DSL 路由中的 Camel 中记录标头 我已经看到了答案Java DSL https stackoverflow com questions 15111044 how to a
  • Spring-Core-WS 与 Spring 4.3.0 不兼容,是吗?

    我总是尝试在我的 Spring 项目中使用最新的 jars api 我们有一个 Spring 4 2 4 RELEASE 然后我升级到 4 3 0 一切都构建和编译得很好 但是 当我尝试运行单元测试时 我收到一条错误消息 我确实追踪到 Sp
  • SoapFaultMappingExceptionResolver 永远不会遇到常规 java 异常

    谁能告诉我为什么我无法使用解析器捕获常规 Java 异常 以便我可以在响应发回之前对其进行转换 它永远不会遇到断点 如果不可能 我该怎么办 SoapFaultMappingExceptionResolver public class Lis
  • Apache Camel 同时处理两个 csv 文件

    我正在尝试处理两个 csv文件并将其数据保存到数据库中 我使用的是 java dsl 而不是 spring 为了更好地解释这个场景 我正在读两本 csv文件并处理它们以将数据上传到 sql 数据库中 我为此执行的步骤是 在 servlet
  • 骆驼http端点动态形成url

    我正在尝试使用的伙计们 from direct a to someUrl processor new Processor Override public void process Exchange arg0 throws Exception
  • 如何让 Spring 连接我的 JmsComponent

    我正在编写一个使用 Akka Akka Camel 和 Spring 进行配置的应用程序 应用程序需要充当针对各种应用程序服务器的独立 JMS 客户端 为此 它需要使用 JNDI 设置 JMS 连接工厂 我正在用 jBoss 测试这个 我对
  • Apache Camel 根据请求使用文件内容丰富消息

    我正在实现 RESTful 服务 使用 CXFRS 组件 它应该返回某些请求的文件 每个文件都通过其 id 和扩展名来获取 即restfulservice com path file 1 pdf 每个文件一旦添加就不会改变 文件在获取后不应
  • Camel JAX-RS 和跨域请求

    我希望能够在我的本地 Camel 实例上执行 HTTP 请求 仅出于开发目的 我知道这是不好的做法 现在 我坚持 Origin http localhost 8000 is not allowed by Access Control All
  • MQ 标头 - 标识符上下文 - ApplIdentityData

    我们想要从 MQ 标头上的 ApplIdentityData 中提取信息 但在消费者方面 我们没有看到 ApplIdentityData 相应的 JMS 标头 我确实跟踪了日志 但没有找到与 ApplIdentityData 相关的任何信息
  • 在apachecamel中处理大型压缩文件

    我正在尝试获取一个文件 zip从 ftp 服务器压缩并尝试将其存储在 S3 中 gzip使用骆驼压缩 以下是我目前的路线 from sftp username host file path password
  • 用于检查 Apache Camel XML 中字符串的 JSONPath 表达式

    假设我有一个简单的 json 文件 如下所示 log host blah severity INFO system 1 我正在使用 Apache Camel 它是 Spring XML 来处理和路由 json 文件 我的路由代码看起来像这样
  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • Mina 在 Netbeans 上工作却在 fat-jar 中失败了?

    奇怪的问题 如果我们创建一个 fat jar 来执行该项目而不是从 Netbeans 中 它就会失败 有什么线索吗 这是一个简单的 apache camel 应用程序 它使用 Mina 启动一条路由来接收 HL7 然后使用一个直接应答 AC
  • 如何配置 Spring-WS 以使用 JAXB Marshaller?

    感谢您到目前为止对此的帮助 我正在更新问题 因为我没有显示我需要的所有内容 并显示了建议的更改 肥皂输出仍然不是我想要的 servlet xml
  • 如何使用 Apache Camel 路由从授权服务器获取访问令牌?

    我有一个授权服务器 带有注释的简单类 SpringBootApplication RestController Configuration EnableAuthorizationServer oauth2 security 在端口上运行80
  • 使 Camel 路线并行运行

    我有一个应用程序使用骆驼路线执行一些基本的 ETL 每个路由都配置为从一个表中获取一些数据进行一些转换 并将其安全地保存到不同模式的同一个表中 所以骆驼路线和表之间存在一对一的关系 假设我有这两条路线 from direct table 1
  • 使用带有 OnException 定义的adviceWith进行Camel路由测试

    我有一个非常简单的 Camel 路由定义 其中只包含一些 OnException 谓词来处理相应的异常和一些日志语句 from hazelcast seda someQueue id someQueueID onException Cust
  • 异步 Camel 组件 - 立即调用 doStop()

    我正在尝试创建一个骆驼组件 它使用来自外部服务的 API 我的路线如下 from myComponent entity from to to seda one from seda one aggregate constant true ne

随机推荐