Jaxb 输出空元素

Jaxb 输出空元素,jaxb,Jaxb,我有一个对象,有两个字段“name”和“address”。JAXB在将对象转换为XMl时忽略空元素 例如:如果我有name=“xyz”和address=null,那么out将是 <name>xyz</name> 请帮助我获得所需的输出 提前感谢。实现将输出一个空字符串“值作为空元素。您可以将address属性设置为该属性以获得所需的效果 更新#1 我已经更新了我的问题。基本上,address元素是空的。是 这个解决方案也适用于此 您可以利用调整地址的值 import

我有一个对象,有两个字段“name”和“address”。JAXB在将对象转换为XMl时忽略空元素

例如:如果我有name=“xyz”和address=null,那么out将是

<name>xyz</name>
请帮助我获得所需的输出

提前感谢。

实现将输出一个空字符串
值作为空元素。您可以将
address
属性设置为该属性以获得所需的效果


更新#1

我已经更新了我的问题。基本上,address元素是空的。是 这个解决方案也适用于此

您可以利用调整
地址的值

import javax.xml.bind.Marshaller;
导入javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
公共类客户{
私有字符串名称;
私有字符串地址;
封送前私人作废(封送员){
if(null==地址){
地址=”;
}
}
二等兵{
如果(“.”等于(地址)){
地址=空;
}
}
}

更新#2

唯一需要考虑的是,如果类中有10个字段,那么 为所有字段写入if。还有其他解决办法吗

如果您使用JAXB作为您的JAXB提供者(我是MOXy的负责人),那么您可以在这个用例中使用
XmlAdapter

XmlAdapter(StringAdapter)

用于UM14691333的包;
导入javax.xml.bind.annotation.adapters.XmlAdapter;
公共类StringAdapter扩展了XmlAdapter{
@凌驾
公共字符串封送处理程序(字符串)引发异常{
if(null==字符串){
返回“”;
}
返回字符串;
}
@凌驾
公共字符串解组器(字符串字符串)引发异常{
如果(“.”等于(字符串)){
返回null;
}
返回字符串;
}
}
套餐信息

然后,如果在包级别指定它,它将应用于该包中类型为
String
的所有映射字段/属性

@XmlJavaTypeAdapter(value=StringAdapter.class,type=String.class)
14691333包;
导入javax.xml.bind.annotation.adapters.*;
了解更多信息


如果您使用EclipseLink MOXy作为JAXB提供者,那么您可以使用

@XmlNullPolicy(emptyNodeRepresentsNull = true, nullRepresentationForXml = XmlMarshalNullRepresentation.EMPTY_NODE)
@XmlElement(name = "address", nillable = true)
private String address;

通过使用这种方式,您不必为所有字段编写适配器,只需在字段上设置一个空字符串默认值即可

@XmlElement(required="true")
private String address = "";
你会得到

<address></address>


Blaise你好,感谢您的快速回复。我已经更新了我的问题。基本上,address元素是空的。此解决方案也适用于此吗?谢谢Blaise。此解决方案有效。唯一需要担心的是,如果我在类中有10个字段,那么我必须为所有字段编写if。还有其他解决方案吗?我不熟悉package-info.java。我的方法与前面解释的相同,但是输出并没有达到预期的效果。我正在研究日食太阳神。我在eclipse中放置了一个调试点,并在调试模式下启动,但指针从未在这一点停止。您能在这方面帮助我吗?@Ritesh-
XmlAdapter
方法仅在使用MOXy作为JAXB提供程序时有效。见:
@XmlElement(required="true")
private String address = "";
<address></address>