Как использовать JAXB для создания карты в классах JavaJAVA

Программисты JAVA общаются здесь
Anonymous
Как использовать JAXB для создания карты в классах Java

Сообщение Anonymous »

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

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









< /code>
По умолчанию Jaxb генерирует отдельный статический класс для каждого такого элемента: < /p>
@XmlElement(required = true)
protected TextileMaterialDetails.TextileMaterialThreadCount textileMaterialThreadCount;

@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 lang) { this.lang = lang; }
}
Что я хочу вместо этого:
Для каждого такого 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 ... va-classes

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