王朝网络
分享
 
 
 

使用SOAP开发Java Web服务详解

王朝java/jsp·作者佚名  2008-05-31
宽屏版  字体: |||超大  

本文的预定读者首先要对j2ee有所了解,熟悉XML,tomcat等基本内容,本文主要是简单介绍一下web服务的基本内容,怎样在Java web开发中构建SOAP服务:

一、SOAP(Simple Object Access Protocol)简单对象访问协议

要了解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"

<SOAP-ENV:Envelop xmlns: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"

<SOAP-ENV:Header

<person:mail xmlns:person="http://www.cun.edu/Header"xyz@cun.edu

</SOAP-ENV:Header

<SOAP-ENV:Body

<m:GetStudentInfo xmlns:m="http://www.cun.edu/jws.student.studentInfo"

<student_name xsi:type='xsd:string'

Wang wen yin

</student

</m:GetStudentInfo

</SOAP-ENV:Body

</SOAP-ENV:Envelop

以上是1.2版本命名空间,1.1的命名空间 SOAP ENVELOPE:http://schemas.xmlsoap.org/soap/envelop/ ,SOAP ENCODING: 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设置如下

<servlet

<servlet-nameTestServlet</servlet-name

<servlet-classorg.apache.axis.transport.http.AxisServlet</servlet-class

</servlet

<servlet-mapping

<servlet-nameTestServlet</servlet-name

<url-pattern*.jws</url-pattern

</servlet-mapping

<servlet-mapping

<servlet-nameTestServlet</servlet-name

<url-pattern/servlet/TestServlet</url-pattern

</servlet-mapping

<servlet-mapping

<servlet-nameTestServlet</servlet-name

<url-pattern/services/*</url-pattern

</servlet-mapping

<servlet

<servlet-nameAdminServlet</servlet-name

<servlet-class

org.apache.axis.transport.http.AdminServlet

</servlet-class

<load-on-startup100</load-on-startup

</servlet

<servlet-mapping

<servlet-nameAdminServlet</servlet-name

<url-pattern/servlet/AdminServlet</url-pattern

</servlet-mapping

<mime-mapping

<extensionwsdl</extension

<mime-typetext/xml</mime-type

</mime-mapping

<mime-mapping

<extensionxsd</extension

<mime-typetext/xml</mime-type

</mime-mapping

你现在可以在网址里输入http://localhost/WebServiceTest/servlet/TestServlet 看到了吗?Axis是使用axis.jar包里的org.apache.axis.transport.http.AxisServlet对应用程序进行处理的,基本配置就讲到这里。

三、接着我们来说Axis中的内核

1)不使用Tomcat引擎运行Axis。

先建立一个脚步文件,对环境变量classpath进行设置要把lib下的那些包文件的路径全都包括进去,运行:javaorg.apache.axis.transport.http.SimpleAxisServer<port

2)内部服务处理程序是org.apache.axis.providers.java.RPCProvider,标志出服务所需的方法,然后提供从SOAP请求消息组成部分的参数。

3)Axis的应用程序端治理功能:

javaorg.apache.axis.client.AdminClient 就会列出参数,可供你选择。我们的例子是:javaorg.apache.axis.client.AdminClient-l http://localhost/WebserviceTest/servlet/TestServletlist 就会显示出服务列表,返回的是xml文件

4)wsdl2java应用程序可以把wsdl文件创建基于java的程序,如占位程序等

javaorg.apache.axis.wsdl.WSDL2java<url

Axis的基本内容说到这里

四、具体例子

1)编写逻辑程序,简单如:SoapTest.java

public class SoapTest{

public String getStr(String name){

return "Hello,"+name;

}

}

2) 部署服务,编写wsdd文件SoapTest_deploy.wsdd:

<deployment name="SimapleTest" xmlns="http://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"

<service name="SoapTest" provider="java:RPC"

<parameter name="className" value="SoapTest"/

<parameter name="allowedMethods" value="getStr"/

</service

</deployment

其中className参数是你的想部署的类名(全名),allowedMethods是调用的服务的方法,假如有多个方法的话可以用空格分开(如: <parameter name="allowedMethods" value="getStrgetMoney"/),当用*的时候表示全部。

好了现在预备部署了,确保环境路径classpath设置正确,运行:

javaorg.apache.axis.client.AdminClient-lhttp://localhost/WebserviceTest/servlet/TestServletSoapTest_deploy.wsdd

(这里不懂的话,请参考以上的说明)

ok,呵呵,至此,我们已经完成了一个web服务的部署:测试http://localhost/WebServiceTest/servlet/TestServlet看里面是否多了一个选择SoapTest服务?

假如不想要服务了那重新编写一个wsdd文件,内容改为:

<deployment name="SimapleTest" xmlns="http://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"

<service name="SoapTest"/

</deployment

和上面一样,对比一下就ok了。

五、客户端测试:

客户端我们也可以使用java来进行测试,网上也有资料的,你可以去学习,很简单的。现在为了体现web服务的魅力,我用.NET平台来测试吧,客户端使用c#编写(先要安装.net framework sdk):

1)通过wsdl生成web服务代理,在net平台下运行:

wsdl/l:CS/protocol:SOAP/out:SoapTestClient.cshttp://localhost/WebserviceTest/services/SoapTest?wsdl

我们通过wsdl得到了一个cs文件SoapTestClient.cs(当前目录),你可以打开cs文件,研究一下里面的代码,那个getStr(string name)就是我们需要调用的方法,我们的客户端通过调用该方法就可以调用服务器端的方法,内部的转化wsdl.exe工具已经帮我们完成了,axis下的WSDL2Java

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有