Soap资料.docx
- 文档编号:27464286
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:23
- 大小:26.93KB
Soap资料.docx
《Soap资料.docx》由会员分享,可在线阅读,更多相关《Soap资料.docx(23页珍藏版)》请在冰豆网上搜索。
Soap资料
Soap资料
1.1. SOAP基础
一、SOAP:
Simple Object Application Protocol。
WEB服务是通过标准的Web协议、以简单对象编程方式可以访问的一个应用程序组件。
大家所遵循的这种约定,就称之为SOAP。
标准制定者:
http:
//www.w3.org/2000/xp/Group/ , http:
//www.w3.org/TR/soap/
二、SOAP开发框架:
不同的技术提供商为SOAP提供有开发模式。
SUN为支持Web Service制定了JAX-RPC等。
听说:
J2EE1.4平台是围绕Web Service来构架的。
微软是如何支持的,我就不清楚了。
Apache开源组织为java语言编写SOAP程序,提供了一个既遵循SOAP又非常简单实用的工具库:
Axis(有支持java的,也有支持C++的) 。
详情见:
http:
//ws.apache.org/axis/
正因为有了这些开源工具类库,才让我们的编程世界变得如此简单!
!
!
三、SOAP消息结构
SOAP消息的传输建立在HTTP,SMTP和FTP之上。
HTTP是最外层的信封格式、SOAP是里面的信封格式、XML是信(SOAP)的表现形式。
在"之前的内容,跟一个普通的HTTP一样,"..."之间的内容是附加的,这些内容是以XML格式来表现的。
看到这些标签很可怕吧?
在HTTP编程中,如果有sun提供的servlet包,我们编写起来,根本不管这些信息是如何组成的;同样,在SOAP编程中,如果有Axis包,我们也不用管这些信息是如何组成的。
这些知识知道就可以了,如果有兴趣可以去分析开源项目Axis对于SOAP是如何包装的。
在JBUILDER中提供了TCP MONITOR工具进行数据分析,在TOOLS菜单下,可以自己去琢磨。
下面开始STEP BY STEP 进行SOAP实战开发。
1.2. 用JBUILDER开发
工具:
JBUILDER 9
任务:
开发一个简单的SOAP服务端对客户端调用实例。
创建服务端:
STEP1:
新建一个空项目,取名为JAVASOAP
STEP2:
编写服务端要实现的工作,必须有一个普通的JAVABEAN文件为要作为服务发布的接口文件。
在例子中是CHello.JAVA,实现一个简单的操作SayHi,和普通JAVABEAN的写法一样。
STEP3:
将这个接口文件打包为WEB服务,并且生成WSDL接口文件。
这一步就是不同了,下面有图示:
选FILE->NEW菜单,弹出新建对话筐,选择Web Service页的Export as a Web Service标签
点击OK后弹出一个向导来带领你生成SOAP服务和WSDL文件。
这是要求生成一个提供SOAP服务的WEB应用程序,可以惦记NEW按钮,生产这个WEB服务:
我这里给这个SOAP服务取名叫SOAPSVR。
填写完成后点击OK按钮。
又回到开始的向导
点击FINISH按钮:
这个向导就是要你选择是哪个类作为接口类提供出去,我们选CHello,然后按照NEXT按钮一路点下去就了,最后你会看到硬盘一通乱转,生成对外接口的CHello.WSDL文件和一个包generated。
CHello.java类就是我们实现的remote远程接口,和RMI、EJB是一个套路。
CHelloService.java类是实现RPC服务器的类。
CHelloServiceLocator.java类是在本地实现和RPC服务器通讯的类,这里面定义了通讯参数,你可以看看,但是最好不要修改。
CHelloServiceTestCase.java类是测试的例子,要先绑定再通过绑定的接口调用接口处理方法,太麻烦了,不要学,下面给一个更简单的方法。
CHelloSoapBindingStub.java类是那个用来绑定的接口类,不用。
得到这一堆东西的时候你的服务就这样做完了。
启动这个WEB服务就可以了对外提供SOAP服务了。
创建客户端
按照向导点击下一步步到结束就可以生成一大堆接口类和方法了。
你可看到这里有6个类,是刚才自动生成的,很熟悉吧,这和服务端生成的generated包里面的文件相比就是多了一个CHelloSoapBindingImpl.JAVA文件,这个文件中定义的接口就是我们要用到的,但是不能实际生成这个类的对象来使用,他只是实现了CHello接口,好象没什么用,先不管了。
如何使用这个接口:
先生成服务实例
CHelloServiceLocator hellolocate = new CHelloServiceLocator();
然后通过服务实例获得接口对象
CHello hello = hellolocate.getCHello();
现在可以直接调用这个接口的方法了,就象使用本地的对象的方法一样。
我推荐的方法应该是写起来最简单的,至于是不是最有效率最好的我就不知道了,哪位高手可以分析测试一下。
System.out.println(hello.sayHi("钟林大"));
实际上这个调用过程是和SOAP服务进行了一次通讯,服务器也为你做了一次计算。
客户端和服务器间的通讯是XML包,不过都被框架屏蔽了,这个框架是我们在前面创建SOAP服务时候缺省选的AXIS。
AXIS是一个开源的SOAP框架,值得学习,现在我们只用就好了
现在启动SOAP服务,运行客户端:
是不是很简单?
1.3. 用DELPHI开发
用DELPHI开发SOAP服务比较土,因为要写CGI服务,然后生成对外的WSDL接口文件,DELPHI写WEB服务当然不如JAVA了,所以不推荐,但是我给了一个例子,就不多说了。
用DELPHI写客户端是最好的,可以写应用程序直接连到WEB服务上,最直接的体现网络即服务的思想。
用DELPHI写客户端
Step1:
选择file->new->other,弹出新建对话框,选择WebServices页:
选择WSDL Importer,点击OK按钮,弹出导入WSDL文件的向导。
这里我选了前面用JAVA写的SOAP服务接口文档CHello.wsdl,然后一路NEXT按下去就会生成CHello1.pas的接口实现文件。
这个接口使用起来也是很简单,先创建一个THTTPRIO 对象:
HTTPRIO1:
THTTPRIO;
然后就可以直接使用CHello提供的接口方法了:
showmessage((HTTPRIO1 as CHello).SayHi('钟林大'));
结果是:
当然这个时候需要将SOAP服务启动才可以呀。
同样,这里面你的一次点击被提交到了用JAVA写的SOAP服务,然后返回了一个中文信息。
完美实现了DELPHI应用程序和WEB服务之间的交互,同样,这中间是怎么通讯的被框架隐藏了。
1.4. 跨语言跨平台开发
你还可以用ASP.net开发SOAP服务端,用C#开发客户端,通过同一个WSDL接口文件进行通讯。
SOAP不依赖任何语言和平台,而且他的开源框架保证了开发的简单和有效,应用前景很好,特别是电子商务,基于互联网的WEB服务,在国外很多公司都用来做对外发布信息的接口。
////////////////////////////////////////////////////////////////////////////////////
使用SOAP开发JavaWeb服务详解
2008-07-1409:
56
本文的预定读者首先要对j2ee有所了解,熟悉XML,tomcat等基本内容,本文主要是简单介绍一下web服务的基本内容,怎样在Javaweb开发中构建SOAP服务:
一、SOAP(SimpleObjectAccessProtocol)简单对象访问协议
要了解SOAP,首先就需要了解分布式计算的由来,随着下一代的分布式计算体系web服务的出现,SOAP成为了创建和调用通过网络发布的应用程序的实际通信标准。
SOAP类似传统的二进制协议IIOP(CORBA)和JRMP(RMI),但它不采用二进制数据表示法,而是采用使用XML的,基于文本的数据表示法。
通过XML表示法,SOAP定义了一种小型有线连接协议和编码格式,以表示数据类型、编程语言和数据库,还可以使用各种Internet标准协议作为其消息传输工具,还可以提供表示RPC和文档驱动的消息交换等通信模型的约定。
请注重,W3C正致力于SOAP的研究,http:
//www.w3c.org/2000/XP/Group/,并得到了主流供给商的积极响应,以便对于基于XML的协议相关的重要任务达成共识,并定义其要害要求和使用场景。
SOAP1.2的基本规范定义了以下基本内容:
1)用于将XML文档表示为结构化SOAP消息的语法和语义
2)在SOAP消息中表示数据的编码标准
3)用于交换SOAP消息的通信模型
4)SOAP传输等底层协议的绑定
SOAP消息主要包括了信封头,消息头,主体,附件几部分
一个简单的SOAP消息表示:
POST /StudentInfo HTTP/1.1
Host:
anthropology.cun.edu
Content-Type:
text/xml;charset="utf-8"
Content-Length:
640
SOAPAction:
"GetStudentInfo"
Envelopxmlns: SOAP-ENV="http: //www.w3c.org/2001/06/soap-envelope" xmlns: xsi="http: //www.w3c.org/2001/XMLSchema-instance" xmlns: xsd="http: //www.w3c.org/2001/XMLSchema" SOAP-ENV: encodingStyle="http: //www.w3c.org/2001/06/soap-encoding"> Header> mailxmlns: person="http: //www.cun.edu/Header">xyz@cun.edu Header> Body> GetStudentInfo xmlns: m="http: //www.cun.edu/jws.student.studentInfo"> type='xsd: string'> Wangwenyin GetStudentInfo> Body>
Envelop>
以上是1.2版本命名空间,1.1的命名空间SOAPENVELOPE:
http:
//schemas.xmlsoap.org/soap/envelop/,SOAPENCODING:
http:
//schemas.xmlsoap.org/soap/encoding/
关于SOAP编码规范请参阅www.w3c.org/TR/xmlschema-2/定义的编码值,其他的一些规范可以上www.w3c.org上具体查看。
二、以下从实际例子来学习
这里我使用的是Apache的一个子项目Axis的具体例子,便于深入了解soap的运行:
1)下载Axis的相关内容http:
//ws.apache.org/axis/:
2)建立一个实例程序(遵守j2ee的web程序规范),如(WebServiceTest目录)
把axis中lib文件夹的内容拷到你的WebServiceTest/WEB-INF/lib下,同时上网下载xerces(下载地点:
http:
//xml.apache.org/xerces-j/)解释器的包文件xerces.jar,也拷到WebServiceTest/WEB-INF/lib文件夹下,(若要配置log4j,请把属性文件log4j.properties拷到WebServiceTest/WEB-INF/classes文件夹下)
3)修改应用程序WebServiceTest/WEB-INF中的web.xml文件:
主要servlet设置如下
org.apache.axis.transport.http.AdminServlet
你现在可以在网址里输入http:
//localhost/WebServiceTest/servlet/TestServlet看到了吗?
Axis是使用axis.jar包里的org.apache.axis.transport.http.AxisServlet对应用程序进行处理的,基本配置就讲到这里。
三、接着我们来说Axis中的内核
1)不使用Tomcat引擎运行Axis。
先建立一个脚步文件,对环境变量classpath进行设置要把lib下的那些包文件的路径全都包括进去,运行:
java org.apache.axis.transport.http.SimpleAxisServer
2)内部服务处理程序是org.apache.axis.providers.java.RPCProvider,标志出服务所需的方法,然后提供从SOAP请求消息组成部分的参数。
3)Axis的应用程序端治理功能:
java org.apache.axis.client.AdminClient就会列出参数,可供你选择。
我们的例子是:
java org.apache.axis.client.AdminClient -lhttp:
//localhost/WebserviceTest/servlet/TestServlet list就会显示出服务列表,返回的是xml文件
4)wsdl2java应用程序可以把wsdl文件创建基于java的程序,如占位程序等
java org.apache.axis.wsdl.WSDL2java
Axis的基本内容说到这里
四、具体例子
1)编写逻辑程序,简单如:
SoapTest.java
publicclassSoapTest{
publicStringgetStr(Stringname){
return"Hello,"+name;
}
}
2)部署服务,编写wsdd文件SoapTest_deploy.wsdd:
//xml.apache.org/axis/wsdd/" xmlns: java="http: //xml.apache.org/axis/wsdd/providers/java" xmlns: xsd="http: //www.w3.org/2000/10/XMLSchema" xmlns: xsi="http: //www.w3.org/2000/10/XMLSchema-instance"> RPC"> 其中className参数是你的想部署的类名(全名),allowedMethods是调用的服务的方法,假如有多个方法的话可以用空格分开(如: 好了现在预备部署了,确保环境路径classpath设置正确,运行: java org.apache.axis.client.AdminClient -l http: //localhost/WebserviceTest/servlet/TestServlet SoapTest_deploy.wsdd (这里不懂的话,请参考以上的说明) ok,呵呵,至此,我们已经完成了一个web服务的部署: 测试http: //localhost/WebServiceTest/servlet/TestServlet 看里面是否多了一个选择SoapTest服务? 假如不想要服务了那重新编写一个wsdd文件,内容改为: //xml.apache.org/axis/wsdd/" xmlns: java="http: //xml.apache.org/axis/wsdd/providers/java" xmlns: xsd="http: //www.w3.org/2000/10/XMLSchema" xmlns: xsi="http: //www.w3.org/2000/10/XMLSchema-instance"> 和上面一样,对比一下就ok了。 五、客户端测试: 客户端我们也可以使用java来进行测试,网上也有资料的,你可以去学习,很简单的。 现在为了体现web服务的魅力,我用.NET平台来测试吧,客户端使用c#编写(先要安装.netframeworksdk): //////////////////////////////////////////////////////////////////////////////////////////////////////// net端代码如下: usingSystem; usingSystem.Collections; usingSystem.ComponentModel; usingSystem.Data
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Soap 资料