<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/java-web-soap-sevices-html/</link>
<title><![CDATA[详解SOAP开发Java Web服务]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[编程杂谈]]></category>
<pubDate>Sun, 26 Sep 2010 03:32:06 +0000</pubDate> 
<guid>https://www.heckjj.com/java-web-soap-sevices-html/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: 微软雅黑;">本文适合首先要对j2ee有所了解的读者，熟悉xml，tomcat等基本内容，本文主要是简单介绍一下web服务的基本内容，怎样在java web开发中构建soap服务：<br/><span style="font-size: 14px;"><strong><span style="color: #4169E1;">一、soap（simple object access protocol）简单对象访问协议</span></strong></span><br/>　　要了解soap，首先就需要了解分布式计算的由来，随着下一代的分布式计算体系web服务的出现，soap成为了创建和调用通过网络发布的应用程序的实际通信标准。soap类似传统的二进制协议iiop（corba）和jrmp（rmi），但它不采用二进制数据表示法，而是采用使用xml的，基于文本的数据表示法。<br/>　　<br/>　　通过xml表示法，soap定义了一种小型有线连接协议和编码格式，以表示数据类型、编程语言和数据库，还可以使用各种internet标准协议作为其消息传输工具，还可以提供表示rpc和文档驱动的消息交换等通信模型的约定。请注意，w3c正致力于soap的研究，http://www.w3c.org/2000/xp/group/ ，并得到了主流供应商的积极响应，以便对于基于xml的协议相关的重要任务达成共识，并定义其关键要求和使用场景。<br/>　　<br/>　　soap1.2的基本规范定义了以下基本内容：<br/>　　<br/>　　1）用于将xml文档表示为结构化soap消息的语法和语义<br/>　　2）在soap消息中表示数据的编码标准<br/>　　3）用于交换soap消息的通信模型<br/>　　4）soap传输等底层协议的绑定<br/>　　soap消息主要包括了信封头，消息头，主体，附件几部分</span> <span style="font-family: 微软雅黑;"><br/>　　一个简单的soap消息表示：</span><textarea name="code" class="xml" rows="15" cols="100">
　　post　 /studentinfo　 http/1.1
　　host：anthropology.cun.edu
　　content-type: text/xml;charset=&quot;utf-8&quot;
　　content-length: 640
　　soapaction:　&quot;getstudentinfo&quot;
　　
　　&lt;soap-env:envelop xmlns:soap-env=&quot;http://www.w3c.org/2001/06/soap-envelope&quot;
　　xmlns:xsi=&quot;http://www.w3c.org/2001/xmlschema-instance&quot;
　　xmlns:xsd=&quot;http://www.w3c.org/2001/xmlschema&quot;
　　soap-env:encodingstyle=&quot;http://www.w3c.org/2001/06/soap-encoding&quot;&gt;
　　&lt;soap-env:header&gt;
　　&lt;person:mail xmlns:person=&quot;http://www.cun.edu/header&quot;&gt;xyz@cun.edu
　　&lt;/soap-env:header&gt;
　　
　　&lt;soap-env:body&gt;
　　&lt;m:getstudentinfo　 xmlns:m=&quot;http://www.cun.edu/jws.student.studentinfo&quot;&gt;
　　&lt;student_name xsi:type=&#039;xsd:string&#039;&gt;
　　wang wen yin
　　&lt;/student&gt;
　　&lt;/m:getstudentinfo&gt;
　　&lt;/soap-env:body&gt;
　　&lt;/soap-env:envelop&gt;</textarea><span style="font-family: 微软雅黑;"><br/>　　以上是1.2版本命名空间，1.1的命名空间 soap envelope：http://schemas.xmlsoap.org/soap/envelop/ ,soap encoding: http://schemas.xmlsoap.org/soap/encoding/<br/>　　<br/>　　关于soap编码规范请参阅www.w3c.org/tr/xmlschema-2/ 定义的编码值，其他的一些规范可以上www.w3c.org 上具体查看。<br/>　　<br/><span style="font-size: 14px;"><strong><span style="color: #4169E1;">二、以下从实际例子来学习</span></strong></span><br/>　　这里我使用的是apache的一个子项目axis的具体例子，便于深入了解soap的运行：<br/>　　<br/>　　1）下载axis的相关内容http://ws.apache.org/axis/：<br/>　　(来源www.hecks.tk)<br/>　　2）建立一个实例程序（遵守j2ee的web程序规范），如（webservicetest目录）<br/>　　<br/>　　把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文件夹下)<br/>　　<br/>　　3)修改应用程序webservicetest/web-inf中的web.xml文件：主要servlet设置如下</span><textarea name="code" class="xml" rows="15" cols="100">
　　&lt;servlet&gt;
　　&lt;servlet-name&gt;testservlet&lt;/servlet-name&gt;
　　&lt;servlet-class&gt;org.apache.axis.transport.http.axisservlet&lt;/servlet-class&gt;
　　&lt;/servlet&gt;
　　&lt;servlet-mapping&gt;
　　&lt;servlet-name&gt;testservlet&lt;/servlet-name&gt;
　　&lt;url-pattern&gt;*.jws&lt;/url-pattern&gt;
　　&lt;/servlet-mapping&gt;
　　&lt;servlet-mapping&gt;
　　&lt;servlet-name&gt;testservlet&lt;/servlet-name&gt;
　　&lt;url-pattern&gt;/servlet/testservlet&lt;/url-pattern&gt;
　　&lt;/servlet-mapping&gt;
　　
　　&lt;servlet-mapping&gt;
　　&lt;servlet-name&gt;testservlet&lt;/servlet-name&gt;
　　&lt;url-pattern&gt;/services/*&lt;/url-pattern&gt;
　　&lt;/servlet-mapping&gt;
　　
　　&lt;servlet&gt;
　　&lt;servlet-name&gt;adminservlet&lt;/servlet-name&gt;
　　&lt;servlet-class&gt;
　　org.apache.axis.transport.http.adminservlet
　　&lt;/servlet-class&gt;
　　&lt;load-on-startup&gt;100&lt;/load-on-startup&gt;
　　&lt;/servlet&gt;
　　
　　&lt;servlet-mapping&gt;
　　&lt;servlet-name&gt;adminservlet&lt;/servlet-name&gt;
　　&lt;url-pattern&gt;/servlet/adminservlet&lt;/url-pattern&gt;
　　&lt;/servlet-mapping&gt;
　　
　　&lt;mime-mapping&gt;
　　&lt;extension&gt;wsdl&lt;/extension&gt;
　　&lt;mime-type&gt;text/xml&lt;/mime-type&gt;
　　&lt;/mime-mapping&gt;
　　
　　&lt;mime-mapping&gt;
　　&lt;extension&gt;xsd&lt;/extension&gt;
　　&lt;mime-type&gt;text/xml&lt;/mime-type&gt;
　　&lt;/mime-mapping&gt;</textarea><span style="font-family: 微软雅黑;"><br/>　　你现在可以在网址里输入http://localhost/webservicetest/servlet/testservlet 看到了吗？axis是使用axis.jar包里的org.apache.axis.transport.http.axisservlet对应用程序进行处理的，基本配置就讲到这里。<br/>　　<br/><span style="font-size: 14px;"><strong><span style="color: #4169E1;">三、接着我们来说axis中的内核</span></strong></span><br/>　　1）不使用tomcat引擎运行axis。<br/>　　<br/>　　先建立一个脚步文件，对环境变量classpath进行设置要把lib下的那些包文件的路径全都包括进去，运行：java　org.apache.axis.transport.http.simpleaxisserver　&lt;port&gt;<br/>　　<br/>　　2）内部服务处理程序是org.apache.axis.providers.java.rpcprovider，标志出服务所需的方法，然后提供从soap请求消息组成部分的参数。<br/>　　<br/>　　3）axis的应用程序端管理功能：<br/>　　<br/>　　java　org.apache.axis.client.adminclient 就会列出参数，可供你选择。我们的例子是：java　org.apache.axis.client.adminclient　-l http://localhost/webservicetest/servlet/testservlet　list 就会显示出服务列表，返回的是xml文件<br/>　　4）wsdl2java应用程序可以把wsdl文件创建基于java的程序，如占位程序等<br/>　　java　org.apache.axis.wsdl.wsdl2java　&lt;url&gt;<br/>　　<br/>　　axis的基本内容说到这里<br/>　　<br/>　　<span style="font-size: 14px;"><strong><span style="color: #4169E1;">四、具体例子</span></strong></span></span><br/>　　1）编写逻辑程序，简单如：soaptest.java<textarea name="code" class="java" rows="15" cols="100">
　　public class soaptest&#123;
　　public string getstr(string name)&#123;
　　return &quot;hello，&quot;+name;
　　&#125;
　　&#125;</textarea><span style="font-family: 微软雅黑;"><br/>　　2) 部署服务，编写wsdd文件soaptest_deploy.wsdd:</span><textarea name="code" class="xml" rows="15" cols="100">
　　&lt;deployment name=&quot;simapletest&quot; xmlns=&quot;http://xml.apache.org/axis/wsdd/&quot;
　　xmlns:java=&quot;http://xml.apache.org/axis/wsdd/providers/java&quot;
　　xmlns:xsd=&quot;http://www.w3.org/2000/10/xmlschema&quot;
　　xmlns:xsi=&quot;http://www.w3.org/2000/10/xmlschema-instance&quot;&gt;
　　&lt;service name=&quot;soaptest&quot; provider=&quot;java:rpc&quot;&gt;
　　&lt;parameter name=&quot;classname&quot; value=&quot;soaptest&quot;/&gt;
　　&lt;parameter name=&quot;allowedmethods&quot; value=&quot;getstr&quot;/&gt;
　　&lt;/service&gt;
　　&lt;/deployment&gt;</textarea><span style="font-family: 微软雅黑;"><br/>　　其中classname参数是你的想部署的类名（全名），allowedmethods是调用的服务的方法，如果有多个方法的话可以用空格分开（如： &lt;parameter name=&quot;allowedmethods&quot; value=&quot;getstr　getmoney&quot;/&gt;),当用*的时候表示全部。<br/>　　<br/>　　好了现在准备部署了，确保环境路径classpath设置正确，运行：<br/>　　<br/>　　java　org.apache.axis.client.adminclient　-l　http://localhost/webservicetest/servlet/testservlet　soaptest_deploy.wsdd<br/>　　<br/>　　（这里不懂的话，请参考以上的说明）<br/>　　<br/>　　ok，呵呵，至此，我们已经完成了一个web服务的部署：测试http://localhost/webservicetest/servlet/testservlet　看里面是否多了一个选择soaptest服务？<br/>　　<br/>　　如果不想要服务了那重新编写一个wsdd文件，内容改为：</span><textarea name="code" class="xml" rows="15" cols="100">
　　&lt;deployment name=&quot;simapletest&quot; xmlns=&quot;http://xml.apache.org/axis/wsdd/&quot;
　　xmlns:java=&quot;http://xml.apache.org/axis/wsdd/providers/java&quot;
　　xmlns:xsd=&quot;http://www.w3.org/2000/10/xmlschema&quot;
　　xmlns:xsi=&quot;http://www.w3.org/2000/10/xmlschema-instance&quot;&gt;
　　&lt;service name=&quot;soaptest&quot;/&gt;
　　&lt;/deployment&gt;</textarea><span style="font-family: 微软雅黑;"><br/>　　和上面一样，对比一下就ok了。<br/>　　<br/><span style="font-size: 14px;"><strong><span style="color: #4169E1;">五、客户端测试：</span></strong></span><br/>　　客户端我们也可以使用java来进行测试，网上也有资料的，你可以去学习，很简单的。现在为了体现web服务的魅力，我用.net平台来测试吧，客户端使用c#编写（先要安装.net framework sdk)：<br/>　　<br/>　　1）通过wsdl生成web服务代理，在net平台下运行：<br/>　　<br/>　　wsdl　/l:cs　/protocol:soap　/out:soaptestclient.cs　http://localhost/webservicetest/services/soaptest?wsdl<br/>　　<br/>　　我们通过wsdl得到了一个cs文件soaptestclient.cs（当前目录），你可以打开cs文件，研究一下里面的代码，那个getstr(string name)就是我们需要调用的方法，我们的客户端通过调用该方法就可以调用服务器端的方法，内部的转化wsdl.exe工具已经帮我们完成了，axis下的wsdl2java</span><br/><br/>Tags - <a href="https://www.heckjj.com/tags/soap/" rel="tag">soap</a>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/java-web-soap-sevices-html/#blogcomment</link>
<title><![CDATA[[评论] 详解SOAP开发Java Web服务]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/java-web-soap-sevices-html/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>