Castor - Déborder un groupe de répétition simple
Question
Je vais lentement en colère à ce sujet. J'essaye de déclencher un document XML comme ceci:
<GetDeadlineOffset>
<deadlineCode>DC1</deadlineCode>
<parameters>
<parameter name="P1">Param 1</parameter>
<parameter name="P2">Param 2</parameter>
</parameters>
</GetDeadlineOffset>
J'ai une paire de Pojos simples, GetDeadlineOffSetRequest et Paramètre, qui ressemblent à ceci:
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;
}
}
et
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;
}
}
J'utilise un fichier de mappage, mais je n'arrive pas à obtenir ces balises non parmies dans ma liste de paramètres.
Ceci est ma dernière tentative de cartographie:
<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>
Le problème semble tourner autour du fait queu003Cparameters> est l'élément de conteneur etu003Cparameter> est l'élément reproductible. La cartographie ci-dessus dit Castor queu003Cparameters> est reproductible.
J'essaye toutes sortes de combinaisons de mappages depuis quelques jours maintenant et je pense que j'ai fait mon chemin dans un coin!
Quelqu'un peut-il voir ce que je fais de mal?
J'utilise Castor XML 1.3.2.
La solution
J'ai réussi à réussir avec la cartographie suivante:
<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>
L'astuce était à utiliser location = "Paramètres" et node = "texte" sur quelques-uns du bind-xml éléments. J'ai réussi à remplir et à ne pas avoir parus à l'aide de cette cartographie.
Autres conseils
Avez-vous un contrôle sur le format XML que vous essayez de lire ou doit-il être dans ce format?
<GetDeadlineOffset>
<deadlineCode>DC1</deadlineCode>
<parameters>
<parameter name="P1">Param 1</parameter>
<parameter name="P2">Param 2</parameter>
</parameters>
</GetDeadlineOffset>
J'ai pu obtenir ce format pour écrire mais Castor ne le lirait pas dans lance une exception.
Le plus proche que je puisse arriver là où il a réussi à rassembler et à unmarshal:
<GetDeadlineOffset>
<deadlineCode>DeadlineCode</deadlineCode>
<parameters>
<parameter name="Name1" value="Value1"/>
<parameter name="Name2" value="Value2"/>
</parameters>
</GetDeadlineOffset>