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]
は、所望の結果を達成するためのより良い方法はありますか?
私は私JAXBモデルがXSDから自動生成されていると私はドンことを含めるように逃しましたそれらを微調整したい。現在生成されているモデルは、XSD以下を使用します。 JavaType名= "java.lang.Stringで" \t \t \t \t \tアダプタ: –
'ます。 \t \t: \t \t \t \t \t \t \t = "test.UpperCaseAdapter" /> \t \t \tのxsd:APPINFO> \t \tのxsd:注釈> \t \t \t xsd:simpleType> ' –