为什么在应该继承命名空间时,cxf 会在没有命名空间前缀的元素上抛出解组错误

问题描述

我正在创建一个 SOAP 客户端,它在 Java 11 Spring Boot 服务器中运行并向 Java 8 服务器发出请求。我在带有 com.github.bjornvester.wsdl2java Gradle 插件版本 1.1 的 Gradle 6.9 版本中使用 cxf-rt-frontend-jaxws:3.4.3 和 cxf-rt-transports:3.4.3。

我的客户可以毫无问题地调用简单的回声测试 SOAP 操作。该服务传递包含单个字符串的请求对象并获取包含该字符串的响应对象。所以我知道基本连接正常,另一端正在响应。

当我调用一个没有输入的操作并在响应中返回一个对象列表时,我的问题就出现了。我收到此错误

org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected element (uri:"",local:"ProposalInfo"). Expected elements are <{http://V2.pub.proposal.server.ws.cayuse.com/}ProposalInfo>

我被告知其他系统调用这些操作没有问题。

我已经逐步完成了 cxf 和 JAXB 代码,并注意到 IntelliJ 显示了与 BranchingReaderSource 关联的文本。不确定这是一个真正的错误还是调试器试图在这个类上调用 toString() 的副作用(它没有这样的方法)。

Method threw 'java.lang.NullPointerException' exception. Cannot evaluate com.ctc.wstx.io.BranchingReaderSource.toString()

我还注意到一个名为 ValidationEventLocatorImpl 的类在这一行得到一个 NullPointerException,因为“toURL”为空。我认为这是因为 toURL 来自响应中的空前缀。

this.url = toURL(loc.getSystemId());

我曾尝试使用包装样式“false”,但这并没有改变任何东西。

我还尝试使用 TransformInInterceptor 将没有前缀的元素映射到所需的前缀,但这不起作用。似乎在拦截器运行之前会抛出解组错误

这是用于此服务的 WSDL;我正在调用的操作是 getUnpairedProposals。我还将 response 的副本附加到此操作 - 未正确解组的操作。我对这个响应的解读是,在 ns2:getUnPairedProposalsResponse 标签上定义的命名空间应该应用于诸如 .

之类的子元素

附加信息:

我多次尝试使用 TransformInterceptor 来映射元素:

  1. 为“getUnPairedProposalsResponse -> {http://V2.pub.proposal.server.ws.cayuse.com/}getUnPairedProposalsResponse”添加一个地图条目。这没有任何作用。

  2. 在 Phase.PRE_STREAM 插入 TransformInterceptor。也没有效果

  3. 将映射从 #1 更改为相同但添加了前缀 {},如 {}getUnPairedProposalsResponse -> {http://V2.pub.proposal.server.ws.cayuse.com/}getUnPairedProposalsResponse .这让我在 convertToqnamesMap 方法中 TransformUtils 第 128 行的 cxf 中出现了空指针异常。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...