Я создал собственный маршаллер JiBX и убедился, что он работает.Это работает следующим образом:
<binding xmlns:tns="http://foobar.com/foo" direction="output">
<namespace uri="http://foobar.com/foo" default="elements"/>
<mapping class="java.util.HashMap" marshaller="com.foobar.Marshaller1"/>
<mapping name="context" class="com.foobar.Context">
<structure field="configuration"/>
</mapping>
</binding>
Однако мне нужно создать несколько маршаллеров для разных HashMaps.Поэтому я попытался сослаться на это с помощью абстрактного отображения следующим образом:
<binding xmlns:tns="http://foobar.com/foo" direction="output">
<namespace uri="http://foobar.com/foo" default="elements"/>
<mapping abstract="true" type-name="configuration" class="java.util.HashMap" marshaller="com.foobar.Marshaller1"/>
<mapping abstract="true" type-name="overrides" class="java.util.HashMap" marshaller="com.foobar.Marshaller2"/>
<mapping name="context" class="com.foobar.Context">
<structure map-as="configuration" field="configuration"/>
<structure map-as="overrides" field="overrides"/>
</mapping>
</binding>
Однако при этом, когда я пытаюсь построить привязку, я получаю следующее:
Error during code generation for file "E:\project\src\main\jibx\foo.jibx" - this may be due to an error in your binding or classpath, or to an error in the JiBX code
Мое предположениев том, что я либо упускаю что-то, что мне нужно реализовать, чтобы включить свой собственный маршаллер для абстрактного отображения, либо пользовательские маршаллеры не поддерживают абстрактное отображение.
Я нашел интерфейс IAbstractMarshaller в API JiBX (http://jibx.sourceforge.net/api/org/jibx/runtime/IAbstractMarshaller.html), однако документация мне не ясна, если это то, что мне нужно реализовать, а также то, как это работает, если так. Мне не удалось найти реализацию этого интерфейса для работы в качестве примера.
У меня вопрос: как вы делаете абстрактное отображение с помощью пользовательских маршаллеров (если это возможно)? Если это делается через интерфейс IAbstractMarshaller, как это работает и / или как я должен это реализовать?