使用 jaxb2-annotate-plugin 和 XJC 工具的自定义注释

Custom annotation with jaxb2-annotate-plugin and XJC tool

我试图在运行时将一堆 XSD 文件转换为 Java 源 POJO。这些 XML 模式将根据一些特定于协议的模型定义生成。

我已经使用 JAXB 的 XJC 将模式编译为 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 之后开始出现以下错误,

Unsupported binding namespace "http://annox.dev.java.net". Perhaps you meant "http://java.sun.com/xml/ns/jaxb/xjc"?

根据各种来源提供的建议,在 XJC 的类路径中添加了如下所需的 JARS,但似乎对我来说没有任何锻炼。

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

我找不到使用带有 jaxb2-annotate-plugin 的 XJC 生成 java 源的合适示例。我不能在我的 maven/ant 中添加它,因为我提到我必须在运行时生成 xsd 和 pojo。

如果使用 XJC 工具作为 java 过程是唯一的方法,请告诉我,

如果用这个插件可以通过其他方式生成pojo,请提出同样的建议。

我是 jaxb 的新手。任何建议都会很有帮助。提前致谢!

免责声明: 我是 jaxb2-annotate-plugin.

的作者

首先,如果 xjc 你的意思是 JDK 分发的二进制文件 xjc(比如 Windows 下的 xjc.exe),XJC 插件(包括 jaxb2-annotate-plugin) 不适用于来自 JDK.

xjc 二进制文件

原因是在为 JDK 打包 XJC 时,XJC 包重命名为 com.sun.tools.xjccom.sun.tools.internal.xjc。第三方 XJC 插件扩展 com.sun.tools.xjc.Plugin,而不是 com.sun.tools.internal.xjc.Plugin,这就是为什么它们不能与 JDK-packaged XJC 一起工作的原因。

接下来,你说你在运行时生成代码。我不太明白这是如何工作的,你需要在之后编译 类 等等。但是好吧,我假设你知道你在做什么。无论如何,在这种情况下你不应该通过命令行执行 XJC。您有一个程序化的 API 通过 com.sun.tools.xjc.api.XJC。检查这个问题和答案:

相关: