创建服务器端
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消息的生命周期中,从而在消息被发送前或接收后进行拦截和修改。SOAP Handler是SOAP绑定层的一部分,它们遵循SOAP Handler链模型...
自定义SOAP消息主要涉及到在使用ASP.NET创建的XML Web服务中,如何控制SOAP消息的格式。SOAP(简单对象访问协议)是一种轻量级的、基于XML的协议,用于在Web服务中交换结构化和类型化的信息。SOAP消息通常包含一个...
- 分析源码可以帮助理解如何在WinForm中封装和调用ASMX服务,以及如何处理响应和异常。 5. 学习价值: - 了解如何在WinForm应用中与Web服务交互,对于开发混合型应用(既有桌面部分又有网络部分)非常有用。 - ...
当遇到不规则SOAP消息时,开发者可能需要深入理解CXF的工作原理,包括其消息模型、绑定层以及异常处理机制,以便正确地捕获和处理问题。 描述中提到的博客链接(https://huiseyiyu.iteye.com/blog/1172161)可能是...
7. **自定义修改**:案例中提到可以根据个人需求进行修改,这可能包括改变请求参数、处理响应逻辑或者调整错误处理机制。例如,我们可以增加对异常的捕获和处理,优化日志记录,或者将结果存储到数据库或展示给用户...
压缩包中的"PB_ExceptionExc"可能是某个关于异常处理的示例项目或代码文件,它可能包含了具体的异常处理示例,比如如何捕获并处理特定的异常,或者如何在`finally`块中进行资源释放。 总的来说,正确地使用`try-...
综上所述,处理SOAP异常在WCF应用中是一个关键的实践,需要结合自定义异常处理、错误日志记录和有效的服务配置来实现。通过这些策略,我们可以提高服务的健壮性和安全性,为用户提供稳定可靠的体验。
本文将深入探讨WCF中的契约和异常处理机制,这对于理解和开发高效、健壮的WCF服务至关重要。 ### WCF契约 契约是WCF服务的核心组成部分,定义了服务可以提供的操作及其输入、输出参数。契约通过接口定义,通常使用...
3. **配置服务行为**:为了让WCF知道如何处理自定义异常,我们需要在服务的行为配置中指定错误合同。这可以通过Web.config或代码配置实现。 ```xml ``` 4. **创建错误合同**:定义一个接口,该接口...
3. **Java中的SOAP调用**:在Java中,我们通常使用JAX-WS(Java API for XML Web Services)框架来处理SOAP通信。JAX-WS提供了多种工具,如wsimport,可以从WSDL文件生成客户端代理类。这些代理类提供了调用Web服务...
在实际应用中,你可能需要处理SOAP头信息。`SoapClient`支持自定义SOAP头,这可以通过`__setSoapHeaders()`方法实现。例如,如果服务需要认证,你可以创建一个`SoapHeader`对象并传递给`__setSoapHeaders()`: ```...
PHP的`SoapFault`异常可以帮助我们捕获和处理这些错误。 5. 源码和工具: 提供的`soapSample`可能包含了一个完整的SOAP服务DEMO,包括服务端和客户端的代码。通过分析和运行这些示例,你可以更深入地理解PHP如何与...
- **MyCallBack.java**: 这个文件可能是一个自定义的回调处理程序类,用于处理服务响应,例如解析返回的SOAP消息,进行业务逻辑处理,或者处理异常情况。 3. **AXSI2安全特性**: AXSI2提供了多种安全机制,包括...
6. **类型(Types)**:定义了消息中使用的数据类型,可以是内置的XML类型或自定义的复杂类型。 在实际开发中,通常会为每个Web服务编写一个WSDL文档,然后通过工具生成服务的客户端代码,简化调用过程。例如,对于...
Java发送SOAP报文是Web服务通信中的一个常见任务,它涉及到使用XML格式的数据进行网络通信。...通过阅读和理解这两个文件,开发者可以学习如何在Java应用中构建自定义的SOAP客户端,从而实现与SOAP Web服务的有效交互。
SOAP Faults在WCF异常处理中扮演着核心角色。无论是基于SOAP 1.1还是SOAP 1.2的标准,它们都是用于封装和传输错误信息的重要机制。每个SOAP Fault包含了一系列的元素,如`faultcode`、`faultstring`、`faultactor`...
CXF允许自定义SOAP消息处理器,实现特定的逻辑,如添加自定义头信息、处理异常等。这可以通过实现MessageObserver接口来完成。 6. **安全性与认证** CXF支持多种安全模型,包括基本认证、digest认证、SSL/TLS、WS...