2014-12-02 8 views
0

우리는 maven plugin maven-jaxb2-plugin을 사용하여 xsd에서 JAXB 객체를 생성하고 있습니다. 0.6.2
JAXB2 - 기본 - 주석 - - 아래는annox 플러그인을 사용하여 @JsonSerialize에 include = JsonSerialize.Inclusion.NON_NULL을 추가하는 방법

JAXB2 - 기본이 종속 우리의 받는다는 파일에서 0.6.2

, 우리는 또한 -Xannotate 및

<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> 
을 -XtoString 포함

바인딩 파일이 @JsonSerialize를 추가했다

<?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> 

다음과 같다 (JsonDateSerializer.class = 사용). 하지만 이 = 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(), JsonSerialize의 typing()과 같은 매개 변수를 주석에 추가하는 올바른 방법은 무엇입니까? How to add Jackson annotations to POJO generated from XSD by 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> 

을 시도했다.

답변

0

면책 조항 : 나는 jaxb2-annotate-plugin의 저자입니다. 모든

첫째, (1.0.0에서 시작되지 않습니다하는) XML 구문이 시도 :

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

다음, 자바 구문이 시도 :

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

당신이 연결 대답 오타가 있었음 - 마지막 )가 누락되었습니다. 어쩌면 이것이 문제 일 수도 있습니다.

나는 이것이 작동해야한다고 생각합니다. 그렇지 않다면 tests에 샘플 프로젝트와 함께 풀 요청을 보내주십시오. 내가 일하게 만들거야.

참고 : 당신은 일 자바 구문 (현재는 1.0.1입니다) jaxb2-annotate-plugin1.0.0 이상을 사용해야합니다.

+0

감사합니다. Alexey – KumarRaja

+0

언급 한 XML 구문이 매력처럼 작동합니다. 다시 한번 감사드립니다. – KumarRaja