我正在尝试在运行时将一堆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 从那里开始给出以下错误,
不支持的绑定命名空间"http://annox.dev.java.net"。也许你 意思是"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进程是唯一的方法,请告诉我,
- 类路径中要包含哪些依赖 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打包的XJC。
接下来,您说您在运行时中生成代码。我不太明白这应该如何工作,之后您需要编译类等。但是好吧,我假设你知道你在做什么。无论如何,在这种情况下,您不应该通过命令行执行 XJC。您有一个通过 com.sun.tools.xjc.api.XJC
的编程 API。检查此问题和答案:
- 在Java中生成JAXB类时添加到字符串,哈希代码,等于
- 如何在运行时以编程方式添加 xjc 插件?
相关:
- 如何在命令行中使用 jaxb2-annotate-plugin 和 XJC