我会慢慢为此疯狂。我正在尝试解组这样的XML文档:
<GetDeadlineOffset>
<deadlineCode>DC1</deadlineCode>
<parameters>
<parameter name="P1">Param 1</parameter>
<parameter name="P2">Param 2</parameter>
</parameters>
</GetDeadlineOffset>
我有一对简单的POJO,GetDeadlineOffsetRequest和Parameter,如下所示:
public class GetDeadlineOffsetRequest {
private String deadlineCode = null;
private List<Parameter> parmList = new ArrayList<Parameter>();
public GetDeadlineOffsetRequest() {
// Do nothing
}
public String getDeadlineCode(){
return this.deadlineCode;
}
public void setDeadlineCode(String deadlineCode){
this.deadlineCode = deadlineCode;
}
public List<Parameter> getParameters() {
return parmList;
}
public void setParameters(List<Parameter> parmList) {
this.parmList = parmList;
}
}
和
public class Parameter {
private String name = null;
private String value = null;
public Parameter() {
// Do Nothing
}
public String getName() {
return name;
}
public String getValue() {
return value;
}
public void setName(String name) {
this.name = name;
}
public void setValue(String value) {
this.value = value;
}
}
我正在使用映射文件,但似乎无法将这些标记解组到我的参数列表中。
这是我最近的映射尝试:
<class name="mypkg.GetDeadlineOffsetRequest">
<map-to xml="GetDeadlineOffset"/>
<field name="DeadlineCode" type="java.lang.String">
<bind-xml name="deadlineCode" node="element" />
</field>
<field name="Parameters" type="mypkg.Parameter" collection="collection">
<bind-xml name="parameters" node="element" />
</field>
</class>
<class name="mypkg.Parameter">
<map-to ns-uri="http://services.blah.com/AMM/Deadline/v1"/>
<field name="Value" type="java.lang.String">
<bind-xml name="parameter" node="element" />
</field>
<field name="Name" type="java.lang.String">
<bind-xml name="name" node="attribute" location="parameter" />
</field>
</class>
这个问题似乎围绕着&lt; parameters&gt;这一事实。是容器元素和&lt;参数&gt;是可重复的元素。上面的映射告诉Castor&lt; parameters&gt;是可重复的。
我已经尝试了几天的各种映射组合,现在我觉得自己已经进入了一个角落!
谁能看到我做错了什么?
我正在使用Castor XML 1.3.2。
答案 0 :(得分:4)
我通过以下映射取得了一些成功:
<class name="myPkg.GetDeadlineOffsetRequest">
<map-to xml="GetDeadlineOffset"/>
<field name="DeadlineCode">
<bind-xml name="deadlineCode" />
</field>
<field name="parameters" type="myPkg.Parameter" collection="collection">
<bind-xml name="parameter" location="parameters">
<class name="myPkg.Parameter">
<field name="Name">
<bind-xml name="name" node="attribute" />
</field>
<field name="Value">
<bind-xml node="text"/>
</field>
</class>
</bind-xml>
</field>
</class>
诀窍是在一些 bind-xml 元素上使用 location =“parameters”和 node =“text”。我已成功使用此映射进行编组和解组。
答案 1 :(得分:1)
您是否可以控制您尝试阅读的XML格式,还是必须使用此格式?
<GetDeadlineOffset>
<deadlineCode>DC1</deadlineCode>
<parameters>
<parameter name="P1">Param 1</parameter>
<parameter name="P2">Param 2</parameter>
</parameters>
</GetDeadlineOffset>
我能够写出这种格式但Castor不会在抛出异常时将其读回来。
我能得到的最接近成功编组和解组的地方是:
<GetDeadlineOffset>
<deadlineCode>DeadlineCode</deadlineCode>
<parameters>
<parameter name="Name1" value="Value1"/>
<parameter name="Name2" value="Value2"/>
</parameters>
</GetDeadlineOffset>