Java 从模式生成JAXB绑定类的Jackson属性

Java 从模式生成JAXB绑定类的Jackson属性,java,annotations,jaxb,Java,Annotations,Jaxb,在应用程序上工作时,我还希望将JAXB类用于JSON绑定 因此,对于某些类,我需要使用@JsonTypeInfo进行注释 所以我想我应该使用定制绑定 下面是我的XJB文件的外观: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xml> <jaxb:bindings version="1.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"

在应用程序上工作时,我还希望将JAXB类用于JSON绑定

因此,对于某些类,我需要使用@JsonTypeInfo进行注释

所以我想我应该使用定制绑定

下面是我的XJB文件的外观:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<jaxb:bindings version="1.0" 
              xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
              xmlns:xs="http://www.w3.org/2001/XMLSchema" 
              xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
              xmlns:annox="http://annox.dev.java.net"
              jaxb:extensionBindingPrefixes="xjc">

   <jaxb:bindings schemaLocation="../schema/im/vehicle.xsd">
      <jaxb:bindings node="xs:complexType[@name='Vehicle']">
        <annox:annotate target="class">
          <annox:annotate annox:class="com.fasterxml.jackson.annotation.JsonTypeInfo(use = com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME, include = com.fasterxml.jackson.annotation.JsonTypeInfo.As.PROPERTY, property = 'subVehicleType')"/>
        </annox:annotate>
      </jaxb:bindings>
   </jaxb:bindings>

</jaxb:bindings>
我做错什么了吗

更新

我按照回答中提到的那样做了:它在我的独立测试项目中起作用,但当我在我的主项目中也这样做时,我会遇到以下API不兼容错误

[错误]未能执行goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.2:在项目域上生成默认值:goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.2:生成失败:执行org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.2:生成:java.lang.NoSuchMethodError:japa/parser/JavaParser.parseLjava/io/Reader;ZLjapa/parser/ast/compilementunit;通过java.net从文件:/C:/JavaDev/.m2/repository/com/google/code/javaparser/javaparser/1.0.8/javaparser-1.0.8.jar加载。URLClassLoader@ce3ebdfb从类org.jvnet.annox.japa.parser.AnnotationExprParser调用,该类由java.net从文件:/C:/JavaDev/.m2/repository/org/jvnet/annox/annox/1.0.2/annox-1.0.2.jar加载。URLClassLoader@ce3ebdfb.

我不确定是哪个其他api导致了这种冲突。但从上面的信息中很难理解。

免责声明:我是这篇文章的作者

正确的语法是:

<annox:annotate target="class">
      @com.fasterxml.jackson.annotation.JsonTypeInfo(
          use = com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME,
          include = com.fasterxml.jackson.annotation.JsonTypeInfo.As.PROPERTY,
          property = "subVehicleType")
</annox:annotate>

基本上就是用Java编写的,但是使用FQCNs。

哦,你在那里创建的插件真不错。非常感谢您的快速回答。但我仍然得到以下错误:org.apache.maven.lifecycle.LifecycleExecutionException:未能执行目标org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.8.0:在项目域上生成默认值:目标org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.8.0:生成失败:执行时遇到API不兼容maven2:maven-jaxb2-plugin:0.8.0:generate:java.lang.NoSuchMethodError:japa/parser/JavaParser.parseLjava/io/Reader;ZLjapa/parser/ast/compliationunit@KishorPrakash 0.8.0是的一个相当旧的版本。我建议先更新它,然后查看中的示例Maven项目,以获得已知有效的参考。@KishorPrakash如果没有任何帮助,请创建一个小测试项目,并在此处向我发送一份PR:。嘿,它成功了。但不是将注释作为内容,而是作为属性。也就是说,它与`@KishorPrakash内容一起工作,因为属性是错误的,这不是我设计使用它的方式。关于嵌套注释-您应该像在Java中一样编写它,只使用FQCNs。
<annox:annotate target="class">
      @com.fasterxml.jackson.annotation.JsonTypeInfo(
          use = com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME,
          include = com.fasterxml.jackson.annotation.JsonTypeInfo.As.PROPERTY,
          property = "subVehicleType")
</annox:annotate>