Как добавить include=JsonSerialize.Inclusion.NON_NULL в @JsonSerialize с помощью плагина annox

Мы генерируем объекты JAXB из xsd, используя плагин maven maven-jaxb2-plugin. Ниже приведены зависимости, которые мы имеем

Основы jaxb2 - 0.6.2
jaxb2-basics-annotate - 0.6.2

В нашем файле maven мы также включили -Xannotate и -XtoString

    <plugin>                
<groupId>org.jvnet.jaxb2.maven2</groupId>
                    <artifactId>maven-jaxb2-plugin</artifactId>
                    <executions>
                         <execution>
                            <id>exec1</id>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                            <configuration>
                                <schemaDirectory>${basedir}/src/main/resources/xsd</schemaDirectory>
                                <bindingDirectory>${basedir}/src/main/resources/xsd</bindingDirectory>
                                <generatePackage>org.learning.json.generated</generatePackage>
                                <generateDirectory>${basedir}/generated</generateDirectory>
                                <clearOutputDir>false</clearOutputDir>
                                <includeSchemas>
                                    <includeSchema>Person.xsd</includeSchema>
                                </includeSchemas>
                                <plugins>
                                    <plugin>
                                        <groupId>org.jvnet.jaxb2_commons</groupId>
                                        <artifactId>jaxb2-basics</artifactId>
                                        <version>0.6.2</version>
                                    </plugin>
                                    <plugin>
                                        <groupId>org.jvnet.jaxb2_commons</groupId>
                                        <artifactId>jaxb2-basics-annotate</artifactId>
                                        <version>0.6.2</version>
                                    </plugin>
                                </plugins>
                                <args>
                                    <arg>-Xannotate</arg>
                                    <arg>-XtoString</arg>
                                </args>
                            </configuration>
                        </execution>

Файл привязки, как показано ниже

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings 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:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:annox="http://annox.dev.java.net"
               jaxb:extensionBindingPrefixes="xjc annox"
               jaxb:version="2.0">

     <jaxb:bindings schemaLocation="Person.xsd" multiple="true">  
        <jaxb:bindings node="xs:complexType[@name='personType']/xs:sequence/xs:element[@type='xs:date']" multiple="true">
            <annox:annotate>
                <annox:annotate target="getter" annox:class="org.codehaus.jackson.map.annotate.JsonSerialize" 
                                using="org.learning.json.JsonDateSerializer"/>
            </annox:annotate>
        </jaxb:bindings>
     </jaxb:bindings>
</jaxb:bindings>

Это добавило @JsonSerialize(используя =JsonDateSerializer.class). Но я попытался несколько вариантов, как показано ниже, чтобы добавить include=JsonSerialize.Inclusion.NON_NULL, но не сработало

<annox:annotate>
                <annox:annotate target="getter" annox:class="org.codehaus.jackson.map.annotate.JsonSerialize" 
                                using="org.learning.json.JsonDateSerializer"
        include="org.codehause.jackson.map.annotate.JsonSerialize.Inclusion.NON_NULL"/>
            </annox:annotate> 



<annox:annotate>
                <annox:annotate target="getter" annox:class="org.codehaus.jackson.map.annotate.JsonSerialize" 
                                using="org.learning.json.JsonDateSerializer"
        include="org.codehause.jackson.map.annotate.JsonSerialize$Inclusion.NON_NULL"/>
            </annox:annotate> 

Но во всех случаях получается ValueParseException. Итак, как правильно добавить в аннотацию такие параметры, как include(), typing() JsonSerialize.

Кроме того, на основе Как добавить аннотации Джексона в POJO, сгенерированные из XSD JAXB/XJC? Я тоже пробовал

<jaxb:bindings schemaLocation="Person.xsd" multiple="true">  
        <jaxb:bindings node="xs:complexType[@name='personType']/xs:sequence/xs:element[@type='xs:date']" multiple="true">
            <annox:annotate>
                <annox:annotate target="getter" annox:class="org.codehaus.jackson.map.annotate.JsonSerialize" 
                                using="org.learning.json.JsonDateSerializer"/>
            </annox:annotate>
            <annox:annotate>
                    @org.codehaus.jackson.map.annotate.JsonSerialize
                    (include=org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion.ALWAYS
            </annox:annotate>
        </jaxb:bindings>
     </jaxb:bindings>

Это также не добавило ни одной включаемой части в аннотацию.

1 ответ

Отказ от ответственности: я являюсь автором jaxb2-annotate-plugin,

Прежде всего, попробуйте это для синтаксиса XML (который не рекомендуется, начиная с 1.0.0):

<annox:annotate
    target="getter"
    annox:class="org.codehaus.jackson.map.annotate.JsonSerialize" 
    using="org.learning.json.JsonDateSerializer"
    include="NON_NULL"/>

Затем попробуйте это для синтаксиса Java:

<annox:annotate>
    @org.codehaus.jackson.map.annotate.JsonSerialize
        (include=org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion.ALWAYS)
</annox:annotate>

Ответ, на который вы ссылались, был опечаткой - последний ) скучал. Может быть, это проблема, а может и нет.

Я думаю, что это должно работать. Если это не так, пожалуйста, пришлите мне запрос на выборку с примером проекта в тестах. Я заставлю это работать.

Примечание: вам придется использовать jaxb2-annotate-plugin 1.0.0 или более поздняя версия (текущая версия 1.0.1) для работы синтаксиса Java.

Другие вопросы по тегам