使用 jaxb2-annotate-plugin 和 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 从那里开始给出以下错误,

不支持的绑定命名空间"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

最新更新