2011-09-14 16 views
12

で空白をトリミングどのように私はJAXBを設定したいJAXBを設定するには、それがデフォルト

私は、次のような答えを見た:How to configure JAXB so it trims whitespaces when unmarshalling tag value?

をしかし、私は持っている必要はありません候補の回答ごとにすべての文字列フィールドに注釈を付ける

@XmlElement(required=true) 
@XmlJavaTypeAdapter(MyNormalizedStringAdapter.class) 
String name; 

ありがとう!

答えて

26
  1. XmlAdapterを作成します。

    package com.foo.bar; 
    public class StringTrimAdapter extends XmlAdapter<String, String> { 
        @Override 
        public String unmarshal(String v) throws Exception { 
         if (v == null) 
          return null; 
         return v.trim(); 
        } 
        @Override 
        public String marshal(String v) throws Exception { 
         if (v == null) 
          return null; 
         return v.trim(); 
        } 
    } 
    
  2. com.foo.barpackage-info.javaファイルを作成します。

  3. は、これは余分な注釈なしcom.foo.barStringTrimAdapterStringすべてにフィールドが適用されますpackage-info.javaファイル

    @XmlJavaTypeAdapter(value=StringTrimAdapter.class,type=String.class) 
    package com.foo.bar; 
    import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 
    
  4. に以下を追加します。

EDIT
パッケージレベルの注釈があなたのためにあまりにも広大であるならば、あなたは常にクラスに@XmlJavaTypeAdapter注釈を適用することができることに注意してください。

+1

いい答え - 私は内容を話すことはできませんが、非常によく書かれています。私はBlaiseが昼食をとっていたと思う;-) –

+0

@Ed Staub - :)サハイルはそれに私を打ち負かす、私は+1サヒルスの答えをした。 –

+0

+1:これはうまくいきます。 [私の答え](http://stackoverflow.com/a/16262197/521799)も参照してください。Sahilの 'XmlAdapter'実装はXJCバインディングの設定で使われています。 –

7

トリミングを実行するXmlAdapterを書くことに加えて、生成されたコードでこのアダプタを実際に使用するようにXJCを構成することができます。これを行う方法の例:

<jaxb:globalBindings> 
    <xjc:javaType 
     name="java.lang.String" 
     xmlType="xs:string" 
     adapter="com.foo.bar.StringTrimAdapter"/> 
</jaxb:globalBindings> 

上記の例では、XJC (in the answer provided by Lukas Eder)完全を設定する例を作成するにはXmlAdapter given in Sahil's answer

0

を使用しています 私たちは追加する必要が次の設定例を追加したいと思いますin paven.xml

<build> 
    . 
    . 
    <execution> 
     <id>responseSchema</id> 
     <goals> 
      <goal>xjc</goal> 
     </goals> 
     <phase>generate-sources</phase> 
     <configuration> 
      <clearOutputDir>false</clearOutputDir> 
      <outputDirectory>${project.basedir}/src/main/java</outputDirectory> 
      <packageName>com.foo.bar.domain.response</packageName> 
      <bindingFiles>../resources/bindings.xjb</bindingFiles> 
      <schemaDirectory>${project.basedir}/src/main/resources/wsdl/xsd</schemaDirectory> 
      <schemaFiles>response.xsd</schemaFiles> 
      <extension>true</extension> 
     </configuration> 
    </execution> 
    . 
    . 
</build> 

bindings.xjbに追加するコンテンツは次のとおりです。

<jaxb:globalBindings> 
    <xjc:javaType 
     name="java.lang.String" 
     xmlType="xs:string" 
     adapter="com.foo.bar.StringTrimAdapter"/> 
</jaxb:globalBindings> 
関連する問題