У меня есть существующая схема XML, которая содержит тип, который я хотел бы сопоставить с какой-либо Java-картой, используя JAXB. Мой процесс сборки принимает схему и создает beans. Я хотел бы настроить этот процесс, указав один из complexTypes на моей карте схемы на java.util.Map. Я где-то читал, что JAXB "не может работать с интерфейсами". Я не уверен, что это применимо в этом случае, но если так, мне будет хорошо с ним сопоставление с HashMap. Кроме того, это необязательно должен быть complexType, который сопоставляется с 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>
Изменить: Я добавил более подробную информацию о вышеупомянутой привязке, которую я уже пробовал. Он генерирует следующую ошибку при компиляции схемы:
[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>
не будет работать, потому что он может использоваться только для сопоставления между примитивами XML-схемы и типами Java. Поскольку я хочу сопоставить сложный тип и тип Java, я не могу использовать это.