Xsd to java с использованием Jaxb: map <xsd: element> с XML: lang to Map <строка, строка> с использованием пользовательсJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Xsd to java с использованием Jaxb: map <xsd: element> с XML: lang to Map <строка, строка> с использованием пользовательс

Сообщение Anonymous »

Я работаю с большой схемой XSD, содержащей множество записей xsd: element , которые имеют атрибут xml: lang . Я хотел бы использовать JAXB с помощью пользовательской привязки для генерации карты в сгенерированных классах Java вместо отдельных классов для каждого из этих элементов.

Код: Выделить всё


Example description

























< /code>
По умолчанию Jaxb генерирует отдельный статический класс для каждого такого элемента: < /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;
}
}

}
Что я хочу вместо этого:
Для каждого такого XML: lang -основанный элемент, я хочу, чтобы Jaxb сгенерировал карту -где ключ-это языковой код, а значение-это содержимое строки. это: < /p>

Код: Выделить всё

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>
Я попытался применить этот адаптер через пользовательский файл привязки JAXB (custom-bindings.xjb
), но я не был успешным в том, чтобы заставить его подать заявку. Вот образец моего текущего файла .xjb (используется для сопоставления дат): < /p> Я также попытался расширить это с помощью или @xmljavatypeadapter , но не смог найти способ общего составления картирования xml: lang my setup wia indings. Поколение: < /p>

Код: Выделить всё



org.jvnet.jaxb
jaxb-maven-plugin
4.0.8



generate




${basedir}
${basedir}/src/main/resources/schema
custom-binding.xjb




  • Как я могу настроить jaxb (через привязки или иные или другую альтернативу), чтобы любой элемент xsd с XML: lang автоматически отображается на карту в сгенерированных классах Java, вместо генерирования Static Class и Lang? /> В идеале я ищу общий, многократный подход, который работает по всей схеме или файле xsd, который имеет различные виды элементов, а не статическое или жесткое картирование для одного или двух элементов. < /p>
    < /li>
    Если это невозможно с Jaxb, только есть какие-либо инструменты или альтернативные стратегии. плагины, настройка модели) для достижения такого рода преобразования?


Подробнее здесь: https://stackoverflow.com/questions/796 ... g-string-u
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»