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;
}
}