1

我正在尝试在运行时将一堆 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" - 扩展 myschema.xsd

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

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

  • 类路径中要包含哪些依赖 jar?
  • 如何激活插件和 -Xannotate 开关?

如果可以使用此插件以其他方式完成 pojo 生成,请提出相同的建议。

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

4

1 回答 1

2

免责声明:我是jaxb2-annotate-plugin的作者。

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

原因是在为 JDK 打包 XJC 时,XJC 包从 重命名 com.sun.tools.xjccom.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. 检查这个问题和答案:

有关的:

于 2015-11-16T18:58:20.507 回答