使用 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;commons-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
我找不到使用带有 jaxb2-annotate-plugin 的 XJC 生成 java 源的合适示例。我不能在我的 maven/ant 中添加它,因为我提到我必须在运行时生成 xsd 和 pojo。
如果使用 XJC 工具作为 java 过程是唯一的方法,请告诉我,
- 要包含在类路径中的依赖 jar 是什么?
- 如何激活插件和-Xannotate开关?
如果用这个插件可以通过其他方式生成pojo,请提出同样的建议。
我是 jaxb 的新手。任何建议都会很有帮助。提前致谢!
免责声明: 我是 jaxb2-annotate-plugin.
的作者
首先,如果 xjc
你的意思是 JDK 分发的二进制文件 xjc
(比如 Windows 下的 xjc.exe
),XJC 插件(包括 jaxb2-annotate-plugin) 不适用于来自 JDK.
的 xjc
二进制文件
原因是在为 JDK 打包 XJC 时,XJC 包重命名为
com.sun.tools.xjc
到 com.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
。检查这个问题和答案:
相关:
我试图在运行时将一堆 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;commons-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
我找不到使用带有 jaxb2-annotate-plugin 的 XJC 生成 java 源的合适示例。我不能在我的 maven/ant 中添加它,因为我提到我必须在运行时生成 xsd 和 pojo。
如果使用 XJC 工具作为 java 过程是唯一的方法,请告诉我,
- 要包含在类路径中的依赖 jar 是什么?
- 如何激活插件和-Xannotate开关?
如果用这个插件可以通过其他方式生成pojo,请提出同样的建议。
我是 jaxb 的新手。任何建议都会很有帮助。提前致谢!
免责声明: 我是 jaxb2-annotate-plugin.
的作者首先,如果 xjc
你的意思是 JDK 分发的二进制文件 xjc
(比如 Windows 下的 xjc.exe
),XJC 插件(包括 jaxb2-annotate-plugin) 不适用于来自 JDK.
xjc
二进制文件
原因是在为 JDK 打包 XJC 时,XJC 包重命名为
com.sun.tools.xjc
到 com.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
。检查这个问题和答案:
相关: