java - JAX-WS 处理嵌套的 SOAP 元素
问题描述
你好堆栈社区,
我最近发现了将 SOAP 消息映射到 Java 对象的问题。我想自动化 SOAP 测试,其中消息体的问题部分如下所示:
<jobData>
<entryList>
<name>Key#1</name>
<entryList>
<value>Key#1ChildValue</value>
<name>Key#1ChildKey</name>
</entryList>
</entryList>
<entryList>
<name>Key#2</name>
<entryList>
<value>Key#2ChildValue</value>
<name>Key#2ChildKey</name>
</entryList>
</entryList>
.
. // POSSIBLE MORE <entryList> elements
.
</jobData>
我使用 wsimport 工具(JDK 8)来解析 WSDL。这是我得到的:
工作数据元素
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "DataDto", propOrder = {
"recordedEntries"
})
public class DataDto
extends DataRowDto
{
protected RecordedEntriesDto recordedEntries;
// getter and setter
}
RecordedEntriesDto
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RecordedEntriesDto", propOrder = {
"entries"
})
public class RecordedEntriesDto
extends AbstractVersionableDto
{
@XmlElement(nillable = true)
protected List<RecordedEntryDto> entries;
}
RecordetEntryDto
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RecordedEntryDto", propOrder = {
"key",
"value"
})
public class RecordedEntryDto
extends AbstractVersionableDto
{
protected String key;
protected Object value;
看起来,entryList 元素可能包含自身作为值。我不知道如何将一个嵌套在另一个中,因为无论我尝试什么,发送请求时总是会出现以下错误:
field not serializable: private java.lang.Object com.whateverpackage.RecordedEntryDto.value
现在......经过几天的搜索堆栈,谷歌,公司的人,我放弃了,我感觉就像站在巨大的砖墙旁边。我对 SOAP 请求结构没有影响,我只能处理处理它的 Java 代码。你知道如何处理它吗?
此致,
Java Auto Tester 新手
解决方案
如果我理解正确你想要多个条目?根据您的错误,我认为您正在尝试添加多个 RecordedEntryDto 但您需要为此使用 RecordedEntriesDto 类。
- 假设您有 2 个条目
RecordedEntryDto entry1 = new RecordedEntryDto();
RecordedEntryDto entry2 = new RecordedEntryDto();
- 现在你想把它们放在一个列表中
List<RecordedEntryDto> allEntriesList = new ArrayList<>();
allEntriesList.add(entry1);
allEntriesList.add(entry2);
- 现在您将列表放入 RecordedEntries Dto对象中
RecordedEntriesDto entriesDto = new RecordedEntriesDto();
entriesDto.setEntries(allEntriesList);
- 然后你可以完成 DataDto
DataDto dataDto = new DataDto();
dataDto.setRecordedEntries(entriesDto);
推荐阅读
- elasticsearch - 通配符查询在 Elastic Search 服务器上无法按预期工作
- go - 领导者经纪人在 kafka 中没有匹配的侦听器错误
- sql - SQL 从 dd/mm/yyyy SSMS 2012 派生财政年度 (20XX/YY)
- apache - yii2 和 ISPmanager Lite 中的动态子域
- javascript - 为什么 react-router 将先前的路由与新的路由结合起来?
- c# - 如何在 .NET Core 中使用 IUserIdProvider?
- function - Dart:函数的参数表示法
- angular - Angular 和 Firebase:如何设置 Cloud Firestore 安全规则?
- c# - 持有对实体框架对象的字符串属性的引用会阻止它被 GC 收集吗?
- c - 为什么增量操作 ++a++ 不起作用,至少在 C 中?