`

soap中自定义异常处理

 
阅读更多

创建服务器端

1.创建一个接口

IMyService.java

package com.test.service;

import java.util.List;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService(targetNamespace = "http://www.webservice.com")
public interface IMyService {
	// 异常处理
	@WebResult(name = "user")
	public User login(@WebParam(name = "username") String username, @WebParam(name = "password") String password) throws UserException;
}

 

2.创建实现接口的类

MyServiceImpl.java

package com.test.service;

import java.util.ArrayList;
import java.util.List;

import javax.jws.WebService;

@WebService(endpointInterface = "com.test.service.IMyService", targetNamespace = "http://www.webservice.com")
public class MyServiceImpl implements IMyService {

	private static List<User> users = new ArrayList<User>();

	public MyServiceImpl() {
		users.add(new User(1, "admin", "管理员", "111111"));
	}

	@Override
	public User login(String username, String password) throws UserException {
		for (User user : users) {
			if (username.equals(user.getUsername()) && password.equals(user.getPassword())) {
				return user;
			}
		}
		throw new UserException("用户名或密码不正确!");
	}
}

 

3.自定义异常类

UserException.java

package com.test.service;

public class UserException extends Exception {

	public UserException() {
		super();
	}

	public UserException(String message, Throwable cause) {
		super(message, cause);
	}

	public UserException(String message) {
		super(message);
	}

	public UserException(Throwable cause) {
		super(cause);
	}

}

 

4.开启服务

MyServer.java

package com.test.service;

import javax.xml.ws.Endpoint;

public class MyServer {
	public static void main(String[] args) {
		String address = "http://localhost:9999/server";
		// 发布服务的实现类
		Endpoint.publish(address, new MyServiceImpl());
	}
}

 

5.测试类TestSoap.java

// 异常处理
@Test
public void test05() {
	try {
		// 创建服务
		URL url = new URL("http://localhost:9999/server");
		QName qname = new QName("http://www.webservice.com", "MyServiceImplService");
		Service service = Service.create(url, qname);

		// 创建Dispatch
		Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName("http://www.webservice.com", "MyServiceImplPort"), SOAPMessage.class, Service.Mode.MESSAGE);

		// 创建SOAP的body消息
		SOAPMessage message = MessageFactory.newInstance().createMessage();
		SOAPBody body = message.getSOAPPart().getEnvelope().getBody();

		// 根据QName创建相应的节点
		QName ename = new QName("http://www.webservice.com", "login", "ns");
		SOAPBodyElement element = body.addBodyElement(ename);
		element.addChildElement("username").setValue("cdxs");
		element.addChildElement("password").setValue("123");
		message.writeTo(System.out);
		System.out.println("\n invoking...");

		// 通过dispatch传递消息,返回响应消息
		SOAPMessage response = dispatch.invoke(message);
		response.writeTo(System.out);
		System.out.println();
	} catch (SOAPException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	} catch (SOAPFaultException e) {
		System.out.println(e.getMessage());
	}
}

 

运行结果:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><ns:login xmlns:ns="http://www.webservice.com"><username>cdxs</username><password>123</password></ns:login></SOAP-ENV:Body></SOAP-ENV:Envelope>

 invoking...

用户名或密码不正确!

 

分享到:
评论

相关推荐

    在基于WCF的应用程序中处理SOAP异常

    使用自定义异常处理程序组件

    Android代码-OkHttp3

    Application中自定义全局配置/增加系统默认配置 支持文件和图片上传/批量上传,支持同步/异步上传,支持进度提示 支持文件下载/批量下载,支持同步/异步下载,支持进度提示 支持文件断点下载,独立下载的模块摒弃了...

    cxf-spring-boot-starter:由Spring Boot和Apache CXF支持的企业和生产就绪的SOAP Web服务

    定制您自己的自定义SOAP错误,这些错误符合XML模式内部定义的异常 SOAP测试框架:使用XmlUtils可以简化JAX-B类处理工作,并使用SOAP Raw Client可以针对端点测试格式错误的XML 与JDK 8、9和11ff一起使用 文献资料 ...

    [ASP.NET.AJAX编程参考手册(涵盖ASP.NET.3.5及2.0)].(美)霍斯拉维.扫描版.pdf

    3.2.1 实现自定义异常类型的流程 3.2.2 使用流程 3.2.3 clickCallback 3.2.4 validateInput 3.3 小结 第4章 JavaScript面向对象编程和类型反射扩展 4.1 JavaScript函数 4.2 JavaScript类 4.3 Type 4.4 registerClass...

    Visual C#2010 从入门到精通(Visual.C#.2010.Step.By.Step).完整去密码锁定版 I部分

    27.4.2 使用aggregateexception类处理任务异常 586 27.4.3 为canceled和faulted任务使用延续任务 589 第27章快速参考 590 第28章 执行并行数据访问 593 28.1 用plinq并行进行声明式 数据访问 593 28.1.1 用...

    asp.net知识库

    利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文...

    java图书进销存系统源码-OkHttp3:基于OkHttp3封装的网络请求库——致力于最简洁、功能最全、可灵活扩展的网络操作API

    Application中自定义全局配置/增加系统默认配置 支持文件和图片上传/批量上传,支持同步/异步上传,支持进度提示 支持文件下载/批量下载,支持同步/异步下载,支持进度提示 支持文件断点下载,独立下载的模块摒弃了...

    MoAspEnginer MVC框架 v3.1.1.419.zip

    异常统一管理,可设置相应的ERROR_REPORTING决定显示哪些异常; 只保留入口文件和核心文件,其他模块动态加载(为了安全,可以将除入口文件和核心文件以外的所有文件放在非web目录); 常用模块(Model__,cookie,...

    Android集成主流优秀第三方组件框架

    SOAP协议通信工具类(ToolSOAP.java),基于异步回调请求WebService接口 Sqlite数据库操作工具类(ToolDatabase.java),获取DAO、创建表、删除表等API 提示信息对话框工具类(ToolAlert.java),已集成泡泡、土司、...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.10. 处理异常 13.11. 惯例优先原则(convention over configuration) 13.11.1. 对控制器的支持: ControllerClassNameHandlerMapping 13.11.2. 对模型的支持:ModelMap (ModelAndView) 13.11.3. 对视图的支持: ...

    Programming C#(第4版)(中文版)part1

    第11章 异常处理 263 抛出和捕获异常 264 Exception对象 274 自定义异常 278 重新抛出异常 280 第12章 委托与事件 286 委托 287 多重委托 298 事件 302 使用匿名方法 315 从多重委托获取值 316 第2部分 C#编程 325 ...

    Programming C#(第4版)(中文版)part3

    第11章 异常处理 263 抛出和捕获异常 264 Exception对象 274 自定义异常 278 重新抛出异常 280 第12章 委托与事件 286 委托 287 多重委托 298 事件 302 使用匿名方法 315 从多重委托获取值 316 第2部分 C#编程 325 ...

    Programming C#(第4版)(中文版)part2

    第11章 异常处理 263 抛出和捕获异常 264 Exception对象 274 自定义异常 278 重新抛出异常 280 第12章 委托与事件 286 委托 287 多重委托 298 事件 302 使用匿名方法 315 从多重委托获取值 316 第2部分 C#编程 325 ...

    Spring攻略(第二版 中文高清版).part2

    5.6 处理视图中的安全性 196 5.6.1 问题 196 5.6.2 解决方案 196 5.6.3 工作原理 196 5.7 处理领域对象安全性 198 5.7.1 问题 198 5.7.2 解决方案 198 5.7.3 工作原理 199 5.8 小结 208 第6章 ...

Global site tag (gtag.js) - Google Analytics