我想将uid属性值在MyJaxbModel类中转换为大写的UnMarshalling。我确实写了UpperCaseAdapter,为我做工作。但是,使用这种方法,应用程序性能会下降到不可接受的水平(因为有数千个XML文件被解封到MyJaxbModel)。我不能在getter /setter中使用/setter,因为这些JAXB模型是由XSD自动生成的,我不想对它们进行调整。
@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]
是否有更好的办法来取得预期的结果?
发布于 2016-10-18 14:41:39
为什么不直接将其解析为getUid()中的大写或设置时的大写?
if (uid != null){
return uid.toUpperCase();
}
...或
...
if (uid != null){
this.uir = uid.toUpperCase();
}我认为这是最简单、最干净的方法.
https://stackoverflow.com/questions/40111036
复制相似问题