У меня есть существующая схема XML, которая содержит тип, который я хотел бы сопоставить с какой-либо Java-картой, используя JAXB. Мой процесс сборки принимает схему и создает компоненты. Я хотел бы настроить этот процесс, указав один из complexTypes на моей карте схемы на java.util.Map. Я где-то читал, что JAXB «не может работать с интерфейсами». Я не уверен, что это применимо в этом случае, но если так, мне будет хорошо с ним сопоставление с HashMap. Кроме того, это необязательно должен быть complexType, который сопоставляется с Map, это может быть элемент, если это то, что требуется.Можно ли использовать JAXB для сопоставления схемы с java.util.Map?
Я управляю своим поколением JAXB, используя файл .xjb, поэтому я ищу несколько <jaxb:bindings>
, чтобы положить туда. Я попытался следующие, но это не работает:
<jaxb:bindings schemaLocation="myschema.xsd" node="/xs:schema">
<jaxb:globalBindings>
<jaxb:serializable uid="1"/>
</jaxb:globalBindings>
<jaxb:schemaBindings>
<jaxb:package name="com.myschema.client.types"/>
</jaxb:schemaBindings>
<jaxb:bindings node="//xs:complexType[@name='MapType']">
<jaxb:javaType name="java.util.HashMap"
parseMethod="com.myschema.common.MapConverter.parseObjectToMap"
printMethod="com.myschema.common.MapConverter.printMapToObject" />
</jaxb:bindings>
</jaxb:bindings>
Edit: Я добавил более подробную информацию о выше связывания, что я уже пробовал. Он генерирует следующую ошибку во время компиляции схемы:
[jaxb] [ERROR] compiler was unable to honor this javaType customization. It is attached to a wrong place, or its inconsistent with other bindings.
<jaxb:javaType>
не будет работать, потому что он может быть использован только для mapping between XML Schema primitives and Java types. Поскольку я хочу сопоставить сложный тип и тип Java, я не могу использовать это.
Ваш подход «.xjb» является правильным и должен работать. XJC просто игнорирует это, или это порождает неправильную вещь? – skaffman
Используя вышеприведенный подход .xjb, я получаю следующую ошибку в компиляции jaxb: [jaxb] [ERROR] компилятор не смог выполнить эту настройку javaType. Он прикреплен к неправильному месту или несовместим с другими связями. – Zach