1、创建异常类UserException , 此处继承RuntimeException, 注意这是有问题的
package com.chb.service.exception;
/**
* 首先继承RuntimeException
*/
public class UserException extends RuntimeException {
private static final long serialVersionUID = 1L;
public UserException() {
super();
}
public UserException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {
super(arg0, arg1, arg2, arg3);
}
public UserException(String arg0, Throwable arg1) {
super(arg0, arg1);
}
public UserException(String arg0) {
super(arg0);
}
public UserException(Throwable arg0) {
super(arg0);
}
}
2、在UserDao中, 添加异常
package com.chb.service.dao;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.chb.service.model.User;
public class UserDao {
private static final Map users = new HashMap();
private static UserDao userDao= null;
private UserDao() {
users.put("chb", new User("chb", "CHB", "123456"));
}
public static UserDao newInstance() {
if (userDao == null) {
userDao = new UserDao();
}
return userDao;
}
public boolean add(User user) {
if(users.containsKey(user.getUsername())) throw new UserException("用户已经存在...");
User u = users.put(user.getUsername(), user);
if (u != null) {
return true;
}
return false;
}
public boolean delete(String username) {
User u = users.remove(username);
if (u != null) {
return true;
}
return false;
}
public boolean login(String username, String password) {
if (users.containsKey(username)) throw new UserException("用户不存在...");
User u = users.get(username);
if(password.equals(u.getPassword())) {
return true;
}else {
throw new UserException("密码错误。。。");
}
}
public List list() {
return (List) users.values();
}
}
3、在wsdl中添加异常
3.1、user.xsd添加异常对象。
3.2、user.xsd添加异常类型
3.3、user.wsdl中创建异常的message
3.4、user.wsdl中为portType设置异常, 指定在那些方法中回抛出异常。
完整的user.wsdl
4、重新导出
4.1、服务端重新导出, 根据wsdl
G:\JavaWeb\qyyx_01\WebContent\WEB-INF\wsdl>wsimport -d G:\JavaWeb\qyyx_01\src -keep -verbose user.wsdl
4.1.1、替换IUserService , 会发现add() 异常抛出。
http://localhost:9999/us?wsdl
G:\JavaWeb\qyyx_01\WebContent\WEB-INF\wsdl>wsimport -d G:\JavaWeb\qyyx_01_client\src -verbose -keep http://localhost:9999/us?wsdl
5、启动服务, 测试客户端。
package com.chb.service.client;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import com.chb.service.IUserService;
import com.chb.service.User;
import com.chb.service.UserException_Exception;
import com.chb.service.UserService;
/**
* wsimport -d G:\JavaWeb\qyyx_01_client\src -verbose -keep http://localhost:9999/us?wsdl
*/
public class MyClient {
public static void main(String[] args) throws MalformedURLException {
//创建访问的URL
URL url = new URL("http://localhost:9989/us?wsdl");
QName qName = new QName("http://service.chb.com/", "UserService");
UserService msis = new UserService(url, qName);
//获取IMyService, 简单多了
IUserService iMyService = msis.getUserServicePort();
User user = new User();
user.setUsername("wx");
user.setNickname("wuxin");
user.setPassword("111");
try {
iMyService.add(user);
iMyService.add(user);
} catch (UserException_Exception e) {
e.printStackTrace();
}
for (User u : iMyService.list()) {
System.out.println(u);
}
try {
System.out.println(iMyService.login("chb", "123456"));
} catch (UserException_Exception e) {
e.printStackTrace();
}
}
}
5.1、客户端报错
5.2、服务端报错
由于UserException 继承RuntimeException ,导致Server端也报错。这个是不符合我们的要求, 应该继承Exception
实现类抛出异常。