我正在尝试在运行时将一堆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 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的新手。任何建议都会非常有帮助。提前致谢!

最佳答案

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

首先,如果使用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。检查以下问题和答案:


Add toString, hashCode, equals while generating JAXB classes in Java
How do I add an xjc plugin programmatically at runtime?


有关:


How to use jaxb2-annotate-plugin with XJC in command line

关于java - 使用jaxb2-annotate-plugin和XJC工具进行自定义注释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33729913/

10-10 21:56