1、webService 手写客户端代码
相比平台自动生成的客户端代码简单很多,只需要绑定wsdl的URL地址
//绑定URL,TestWebService:项目名称,Test:services.xml中标签<name>的值
String serviceURL="http://localhost:8080/TestWebService/services/Test";
//ITest.class是服务端的接口类
Service serviceModel=new ObjectServiceFactory().create(ITest.class,null,serviceURL,null);
//创建工厂实例
XFireProxyFactory serviceFactory=new XFireProxyFactory();
//ITest是服务端的接口类
ITest test=(ITest)serviceFactory.create(serviceModel, serviceURL);
//调用服务端方法example()
test.example("Hello world");
2、身份验证
服务端可以新建一个类来写验证,也可写在接口ITest的实现类TestImpl中;客户端写相应的验证方法,但均要继承AbstractHandler类而且需要配置services.xml
服务端:
public class TestImpl extends AbstractHandler implements ITest {
/**
* 身份验证
*/
public void invoke(MessageContext ctx) throws Exception {
// TODO Auto-generated method stub
Element header = ctx.getInMessage().getHeader();
if (header == null) {
throw new XFireRuntimeException("Missing SOAP Header");
}
Element token = ctx.getInMessage().getHeader().getChild("AuthenticationToken");
if (token == null) {
throw new XFireFault("----------请求必须包含身份验证信息!----------", XFireFault.SENDER);
}
// 获取客户端传递的参数Username和Password
String username = token.getChild("Username").getValue();
String password = token.getChild("Password").getValue();
//验证
if(username.equals("root") && password.equals("123")){
System.out.println("验证通过");
}
else{
System.out.println("验证未通过");
throw new XFireFault("非法的用户名和密码", XFireFault.SENDER);
}
}
}
客户端:
public class TestAbstractHandler extends AbstractHandler{
private String username;
private String password;
public TestAbstractHandler(String username,String password){
this.username=username;
this.password=password;
}
public void invoke(MessageContext context) throws Exception {
// TODO Auto-generated method stub
//为SOAP Header构造验证信息
Element el = new Element("header");
context.getOutMessage().setHeader(el);
Element auth = new Element("AuthenticationToken");
//传递Username
Element username_el = new Element("Username");
username_el.addContent(username);
//传递Password
Element password_el = new Element("Password");
password_el.addContent(password);
auth.addContent(username_el);
auth.addContent(password_el);
el.addContent(auth);
}
getters..setters....
}
services.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>Test</name>
<!-- 服务端接口类-->
<serviceClass>cn.rhui.webservice.ITest</serviceClass>
<!-- 实现类-->
<implementationClass>
cn.rhui.webservice.TestImpl
</implementationClass>
<!-- 验证配置-->
<inHandlers>
<!-- 验证方法所在类-->
<handler handlerClass="cn.rhui.webservice.TestImpl"></handler>
</inHandlers>
<style>wrapped</style>
<use>literal</use>
<scope>application</scope>
</service></beans>
3、以xml格式传递参数并身份验证
参数:
<?xml version="1.0" encoding="utf-8"?>
<Login>
<Name>admin</Name>
<Password>123</Password>
</Login>
服务端:
/**
* 接收xml格式参数
*/
public boolean strParseXML(String str){
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
String name=null;
String password=null;
try{
builder=factory.newDocumentBuilder();
//序列化参数
Document doc=builder.parse(new ByteArrayInputStream(str.getBytes()));
//获取用户名
if(doc.getElementsByTagName("Name").item(0).getFirstChild()!=null){
name=doc.getElementsByTagName("Name").item(0).getFirstChild().getNodeValue();
}
//获取密码
if(doc.getElementsByTagName("Password").item(0).getFirstChild()!=null){
password=doc.getElementsByTagName("Password").item(0).getFirstChild().getNodeValue();
}
if(name.equals("admin")&&password.equals("123")){
System.out.println("欢迎"+name+",密码为:"+password);
return true;
}
} catch(Exception e) {
System.out.println("非法用户名和密码!");
e.printStackTrace();
}
return false;
}
客户端main方法:
String xstr="<?xml version='1.0' encoding='utf-8'?>\n<Login>\n<Name>admin</Name>\n<Password>123</Password>\n</Login>";
boolean flag=test.strParseXML(xstr);
if(flag){
System.out.println("xml传参且为合法用户");
}
4、传递object对象参数
服务端建一个对象类:
public class userinfo {
private String userName;
private String sex;
private int age;
getter...setter...
}
客户端main方法:
//传递对象
userinfo user=new userinfo();
user.setUserName("张三");
user.setSex("男");
user.setAge(20);
System.out.println("用户信息:"+test.example(user).getUserName()+"...");
5、远程访问服务端
只需知道服务端访问地址:http://IP:8080/TestWebService/services/Test?wsdl写相应的客户端代码即可
6、在myEclipse中有一个webService专属的浏览器Web Services Explorer,可看到soap通信的源文件及详细信息
分享到:
相关推荐
在本篇WebService学习笔记中,我们将探讨几个关键的概念和技术,包括SOAP协议、JAX-WS、WSDL文档以及一些常用的Web服务框架。 首先,SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在分布式环境...
【WebService学习笔记0001】 在IT领域,WebService是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的互操作性技术,它允许不同系统间的应用程序通过网络进行通信。本学习笔记将围绕WebService的核心概念、工作原理...
### WebService 学习笔记详解 #### 一、实验环境搭建与配置 在开始Web Service的学习之前,首先需要搭建一个适合开发的环境。本实验基于以下配置: - 操作系统:Windows 2000 (Win2k) - JDK版本:1.6 - Java EE...
在本学习笔记中,主要介绍了使用Apache Axis2框架来开发和测试Web Service的过程。Apache Axis2是Apache SOAP栈的一个实现,提供了简单且高效的Web Service开发工具。 首先,开发者需要在Eclipse集成开发环境中搭建...
在本篇尚硅谷的学习笔记中,主要涉及了Web Service的基础概念、Schema约束、HTTP协议以及相关面试问题。 1. Schema约束: - Schema是XML Schema Document的缩写,它是一种XML格式,用于定义其他XML文档的结构和...
Web Service是一种基于开放标准的技术,允许不同的应用程序之间通过互联网交换数据,实现跨平台、跨语言的互操作性。它的核心理念是创建无需用户界面就能与其他应用交互的Web应用程序。例如,在金融行业中,一个股票...
【Web Service学习笔记——XFrie框架详解】 Web Service是一种通过网络进行通信的服务,它允许不同的应用程序之间进行数据交换,跨越了操作系统和编程语言的障碍。XFrie是一个轻量级、高性能的Java Web Service框架...
Web服务是一种基于互联网的软件应用接口,允许不同的应用程序之间进行数据交换,无需考虑它们所运行的操作系统或编程语言。... ...GET方法用于获取资源,所有参数都包含在URL中;POST方法用于提交数据,数据包含在请求体...
Web服务是一种基于互联网的技术,允许不同的应用程序之间进行数据交换,不受操作系统、编程语言或平台的限制。这种松耦合的特性使得Web服务成为跨企业、跨系统的集成解决方案。本篇文章将深入探讨Web服务的核心概念...
webservice学习笔记1DTD是为了校验XML 2语法 3 schema
【WebService学习】 WebService是一种基于互联网的、松散耦合的分布式计算模型,它允许不同的系统之间进行数据交换和业务交互。这项技术的核心是利用XML(可扩展标记语言)作为数据交换的标准格式,SOAP(简单对象...
1. "webservice学习笔记.docx":这可能是一份详细的学习指南,涵盖了Web服务的基本概念、JAX-WS的使用方法,以及案例的具体步骤。文档中可能会有理论解释、代码示例和调试技巧等内容。 2. "jaxwsServer":这部分可能...
WebService学习笔记 Web Service 是一种软件系统,为了支持跨网络的机器间相互操作交互而设计。它通常被定义为一组模块化的 API,它们可以通过网络进行调用,来执行远程系统的请求服务。在传统的程序编码中,存在...