现在的位置: 首页 > 综合 > 正文

CXF学习总结1 编写接口,实现类,Map自定义类型转换

2012年10月10日 ⁄ 综合 ⁄ 共 2869字 ⁄ 字号 评论关闭

1.必须包

asm-3.3.jar
commons-logging-1.1.1.jar
cxf-2.4.0.jar
neethi-3.0.0.jar
wsdl4j-1.6.2.jar
xmlschema-core-2.0.jar

2.定义接口

package com.cxf.ws;

import java.util.Map;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import com.cxf.domain.UserMan;
import com.cxf.domain.adapter.MyHashMapAdapter;

@WebService
public interface IUserServiceWs {

	UserMan getUserByName(
			@WebParam(name="UserName") String name);
	
//Map类型需要特别处理
	@XmlJavaTypeAdapter(value=MyHashMapAdapter.class)
	Map<String, UserMan> getUserMapByName(
			@WebParam(name="UserName") String name);
}

3。定义实现类

package com.cxf.ws.impl;

import java.util.Map;

import javax.jws.WebService;

import com.cxf.domain.UserMan;
import com.cxf.service.impl.UserServiceImp;
import com.cxf.ws.IUserServiceWs;

//实现的接口+服务名
@WebService(endpointInterface="com.cxf.ws.IUserServiceWs",
serviceName="UserServiceWs")
public class UserServiceWs implements IUserServiceWs {

//Spring注入Service
	private UserServiceImp userService;
	public void setUserService(UserServiceImp userService) {
		this.userService = userService;
	}
	
	@Override
	public UserMan getUserByName(String name) {
		return userService.getUserName(name);
	}

	@Override
	public Map<String, UserMan> getUserMapByName(String name) {
		return userService.getUserMapByName(name);
	}

}

 

4.Map传输需要自定义类型转换

package com.cxf.domain.change;
import java.util.ArrayList;
import java.util.List;

import com.cxf.domain.UserMan;


public class MyHashMapType {
	
//	Map的列表
    private List<MyHashMapEntryType> entrys=new ArrayList<MyHashMapType.MyHashMapEntryType>();
    
//结构类似Map中的Entry元素
    public static class MyHashMapEntryType {
        private String key; 
        private UserMan value;
        
		public MyHashMapEntryType() {}

		public MyHashMapEntryType(String key, UserMan value) {
			this.key = key;
			this.value = value;
		}
		
		public String getKey() {
			return key;
		}
		public void setKey(String key) {
			this.key = key;
		}
		public UserMan getValue() {
			return value;
		}
		public void setValue(UserMan value) {
			this.value = value;
		}
    }

    
    
	public List<MyHashMapEntryType> getEntrys() {
		return entrys;
	}
	public void setEntrys(List<MyHashMapEntryType> entrys) {
		this.entrys = entrys;
	}
    
}



 

5定义Map与自定义类型的转换

package com.cxf.domain.adapter;

import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import com.cxf.domain.UserMan;
import com.cxf.domain.change.MyHashMapType;
import com.cxf.domain.change.MyHashMapType.MyHashMapEntryType;

//XmlAdapter按F2查看帮助,这里不能是HashMap 要是Map,使用接口
public class MyHashMapAdapter extends XmlAdapter<MyHashMapType, Map<String, UserMan>>{

	@Override//自定义转换为Map
	public Map<String, UserMan> unmarshal(MyHashMapType v) throws Exception {
		HashMap<String, UserMan> map=new HashMap<String, UserMan>();
		
		for (MyHashMapEntryType myHashMapEntryType : v.getEntrys()) {
			map.put(myHashMapEntryType.getKey(), myHashMapEntryType.getValue());
		}
		return map;
	}

	@Override//Map转换为你自定义
	public MyHashMapType marshal(Map<String, UserMan> v) throws Exception {
		
		MyHashMapType hashMapType=new MyHashMapType();
		
		for (String s : v.keySet()) {
			hashMapType.getEntrys().add(new MyHashMapEntryType(s, v.get(s)));
		}
		return hashMapType;
	}

}

 

抱歉!评论已关闭.