Я пытаюсь сгенерировать некоторый Java-класс из схемы XSD. Я точно знаю, что хочу создать на Java, и я пытаюсь написать соответствующую схему XSD.XSD to Java, указать использование Java HashMap
Мне нужно представить 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 из 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», но компоненты этого имен не Referenceable из файла схемы документа »: //myFile.xsd. Если это неправильное пространство имен, возможно, необходимо изменить префикс «owi: hasmap». Если это правильное пространство имен, то соответствующий «импорт» тег должен быть добавлен в файл »: //myFile.xsd
И это не может ассоциировать„Owi: hasmap“к любому компоненту определения типа.
Любая идея?
Проблема не в хэшмап-типе, скорее это ссылка на xsd, описывающая ее. Помогает ли это? http://stackoverflow.com/questions/12105840/xsd-syntax-for-xml-attributes-with-namespace – alkis
Я также попытался импортировать пространство имен Oracle с помощью xsd: import, но все тот же результат (не может связывать owi : hashmap (или просто hashmap для определения любого типа). – hiveship