我想部分解组大XML.
XML具有以下结构:
<Records>
<Contract>
...
</Contract>
<Contract>
...
</Contract>
...
<Contract>
...
</Contract>
<Contract>
...
</Contract>
</Records>
Run Code Online (Sandbox Code Playgroud)
使用XJC生成结果类:
- Records
|- Contract
Run Code Online (Sandbox Code Playgroud)
如果我按照这些(来自jaxb-ri的样本),我得到错误:
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"http://somedomain.com", local:"Contract"). Expected elements are <{http://somedomain.com}Records>
Run Code Online (Sandbox Code Playgroud)
如果我使用:
<jaxb:globalBindings localScoping="toplevel"/>
Run Code Online (Sandbox Code Playgroud)
我收到错误:
org.xml.sax.SAXParseException: A class/interface with the same name "com.my.package.Text" is already in use. Use a class customization to resolve this conflict.
Run Code Online (Sandbox Code Playgroud)
但我需要改变很多课程.这不是解决方案.
我正在尝试解散一些收到的json(来自Jira restful web service).
问题是:"问题"具有"摘要"属性和字段列表.
摘要不作为接收的json中的属性存在,而是作为"fields"属性的值.我坚持要对这个结构进行解组:
@XmlRootElement
class Issue {
String summary;
List<Field> fields;
// getters/setters and lots of other fields
}
Run Code Online (Sandbox Code Playgroud)
收到JSON:
{
"expand":"html",
"self":"https://example.com/jira/rest/api/latest/issue/XYZ-1234",
"key":"XYZ-1234",
"fields":
{
"summary":
{
"name":"summary",
"type":"java.lang.String",
"value":"test 1234"
},
"customfield_10080":
{
"name":"Testeur",
"type":"com.atlassian.jira.plugin.system.customfieldtypes:userpicker"
},
"status":
{
"name":"status",
"type":"com.atlassian.jira.issue.status.Status",
"value":
{
"self":"https://example.com/jira/rest/api/latest/status/5",
"name":"Resolved"
}
},
...
},
"transitions":"https://example.com/jira/rest/api/latest/issue/XYZ-1234/transitions"
}
Run Code Online (Sandbox Code Playgroud)
我不想使用Jira自己的客户端(我的应用程序中不需要太多依赖项).
编辑:我问我的问题另一种方法,试图说清楚:如何使用jax-rs将bean结构映射到不同的模式