非常感谢孙浩老师。
为add和login方法增加异常处理。
先增加UserException.java
package cn.lichen.exception;
public class UserException extends Exception {
public UserException() {
}
public UserException(String message) {
super(message);
}
public UserException(Throwable cause) {
super(cause);
}
public UserException(String message, Throwable cause) {
super(message, cause);
}
public UserException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
修改wsdl:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://service.lichen.cn" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="UserService"
targetNamespace="http://service.lichen.cn">
<wsdl:types>
<xsd:schema targetNamespace="http://service.lichen.cn">
<!-- <xsd:include schemaLocation="user.xsd"></xsd:include> -->
<xsd:element name="add" type="tns:addType" />
<xsd:element name="addResponse" type="tns:addResponseType" />
<xsd:element name="delete" type="tns:deleteType" />
<xsd:element name="deleteResponse" type="tns:deleteResponseType" />
<xsd:element name="list" type="tns:listType" />
<xsd:element name="listResponse" type="tns:listResponseType" />
<xsd:element name="login" type="tns:loginType" />
<xsd:element name="loginResponse" type="tns:loginResponseType" />
<!-- 增加异常处理 -->
<xsd:element name="UserException" type="tns:UserException"></xsd:element>
<xsd:complexType name="addType">
<xsd:sequence>
<xsd:element name="user" type="tns:user" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="addResponseType">
<xsd:sequence />
</xsd:complexType>
<xsd:complexType name="deleteType">
<xsd:sequence>
<xsd:element name="username" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="deleteResponseType">
<xsd:sequence />
</xsd:complexType>
<xsd:complexType name="listType">
<xsd:sequence />
</xsd:complexType>
<xsd:complexType name="listResponseType">
<xsd:sequence minOccurs="1" maxOccurs="unbounded">
<xsd:element name="user" type="tns:user" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="loginType">
<xsd:sequence>
<xsd:element name="username" type="xsd:string" />
<xsd:element name="passwrod" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="loginResponseType">
<xsd:sequence>
<xsd:element name="user" type="tns:user" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="user">
<xsd:sequence>
<xsd:element name="username" type="xsd:string" />
<xsd:element name="nickname" type="xsd:string" />
<xsd:element name="passwrod" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<!-- 增加异常处理 -->
<xsd:complexType name="UserException">
<xsd:sequence>
<xsd:element name="message" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
</wsdl:types>
<!-- 增加异常处理 -->
<wsdl:message name="UserException">
<wsdl:part element="tns:UserException" name="fault" />
</wsdl:message>
<wsdl:message name="add">
<wsdl:part element="tns:add" name="parameters" />
</wsdl:message>
<wsdl:message name="addResponse">
<wsdl:part element="tns:addResponse" name="parameters" />
</wsdl:message>
<wsdl:message name="delete">
<wsdl:part element="tns:delete" name="parameters" />
</wsdl:message>
<wsdl:message name="deleteResponse">
<wsdl:part element="tns:deleteResponse" name="parameters" />
</wsdl:message>
<wsdl:message name="login">
<wsdl:part element="tns:login" name="parameters" />
</wsdl:message>
<wsdl:message name="loginResponse">
<wsdl:part element="tns:loginResponse" name="parameters" />
</wsdl:message>
<wsdl:message name="list">
<wsdl:part element="tns:list" name="parameters" />
</wsdl:message>
<wsdl:message name="listResponse">
<wsdl:part element="tns:listResponse" name="parameters" />
</wsdl:message>
<wsdl:portType name="IMyService">
<wsdl:operation name="add">
<wsdl:input message="tns:add" />
<wsdl:output message="tns:addResponse" />
<!-- 增加异常处理 -->
<wsdl:fault name="UserException" message="tns:UserException"></wsdl:fault>
</wsdl:operation>
<wsdl:operation name="delete">
<wsdl:input message="tns:delete" />
<wsdl:output message="tns:deleteResponse" />
</wsdl:operation>
<wsdl:operation name="login">
<wsdl:input message="tns:login" />
<wsdl:output message="tns:loginResponse" />
<!-- 增加异常处理 -->
<wsdl:fault name="UserException" message="tns:UserException"></wsdl:fault>
</wsdl:operation>
<wsdl:operation name="list">
<wsdl:input message="tns:list" />
<wsdl:output message="tns:listResponse" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="userServiceSOAP" type="tns:IMyService">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="add">
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
<!-- 增加异常处理 -->
<wsdl:fault name="UserException">
<soap:fault name="UserException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="delete">
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="login">
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
<!-- 增加异常处理 -->
<wsdl:fault name="UserException">
<soap:fault name="UserException" use="literal" />
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="list">
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="UserService">
<wsdl:port binding="tns:userServiceSOAP" name="UserServicePort">
<soap:address location="http://localhost:8800/us" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
使用wsImport导出Java文件,所有拷贝到客户端,IMyService.java拷贝到服务端。
修改IMyService:
删除:
修改:
为:
为实现类增加异常扑获处理:
public void add(User user) throws UserException {
if (users.containsKey(user.getUsername()))
throw new UserException("用户名已经被占用了");
users.put(user.getUsername(), user);
}
public User login(String username, String password) throws UserException {
if (!users.containsKey(username))
throw new UserException("用户不存在");
User user = users.get(username);
if (!password.equals(user.getPassword()))
throw new UserException("用户密码不正确!");
return user;
}
服务实现类增加异常:
@Override
public void add(User user) throws UserException{
userdao.add(user);
}
@Override
public User login(String username, String passwrod) throws UserException{
return userdao.login(username, passwrod);
}
客户端测试方法:
@Test
public void testAdd(){
try {
User user = new User();
user.setUsername("lisi");
user.setNickname("李四");
user.setPasswrod("123");
service.add(user);
} catch (UserException_Exception e) {
System.out.println(e.getMessage());
}
}
@Test
public void testLogin(){
try {
System.out.println(service.login("fds", "78").getNickname());
} catch (UserException_Exception e) {
System.out.println(e.getMessage());
}
}
结果:
客户端控制台:
服务端控制台: