2011-09-14 10 views

risposta

26
  1. Creare un 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. Creare un file package-info.java in com.foo.bar.

  3. Aggiungere il seguente al file di package-info.java

    @XmlJavaTypeAdapter(value=StringTrimAdapter.class,type=String.class) 
    package com.foo.bar; 
    import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 
    
  4. Questo si applica a StringTrimAdaptertuttiString campi in com.foo.bar senza annotazioni extra.

EDIT
Da notare che se l'annotazione livello del pacchetto è troppo espansiva per voi, si può sempre applicare un'annotazione @XmlJavaTypeAdapter alle classi.

+1

Risposta piacevole: non riesco a parlare con il contenuto, ma è estremamente ben scritto. Immagino che Blaise fosse fuori a pranzo ;-) –

+0

@Ed Staub - :). Sahil mi ha battuto, ho fatto +1 risposta Sahils. –

+0

+1: funziona bene. Vedi anche [la mia risposta] (http://stackoverflow.com/a/16262197/521799) dove l'implementazione di 'XmlAdapter' di Sahil viene utilizzata in una configurazione di binding XJC. –

7

Vale la pena ricordare che oltre a scrivere un XmlAdapter, che esegue il ritaglio, è possibile configurare XJC per utilizzare effettivamente questo adattatore nel codice generato. Un esempio di come farlo:

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

L'esempio precedente utilizza la XmlAdapter given in Sahil's answer

0

Per rendere l'esempio di configurazione XJC (in the answer provided by Lukas Eder) completa, vorrei aggiungere la seguente configurazione di esempio che abbiamo bisogno di aggiungere in pom.xml di maven

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

Abbiamo bisogno di essere aggiunti in bindings.xjb il seguente contenuto.

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