2016-10-18 22 views
0

アンマーシャリング中にuid属性の値を大文字に変換したいとします。私のために働くUpperCaseAdapterを書きました。しかし、このアプローチでは、(MyJaxbModelにアンマーシャリングされた数千のXMLファイルがあるため)アプリケーションのパフォーマンスが許容できないレベルに低下します。これらのJAXBモデルはXSDから自動的に生成されるため、getter/setterでString.toUppperCase()を使用することはできません。これらを調整する必要はありません。アンマーシャリング中にJaxb属性値を大文字に変換する

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name = "myJaxbModel") 
public class MyJaxbModel 
{ 
    protected String name; 

    @XmlJavaTypeAdapter(UpperCaseAdapter.class) 
    protected String uid; 

    // getters and setters 

} 

public class UpperCaseAdapter extends XmlAdapter<String, String> 
{ 
    @Override 
    public String unmarshal(String value) throws Exception 
    { 
     return value.toUpperCase(); 
    } 

    @Override 
    public String marshal(String value) throws Exception 
    { 
     return value; 
    } 
} 

<!--My XSD makes use of below xjc:javaType definition to auto-configure this--> 
<xsd:simpleType name="uidType"> 
    <xsd:annotation> 
     <xsd:appinfo> 
      <xjc:javaType name="java.lang.String" 
       adapter="jaxb.UpperCaseAdapter" /> 
     </xsd:appinfo> 
    </xsd:annotation> 
    <xsd:restriction base="xsd:string" /> 
</xsd:simpleType> 

予想される入力<myJaxbModel name="abc" uid="xyz" />

予想される出力myJaxbModel.toString() -> MyJaxbModel[name=abc, uid=XYZ]

は、所望の結果を達成するためのより良い方法はありますか?

答えて

0

なぜあなたはgetUid()またはwhile設定で大文字に解析しませんでしたか?私はそれを行うための簡単かつクリーンな方法だと思います

if (uid != null){ 
    return uid.toUpperCase(); 
} 
... 

または

... 
    if (uid != null){ 
     this.uir = uid.toUpperCase(); 
    } 

...

+0

私は私JAXBモデルがXSDから自動生成されていると私はドンことを含めるように逃しましたそれらを微調整したい。現在生成されているモデルは、XSD以下を使用します。 JavaType名= "java.lang.Stringで" \t \t \t \t \tアダプタ: –

+0

'ます。 \t \t: \t \t \t \t \t \t \t = "test.UpperCaseAdapter" /> \t \t \t \t \t \t \t \t ' –

関連する問題