CXF webService 对象属性值为null或空时生成xml缺少该字段节点

在使用cxf开发webService时发现一个问题,比如我现在有一个Building对象,其中name属性值可能为null或空,在building对象生成xml文件时,当name属性值为null时:生成的xml会缺少<name></name>这个节点,当name属性值为“”空时:生成的xml中name节点是这样的<name/>这个形式也并不是我想要的,我们需要的格式应该是<name></name>这样形式的。

网上的这篇文章解决了问题,请参考

http://www.boyunjian.com/do/article/snapshot.do?uid=2819102595941137602

http://www.cnblogs.com/fragranting/archive/2012/03/25/xml--jaxb.html

主要是使用了jax-ws数据映射提供 XML 模式和 Java 之间的映射,在这里我用到的是javax.xml.bind.annotation这个类,

1、我们首先需要去写一个class该类继承XmlAdapter抽象类:

如下:在这里我把值为null或""空的数据转化为了" "(空格输出)这样就可以生成我们需要的xml


package com.hbmop.app.util;
 
import javax.xml.bind.annotation.adapters.XmlAdapter;
 
public class DataAdapter extends XmlAdapter<Object, Object>{
    //java→xml时的处理,ob是Java生成xml时传入的属性值,ob可以数组、集合等其它复杂类型,
    //在这个方法中可以对其进行处理,return返回需要的结果类型
    @Override
    public Object marshal(Object ob) throws Exception {
        
        if(ob == null || ob.equals("")){
            ob=" ";
        }
        return ob;
    }
 
    //xml→java时的处理
    @Override
    public Object unmarshal(Object arg0) throws Exception {
        // TODO Auto-generated method stub
        return arg0;
    }
 
}
2、使用基于javax.xml.bind.annotation这个类的注解
@XmlElement选项包括: Required:该元素节点是否必须存在?例如,minOccurs 是否不等于 1? Nillable:该字段是否包含 nillable="true" 属性 ,如果nillable() 为 true,那么 JavaBean 属性被映射到 XML 模式 nillable 元素声明


</pre><p><pre name="code" class="java">@XmlAccessorType(XmlAccessType.FIELD)  
@XmlType(name="Building")
public class Building {
    @XmlJavaTypeAdapter(value = DataAdapter.class)
    @XmlElement(required=true,nillable=true)
   private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}}

经过上述两步处理,即可实现我们想要的xml格式

主要的Annotation

XmlAccessorOrder  控制类中字段和属性的排序。 
XmlAccessorType  控制默认情况下是否对字段或 Javabean 属性进行系列化。 
XmlAttribute   将 JavaBean 属性映射到 XML 属性。 
XmlElement   将 JavaBean 属性映射到派生于属性名称的 XML 元素。 
XmlElementWrapper  生成一个包装 XML 表示形式的包装器元素。 
XmlList    用来将属性映射到列表简单类型。 
XmlMimeType   关联控制属性 XML 表示形式的 MIME 类型。  
XmlRootElement   将类或枚举类型映射到 XML 元素。 
XmlTransient   阻止将 JavaBean 属性映射到 XML 表示形式。 
XmlType   将类或枚举类型映射到 XML 模式类型。 
XmlValue   支持将类映射到带有 simpleContent 的 XML 模式复杂类型或 XML 模式简单类型。
--------------------- 
 
原文:https://blog.csdn.net/yusewuhen/article/details/44150833 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值