使用jaxb2-annotate-plugin和XJC工具

时间:2015-11-16 06:56:50

标签: java xml xsd jaxb jaxb2-annotate-plugin

我正在尝试在运行时将一堆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 - 基础 - 注释-1.0.2.jar;工具0.4.1.5.jar;在S-测井1.1.1.jar COMM; JAXB2-基本运行时-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进程是唯一的方法,请告诉我,

  • 要包含在classpath中的依赖jar是什么?
  • 如何激活插件和-Xannotate开关?

如果使用此插件可以通过其他方式完成pojo生成,请同样建议。

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

1 个答案:

答案 0 :(得分:2)

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

首先,iff 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打包的XJC的原因。

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

相关: