XSD в Java, укажите для использования Java HashMap

Я пытаюсь создать некоторый класс Java из схемы XSD. Я точно знаю, что хочу сгенерировать на Java, и пытаюсь написать соответствующую XSD-схему.

Мне нужно представить java.util.HashMap (HashMap). Я не могу найти, как указать в схеме XSD (или файле привязки xjb), что мне нужен HasMap в Java. Он всегда генерирует список.

вот код, который я хочу сгенерировать

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "ErrorMessage", propOrder = { "name", "details"})
    public class ErrorMessage {
        @XmlElement(required = true)
        protected String name;
        @XmlElement(required = false)
        protected java.util.Map<String, String> details = new HashMap<String, String>();

Я пробовал это:

    <xsd:complexType name="ErrorMessage">
    <xsd:sequence>
        <xsd:element name="name" type="xsd:string" />
        <xsd:element name="details" type="map" />
    </xsd:sequence>
</xsd:complexType>


<xsd:complexType name="map">
    <xsd:sequence>
        <xsd:element name="mapEntry" type="mapEntry" minOccurs="0" maxOccurs="unbounded" />
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="mapEntry">
    <xsd:sequence>
        <xsd:element name="key" type="xsd:string" />
        <xsd:element name="value" type="xsd:string" />
    </xsd:sequence>
</xsd:complexType>

Но он по-прежнему продолжает генерировать java.util.List of mapEntry:

В моем классе «Ошибка»: protected Map details = new Map();

Вместо

protected java.util.Map<String, String> details = new HashMap<String, String>();

И сгенерированный класс "карты":

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "map", propOrder = {"mapEntry"})
public class Map {
     protected List<MapEntry> mapEntry;

Мне действительно нужно использовать карту для моего приложения. Любая идея о том, как я могу сделать?

Примечание. Я также пытался использовать Oracle owi:hasmp, но получил ошибку пространства имен.

xmlns:owi="http://www.oracle.com/webservices/internal" (also tried with xmlns:owi="http://www.oracle.com/webservices/internal/literal")

включено в мое объявление схемы

и мой элемент "детали", объявленный ниже

<xsd:element name="details" type="owi:hashmap" />

Ошибка:

src-resolve.4.2: Компонент разрешения ошибок 'owi: hasmap'. Было обнаружено, что 'owi:hasmap' находится в пространстве имен
'http://www.oracle.com/webservices/internal», но на компоненты из этого пространства имен нельзя ссылаться из документа схемы «file://myFile.xsd. Если это неправильное пространство имен, возможно, необходимо изменить префикс «owi: hasmap». Если это правильное пространство имен, то соответствующий тег «импорт» должен быть добавлен в «file://myFile.xsd».

И он не может связать «owi: hasmap» ни с одним компонентом определения типа.

Любая идея ?


person hiveship    schedule 25.02.2015    source источник
comment
Проблема не в типе хэш-карты, а в ссылке на xsd, описывающую его. Это помогает? stackoverflow.com/questions/12105840 /   -  person Alkis Kalogeris    schedule 25.02.2015
comment
Я также пытался импортировать пространство имен Oracle с помощью xsd:import, но все равно тот же результат (не могу связать owi:hashmap (или просто hashmap с определением любого типа).   -  person hiveship    schedule 25.02.2015


Ответы (1)


Да, карты легко обрабатываются jaxb, но только одним способом.

Решение описано здесь:

http://todayguesswhat.blogspot.co.uk/2012/09/jaxb-xsd-to-java-maphashmap-example.html

Но это очень хлопотно, если у вас уже есть класс, который правильно отображается. Почему вы хотите восстановить его из XSD?

person Zielu    schedule 25.02.2015