Пользовательская аннотация с помощью jaxb2-annotate-plugin и инструмента XJC

Я пытаюсь преобразовать кучу XSD-файлов в исходные POJO-файлы Java во время выполнения. Эти XML-схемы будут сгенерированы на основе некоторых определений модели протокола.

Я использовал XJC JAXB для компиляции схемы в pojo. Возникла проблема, когда я использовал Jaxb2-annotate-plugin для создания пользовательских аннотаций.

Для тестирования я добавил следующее в мою схему,

<xs:schema xmlns:aa="http://acme.example.com/system" 
           xmlns:another="http://acme.example.com/another" 
           xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
           xmlns:ncn="urn:ietf:params:xml:ns:netconf:notification:1.0" 
           jaxb:extensionBindingPrefixes="annox" 
           xmlns:annox="http://annox.dev.java.net"  
           targetNamespace="http://acme.example.com/system" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema">

После этого XJC начал выдавать следующую ошибку:

Неподдерживаемое связывание пространства имен " http://annox.dev.java.net/ ". Возможно, вы имели в виду " http://java.sun.com/xml/ns/jaxb/xjc "?

Согласно предложениям, представленным в различных источниках, добавленные JARS в classpath XJC были добавлены следующим образом, но мне кажется, что ничто не помогает.

xjc -p com.test -classpath = "jaxb2-basics-annotate-1.0.2.jar; tools-0.4.1.5.jar; comm‌ on‌ s-logging-1.1.1.jar;jaxb2-basics-runtime-0.9.5;annox-1.0.1.ja‌r;javaparser-1.0.11.jar;jaxb2-basics-tools-0.9.5.jar" -extension myschema.xsd

Я не смог найти подходящий пример для генерации Java-источников с использованием XJC с jaxb2-annotate-plugin. Я не могу добавить это в мой maven/ant, поскольку я упомянул, что мне нужно генерировать xsd и pojo во время выполнения.

Если использование инструмента XJC в качестве процесса Java является единственным способом, пожалуйста, дайте мне знать,

  • Какие зависимые банки должны быть включены в classpath?
  • Как активировать плагин и переключатель -Xannotate?

Если с помощью этого плагина генерация pojo может быть выполнена другими способами, предложите то же самое.

Я новичок в Jaxb. Любые предложения будут действительно полезны. Заранее спасибо!

1 ответ

Решение

Отказ от ответственности: я являюсь автором jaxb2-annotate-plugin.

Во-первых, если xjc вы имеете в виду двоичный xjc распространяется с JDK (как xjc.exe под Windows) плагины XJC (включая jaxb2-annotate-plugin) не работают с xjc бинарный от JDK.

Причина в том, что при упаковке XJC для JDK пакеты XJC переименовываются из com.sun.tools.xjc в com.sun.tools.internal.xjc, Расширения сторонних плагинов XJC com.sun.tools.xjc.Pluginне com.sun.tools.internal.xjc.PluginВот почему они не работают с XJC в JDK.

Далее вы говорите, что генерируете код во время выполнения. Я не совсем понимаю, как это должно работать, потом вам нужно будет скомпилировать классы и т. Д. Но хорошо, я предполагаю, что вы знаете, что делаете. В любом случае, вам не следует выполнять XJC через командную строку в этом случае. У вас есть программный API через com.sun.tools.xjc.api.XJC, Проверьте этот вопрос и ответы:

Связанные с:

Другие вопросы по тегам