Code: Select all
Example description
< /code>
standardmäßig generiert JAXB für jedes solche Element eine separate statische Klasse: < /p>
package generated;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlSchemaType;
import jakarta.xml.bind.annotation.XmlType;
import jakarta.xml.bind.annotation.XmlValue;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "TextileMaterialDetails", propOrder = {
"textileMaterialDescription",
"textileMaterialPercentage",
"textileMaterialThreadCount",
"textileMaterialWeight"
})
public class TextileMaterialDetails {
@XmlElement(required = true)
protected TextileMaterialDetails.TextileMaterialDescription textileMaterialDescription;
protected float textileMaterialPercentage;
@XmlElement(required = true)
protected TextileMaterialDetails.TextileMaterialThreadCount textileMaterialThreadCount;
@XmlElement(required = true)
protected QuantitativeValue textileMaterialWeight;
@XmlAttribute(name = "id")
@XmlSchemaType(name = "anyURI")
protected String id;
public TextileMaterialDetails.TextileMaterialDescription getTextileMaterialDescription() {
return textileMaterialDescription;
}
public void setTextileMaterialDescription(TextileMaterialDetails.TextileMaterialDescription value) {
this.textileMaterialDescription = value;
}
public float getTextileMaterialPercentage() {
return textileMaterialPercentage;
}
public void setTextileMaterialPercentage(float value) {
this.textileMaterialPercentage = value;
}
public TextileMaterialDetails.TextileMaterialThreadCount getTextileMaterialThreadCount() {
return textileMaterialThreadCount;
}
public void setTextileMaterialThreadCount(TextileMaterialDetails.TextileMaterialThreadCount value) {
this.textileMaterialThreadCount = value;
}
public QuantitativeValue getTextileMaterialWeight() {
return textileMaterialWeight;
}
public void setTextileMaterialWeight(QuantitativeValue value) {
this.textileMaterialWeight = value;
}
public String getId() {
return id;
}
public void setId(String value) {
this.id = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"value"
})
public static class TextileMaterialDescription {
@XmlValue
protected String value;
@XmlAttribute(name = "lang", namespace = "http://www.w3.org/XML/1998/namespace", required = true)
protected String lang;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getLang() {
return lang;
}
public void setLang(String value) {
this.lang = value;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"value"
})
public static class TextileMaterialThreadCount {
@XmlValue
protected String value;
@XmlAttribute(name = "lang", namespace = "http://www.w3.org/XML/1998/namespace", required = true)
protected String lang;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getLang() {
return lang;
}
public void setLang(String value) {
this.lang = value;
}
}
}
Für jedes solche XML: Lang -basierte Element möchte ich, dass JAXB eine Karte -wobei der Schlüssel der Sprachcode ist und der Wert der Wert ist. Dies: < /p>
Code: Select all
public class XmlLangMapAdapter extends XmlAdapter {
@Override
public Map unmarshal(Object v) throws Exception {
if (v == null) return Collections.emptyMap();
Method getValue = v.getClass().getMethod("getValue");
Method getLang = v.getClass().getMethod("getLang");
String value = (String) getValue.invoke(v);
String lang = (String) getLang.invoke(v);
Map map = new HashMap();
map.put(lang, value);
return map;
}
@Override
public Object marshal(Map map) throws Exception {
throw new UnsupportedOperationException("Marshalling is not supported.");
}
}
< /code>
Ich habe versucht, diesen Adapter über eine benutzerdefinierte JAXB -Bindungsdatei anzuwenden (custom-bindings.xjb
Code: Select all
Code: Select all
org.jvnet.jaxb
jaxb-maven-plugin
4.0.8
generate
${basedir}
${basedir}/src/main/resources/schema
custom-binding.xjb