CXF的Webservice服务开发几点总结

评分 0.0, 满分 5 星 0
Loading...
Loading...
发表评论 阅读评论

一、对接口类型复杂对象的封装

比如如下接口返回对象为WfProcessInstance的接口类型,

WfProcessInstance getProcessInstance(String sessionId,String procInstId);

1.那么需要提供一个实现该接口其对应的实体类,具体实现如下:

a.在类定义前加@XmlType注解,name为对应的接口名称

b.需要默认的构造函数

@XmlType(name = “WfProcessInstance”)
public class WfProcessInstanceEntity implements WfProcessInstance{public WfProcessInstanceEntity() {

}

}

2.构造WfProcessInstance的适配器,方便进行对象类型的转换,如下

public class WfProcessInstanceAdapter extends

       XmlAdapter<WfProcessInstanceEntity, WfProcessInstance> {

    public WfProcessInstanceEntity marshal(WfProcessInstance v)

           throws Exception {

       WfProcessInstanceEntity entity = null;

       if (v instanceof WfProcessInstanceImpl) {

           WfProcessInstanceImpl obj = (WfProcessInstanceImpl) v;

           entity = new WfProcessInstanceEntity(obj.getName(), obj.getId(),…);

       }

       return entity;

    }

    public WfProcessInstance unmarshal(WfProcessInstanceEntity v)

           throws Exception {

       return v;

    }

}

3.在接口WfProcessInstance 中配置上适配器

@XmlJavaTypeAdapter(WfProcessInstanceAdapter.class)
public interface WfProcessInstance{…….}

二、对集合,列表类型的返回对象需要明确返回的对象类型

@WebMethod
List<WfProcessInstance> listProcessInstances(String sessionId, WfFilter filter);@WebMethod
Set<WfApplicationDefinition> listApplicationDefinitions(String sessionId, String procModelId);

三、Map对象类型编写适配器

这里仅介绍通用的Map对象,对一些结构复杂的map对象需要额外编写适配器

  1. 实现Map对象的实体类,对应xml类型名称为本身,这里不再实现什么接口

@XmlType(name = “ObjectMap”)

@XmlAccessorType(XmlAccessType.FIELD)

public class ObjectMap {

    protected Map<Object, Object> map;

    /**

     * @return map

     */

    public Map<Object, Object> getMap() {

       return map;

    }

    /**

     * @param map 要设置的 map

     */

    public void setMap(Map<Object, Object> map) {

       this.map = map;

    }

}

  1. 编写适配器ObjectMapAdapter

 public class ObjectMapAdapter extends

       XmlAdapter<ObjectMap, Map<Object, Object>> {

    @Override

    public ObjectMap marshal(Map<Object, Object> arg0) throws Exception {

       ObjectMap map = new ObjectMap();

       map.setMap(arg0);

       return map;

    }

    @Override

    public Map<Object, Object> unmarshal(ObjectMap arg0) throws Exception {

       return arg0.getMap();

    }

}

3. 在对应的方法上加入注解XmlJavaTypeAdapter

a.在返回值上加入注解

@WebMethod
@XmlJavaTypeAdapter(ObjectMapAdapter.class)
public Map<Object,Object> getLockmap(String sessionId);

b.在方法参数上加注解

@WebMethod
public Set<WfActivityDefinition> listFirstActivitys(String sessionId,String procModelId,@XmlJavaTypeAdapter(ObjectMapAdapter.class)Map<Object,Object> dataMap) throws WfInvalidParameterException, WfException ;

 

 

分类: JAVA, 编程开发 标签: , , 940次阅读
  1. | #1

    这个封装以后,就可以方便的使用了

  2. | #2

    很好的文章!

  3. | #3

    我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有20%折扣优惠!推荐“独享云虚拟主机”,建站首选!领券后会更便宜!
    快下手,马上就要抢光了(进入阿里云优惠券领取页面,按需点击“立即领券”)
    https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=tt20dhqq&productCode=qingcloud&utm_source=tt20dhqq

  1. 本文目前尚无任何 trackbacks 和 pingbacks.