Пользовательская аннотация с помощью 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.jar;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
, Проверьте этот вопрос и ответы:
- Добавьте toString, hashCode, equals при создании классов JAXB в Java
- Как добавить плагин xjc программно во время выполнения?
Связанные с: