Jaxb 在xml中隐藏仅在解组时才能检索的值
是否可以在XML中隐藏值,以便只有在解组时才能检索该值。注意:我是专家组的负责人和成员 如果您使用MOXy作为JAXB提供程序,下面是实现此用例的一些选项。要使用MOXy作为JAXB提供程序,您需要在与域模型相同的包中包含一个名为Jaxb 在xml中隐藏仅在解组时才能检索的值,jaxb,jaxb2,Jaxb,Jaxb2,是否可以在XML中隐藏值,以便只有在解组时才能检索该值。注意:我是专家组的负责人和成员 如果您使用MOXy作为JAXB提供程序,下面是实现此用例的一些选项。要使用MOXy作为JAXB提供程序,您需要在与域模型相同的包中包含一个名为JAXB.properties的文件,其中包含以下条目: 选项#1-XmlAdapter 在封送处理操作期间,可以使用XmlAdapter将属性值置零。虽然XmlAdapter是一个标准的JAXB类,但是从marshal方法返回null会导致在使用JAXB引用实现时发生
JAXB.properties
的文件,其中包含以下条目:
选项#1-XmlAdapter
在封送处理操作期间,可以使用XmlAdapter
将属性值置零。虽然XmlAdapter
是一个标准的JAXB类,但是从marshal
方法返回null会导致在使用JAXB引用实现时发生异常
StringAdapter
import javax.xml.bind.annotation.adapters.XmlAdapter;
公共类StringAdapter扩展了XmlAdapter{
@凌驾
公共字符串封送处理程序(字符串)引发异常{
返回null;
}
@凌驾
公共字符串解组器(字符串字符串)引发异常{
返回字符串;
}
}
人
import javax.xml.bind.annotation.*;
导入javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlRootElement(name=“Person”)
公共阶层人士{
字符串密码;
@XmlJavaTypeAdapter(StringAdapter.class)
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
}
选项#2-无Getter的Setter
当MOXy用作JAXB提供程序时,如果您有一个带有注释setter的属性,而没有getter,那么MOXy将把它当作只读属性
import javax.xml.bind.annotation.*;
@XmlRootElement(name=“Person”)
公共阶层人士{
字符串密码;
@XmlElement
public void setPassword(字符串密码){
this.password=密码;
}
}
选项#3-MOXy的@XmlReadOnly
扩展
MOXy的@XmlReadOnly
扩展还可用于将属性标记为只读
import javax.xml.bind.annotation.*;
导入org.eclipse.persistence.oxm.annotations.XmlReadOnly;
@XmlRootElement(name=“Person”)
公共阶层人士{
字符串密码;
@XmlReadOnly
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
}
演示代码
input.xml
一些密码
*演示*
导入java.io.File;
导入javax.xml.bind.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Person.class);
Unmarshaller Unmarshaller=jc.createUnmarshaller();
文件xml=新文件(“src/forum14231799/input.xml”);
Person=(Person)unmarshaller.unmarshal(xml);
System.out.println(个人密码);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
封送员。封送员(人员、系统、输出);
}
}
输出
一些密码
以下方法可用于任何实现
演示
可以使用Marshaller.Listener
在封送对象之前清空值,然后再还原它
导入java.io.File;
导入javax.xml.bind.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Person.class);
Unmarshaller Unmarshaller=jc.createUnmarshaller();
文件xml=新文件(“src/forum14231799/input.xml”);
Person=(Person)unmarshaller.unmarshal(xml);
System.out.println(个人密码);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
setListener(新的marshaller.Listener(){
私有字符串密码;
@凌驾
公共无效后封送处理(对象){
if(Person的对象实例){
Person=(Person)对象;
person.setPassword(密码);
密码=null;
}
}
@凌驾
预封送处理前的公共无效(对象){
if(Person的对象实例){
Person=(Person)对象;
password=person.getPassword();
person.setPassword(空);
}
}
});
封送员。封送员(人员、系统、输出);
System.out.println(个人密码);
}
}
input.xml
一些密码
输出
一些密码
一些密码