代码如下
User 为实体类
package Test.hw.server;
import java.util.Date;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="User")
@XmlAccessorType(XmlAccessType.FIELD)
public class User {
private Integer id;
private String username;
private String userpwd;
private String adderss;
private Date birthday;
public Integer getId() {
return id;
}
public String getUsername() {
return username;
}
public String getUserpwd() {
return userpwd;
}
public String getAdderss() {
return adderss;
}
public void setId(Integer id) {
this.id = id;
}
public void setUsername(String username) {
this.username = username;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
public void setAdderss(String adderss) {
this.adderss = adderss;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
Map和list数据在webservice中不能直接使用,必须对Map类型做转换的类和适配器类
package Test.hw.server;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlType(name="UserMap")
@XmlAccessorType(XmlAccessType.FIELD)
public class UserMap {
@XmlElement(nillable = false, name = "entry")
List<UserEntry> entries =new ArrayList<UserEntry>();
public List<UserEntry> getEntries() {
return entries;
}
@XmlType(name="IdentifiedUser")
@XmlAccessorType(XmlAccessType.FIELD)
static class UserEntry{
@XmlElement(required = true, nillable = false)
int id;
User user;
public int getId() {
return id;
}
public User getUser() {
return user;
}
public void setId(int id) {
this.id = id;
}
public void setUser(User user) {
this.user = user;
}
}
}
package Test.hw.server;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class UserMapAdapter extends XmlAdapter<UserMap, Map<Integer, User>> {
@Override
public UserMap marshal(Map<Integer, User> v) throws Exception {
// TODO Auto-generated method stub
UserMap usermap=new UserMap();
for(Map.Entry<Integer, User> e:v.entrySet()){
UserMap.UserEntry entry=new UserMap.UserEntry();
entry.setId(e.getKey());
entry.setUser((Test.hw.server.User) e.getValue());
usermap.getEntries().add(entry);
}
return usermap;
}
@Override
public Map<Integer, User> unmarshal(UserMap v) throws Exception {
// TODO Auto-generated method stub
Map<Integer, User> map = new LinkedHashMap<Integer, User>();
for (UserMap.UserEntry e : v.getEntries()) {
map.put(e.getId(), (User) e.getUser());
}
return map;
}
}
webService接口和实现
package Test.hw.server;
import java.util.Map;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@WebService
public interface UserService {
@WebResult(name="mothod")
String insert(User user);
User search(@WebParam(name="username",header = true) String username);
@XmlJavaTypeAdapter(UserMapAdapter.class)
Map<Integer, User> getUsers();
}
package Test.hw.server;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.jws.WebService;
@WebService(endpointInterface = "Test.hw.server.UserService",
serviceName = "UserService")
public class UserServiceImpl implements UserService {
Map<Integer, User> users = new LinkedHashMap<Integer, User>();
@Override
public Map<Integer, User> getUsers() {
// TODO Auto-generated method stub
return users;
}
@Override
public String insert(User user) {
// TODO Auto-generated method stub
String access="true";
try {
users.put(users.size() + 1, user);
} catch (Exception e) {
// TODO: handle exception
access="false";
}
return access;
}
@Override
public User search(String username) {
// TODO Auto-generated method stub
User user=null;
for(Entry<Integer, User> e:users.entrySet()){
String name=e.getValue().getUsername();
if(name.equals(username)){
user=e.getValue();
}
}
return user;
}
}
生成wsdl文件
package Test.hw.server;
import javax.xml.ws.Endpoint;
public class Server {
protected Server() throws Exception {
// START SNIPPET: publish
System.out.println("Starting Server");
UserService implementor = new UserServiceImpl();
String address = "http://localhost:9000/userService";
Endpoint.publish(address, implementor);
// END SNIPPET: publish
}
public static void main(String args[]) throws Exception {
new Server();
System.out.println("Server ready...");
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting");
System.exit(0);
}
}
使用wsdl2java 生成客户端
wsdl2java -p Test.hw.client -d ./src http://localhost:9090/userService?wsdl
生成如下类
![](https://img-my.csdn.net/uploads/201206/11/1339382298_5558.jpg)
package Test.hw.client;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
/**
* <p>getUsers complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* <complexType name="getUsers">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
* </sequence>
* </restriction>
* </complexContent>
* </complexType>
* </pre>
*
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "getUsers")
public class GetUsers {
}
package Test.hw.client;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
/**
* <p>getUsersResponse complex type的 Java 类。
*
* <p>以下模式片段指定包含在此类中的预期内容。
*
* <pre>
* <complexType name="getUsersResponse">
* <complexContent>
* <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
* <sequence>
*