`

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...

用户名或密码不正确!

 

分享到:
评论

相关推荐

    soap中Handler的处理

    在SOAP消息处理中,Handler扮演着至关重要的角色。它允许开发者插入自定义逻辑到SOAP消息的生命周期中,从而在消息被发送前或接收后进行拦截和修改。SOAP Handler是SOAP绑定层的一部分,它们遵循SOAP Handler链模型...

    自定义SOAP消息详细解释

    自定义SOAP消息主要涉及到在使用ASP.NET创建的XML Web服务中,如何控制SOAP消息的格式。SOAP(简单对象访问协议)是一种轻量级的、基于XML的协议,用于在Web服务中交换结构化和类型化的信息。SOAP消息通常包含一个...

    winform 自定义asmx处理程序源码

    - 分析源码可以帮助理解如何在WinForm中封装和调用ASMX服务,以及如何处理响应和异常。 5. 学习价值: - 了解如何在WinForm应用中与Web服务交互,对于开发混合型应用(既有桌面部分又有网络部分)非常有用。 - ...

    CXF处理不规则SOAP message(转)

    当遇到不规则SOAP消息时,开发者可能需要深入理解CXF的工作原理,包括其消息模型、绑定层以及异常处理机制,以便正确地捕获和处理问题。 描述中提到的博客链接(https://huiseyiyu.iteye.com/blog/1172161)可能是...

    java调用soap接口案例

    7. **自定义修改**:案例中提到可以根据个人需求进行修改,这可能包括改变请求参数、处理响应逻辑或者调整错误处理机制。例如,我们可以增加对异常的捕获和处理,优化日志记录,或者将结果存储到数据库或展示给用户...

    使用try-catch-finally处理异常

    压缩包中的"PB_ExceptionExc"可能是某个关于异常处理的示例项目或代码文件,它可能包含了具体的异常处理示例,比如如何捕获并处理特定的异常,或者如何在`finally`块中进行资源释放。 总的来说,正确地使用`try-...

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

    综上所述,处理SOAP异常在WCF应用中是一个关键的实践,需要结合自定义异常处理、错误日志记录和有效的服务配置来实现。通过这些策略,我们可以提高服务的健壮性和安全性,为用户提供稳定可靠的体验。

    wcf之契约和异常处理

    本文将深入探讨WCF中的契约和异常处理机制,这对于理解和开发高效、健壮的WCF服务至关重要。 ### WCF契约 契约是WCF服务的核心组成部分,定义了服务可以提供的操作及其输入、输出参数。契约通过接口定义,通常使用...

    WCF错误异常demo

    3. **配置服务行为**:为了让WCF知道如何处理自定义异常,我们需要在服务的行为配置中指定错误合同。这可以通过Web.config或代码配置实现。 ```xml ``` 4. **创建错误合同**:定义一个接口,该接口...

    java+soap+webservice 调用模拟

    3. **Java中的SOAP调用**:在Java中,我们通常使用JAX-WS(Java API for XML Web Services)框架来处理SOAP通信。JAX-WS提供了多种工具,如wsimport,可以从WSDL文件生成客户端代理类。这些代理类提供了调用Web服务...

    soapclient

    在实际应用中,你可能需要处理SOAP头信息。`SoapClient`支持自定义SOAP头,这可以通过`__setSoapHeaders()`方法实现。例如,如果服务需要认证,你可以创建一个`SoapHeader`对象并传递给`__setSoapHeaders()`: ```...

    PHP SOAP DEMO

    PHP的`SoapFault`异常可以帮助我们捕获和处理这些错误。 5. 源码和工具: 提供的`soapSample`可能包含了一个完整的SOAP服务DEMO,包括服务端和客户端的代码。通过分析和运行这些示例,你可以更深入地理解PHP如何与...

    axsi2 发送 SOAP报文

    - **MyCallBack.java**: 这个文件可能是一个自定义的回调处理程序类,用于处理服务响应,例如解析返回的SOAP消息,进行业务逻辑处理,或者处理异常情况。 3. **AXSI2安全特性**: AXSI2提供了多种安全机制,包括...

    SOAP消息和WSDL

    6. **类型(Types)**:定义了消息中使用的数据类型,可以是内置的XML类型或自定义的复杂类型。 在实际开发中,通常会为每个Web服务编写一个WSDL文档,然后通过工具生成服务的客户端代码,简化调用过程。例如,对于...

    java发送SOAP报文

    Java发送SOAP报文是Web服务通信中的一个常见任务,它涉及到使用XML格式的数据进行网络通信。...通过阅读和理解这两个文件,开发者可以学习如何在Java应用中构建自定义的SOAP客户端,从而实现与SOAP Web服务的有效交互。

    构建WCF面向服务的应用程序系列课程(4):异常与错误处理

    SOAP Faults在WCF异常处理中扮演着核心角色。无论是基于SOAP 1.1还是SOAP 1.2的标准,它们都是用于封装和传输错误信息的重要机制。每个SOAP Fault包含了一系列的元素,如`faultcode`、`faultstring`、`faultactor`...

    CXF SOAP应用实例

    CXF允许自定义SOAP消息处理器,实现特定的逻辑,如添加自定义头信息、处理异常等。这可以通过实现MessageObserver接口来完成。 6. **安全性与认证** CXF支持多种安全模型,包括基本认证、digest认证、SSL/TLS、WS...

Global site tag (gtag.js) - Google Analytics