2011-09-14 12 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.bar में एक package-info.java फ़ाइल बनाएँ।

  3. package-info.java फ़ाइल

    @XmlJavaTypeAdapter(value=StringTrimAdapter.class,type=String.class) 
    package com.foo.bar; 
    import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 
    
  4. के लिए निम्न यह किसी भी अतिरिक्त टिप्पणी के बिना com.foo.bar में StringTrimAdapterकरने के लिए सभीString क्षेत्रों लागू होंगे।

संपादित
ध्यान दें कि यदि पैकेज स्तर एनोटेशन तुम्हारे लिए भी प्रशस्त है, तो आप हमेशा एक @XmlJavaTypeAdapter एनोटेशन वर्गों के लिए आवेदन कर सकता है।

+1

अच्छा जवाब - मैं सामग्री से बात नहीं कर सकता, लेकिन यह बेहद अच्छी तरह लिखा गया है। मुझे लगता है कि ब्लेज़ लंच के बाहर था ;-) –

+0

@ एडी स्टैब - :)। साहिल ने मुझे मार दिया, मैंने साहिल्स का जवाब +1 किया। –

+0

+1: यह अच्छी तरह से काम करता है। यह भी देखें [मेरा जवाब] (http://stackoverflow.com/a/16262197/521799) जहां साहिल का 'एक्सएमएलएडाप्टर' कार्यान्वयन एक्सजेसी बाइंडिंग कॉन्फ़िगरेशन में उपयोग किया जाता है। –

7

यह उल्लेखनीय हो सकता है कि XmlAdapter लिखने के अलावा, जो ट्रिमिंग करता है, आप एक्सजेसी को जेनरेट कोड में वास्तव में इस एडाप्टर का उपयोग करने के लिए कॉन्फ़िगर कर सकते हैं। इसे कैसे करना का एक उदाहरण:

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

ऊपर के उदाहरण XmlAdapter given in Sahil's answer

0

का उपयोग करता कॉन्फ़िगर करने की उदाहरण XJC (in the answer provided by Lukas Eder) पूरा करने के लिए, मैं निम्न नमूना विन्यास जो हम जोड़ने की जरूरत है जोड़ना चाहते हैं Maven के pom.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> 
संबंधित मुद्दे