zoukankan      html  css  js  c++  java
  • 使用SOAP开发java web服务Axis开发方案(转)

    FROM:http://blog.csdn.net/jwsh1984/archive/2005/02/09/285093.aspx

           本文的预定读者首先要对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-name>TestServlet</servlet-name>
                  <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
          </servlet>
          <servlet-mapping>
                  <servlet-name>TestServlet</servlet-name>
                  <url-pattern>*.jws</url-pattern>
         </servlet-mapping>
         <servlet-mapping>
                  <servlet-name>TestServlet</servlet-name>
                  <url-pattern>/servlet/TestServlet</url-pattern>
        </servlet-mapping>
      
        <servlet-mapping>
                  <servlet-name>TestServlet</servlet-name>
                  <url-pattern>/services/*</url-pattern>
         </servlet-mapping>


         <servlet>
              <servlet-name>AdminServlet</servlet-name>
              <servlet-class>
                   org.apache.axis.transport.http.AdminServlet
              </servlet-class>
              <load-on-startup>100</load-on-startup>
         </servlet>
     
         <servlet-mapping>
              <servlet-name>AdminServlet</servlet-name>
              <url-pattern>/servlet/AdminServlet</url-pattern>
         </servlet-mapping>
     
         <mime-mapping>
              <extension>wsdl</extension>
              <mime-type>text/xml</mime-type>
         </mime-mapping>
     
         <mime-mapping>
              <extension>xsd</extension>
              <mime-type>text/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下的那些包文件的路径全都包括进去,运行:java  org.apache.axis.transport.http.SimpleAxisServer  <port>
     2)内部服务处理程序是org.apache.axis.providers.java.RPCProvider,标志出服务所需的方法,然后提供从SOAP 请求消息组成部分的参数。
     3)Axis的应用程序端管理功能:
           java  org.apache.axis.client.AdminClient 就会列出参数,可供你选择。我们的例子是:java  org.apache.axis.client.AdminClient  -l http://localhost/WebserviceTest/servlet/TestServlet  list 就会显示出服务列表,返回的是xml文件
    4)wsdl2java应用程序可以把wsdl文件创建基于java的程序,如占位程序等
         java  org.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="getStr  getMoney"/>),当用*的时候表示全部。
         好了现在准备部署了,确保环境路径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文件,内容改为:
    <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.cs  http://localhost/WebserviceTest/services/SoapTest?wsdl  
            我们通过wsdl得到了一个cs文件SoapTestClient.cs(当前目录),你可以打开cs文件,研究一下里面的代码,那个 getStr(string name)就是我们需要调用的方法,我们的客户端通过调用该方法就可以调用服务器端的方法,内部的转化wsdl.exe工具已经帮我们完成了,axis下的WSDL2Java工具也是一样的功能,可以参考我上面所说的关于Axis的内核内容
       2)编译cs文件成程序集dll:
          csc /target:library /r:System.Web.Services.dll  /r:System.Xml.dll SoapTestClient.cs
          最后我们等到了一个dll文件SoapTestClient.dll,客户端程序通过调用它就行了
       3)编写客户端应用程序 SoapTestClientApp.cs
          using System;
          
          namespache  jws.client{
             public class SoapTestClientApp{
                public SoapTestClientApp(){
                }
                public static void Main(string[] args){
                    if(args.Length!=1){
                        Console.WriteLine("Usage:SoapTestClientApp <name>");
                        Environment.Exit(1);
                    }
                    SoapTestService  st_service=new SoapTestService();
                    st_service.getStr("Wang wenyin");
               }
            } 
         }
    4)编译文件csc  /r:SoapTestClient.dll  SoapTestClientApp.cs
        运行SoapTestClientApp
    输出结果:
         Hello,Wang wenyin
    与预期结果相符。

    好了,关于soap开发web服务就说到这里了,希望这篇文章能对大家有所帮助,谢谢了:)

    对这篇文章有什么疑问的话,请留言给作者。作者联系地址:Sidney.J.Yellow@gmail.com

  • 相关阅读:
    sort
    usaco-3.1-humble-pass
    usaco-3.1-inflate-pass
    usaco-3.1-agrinet-pass
    usaco-2.4-fracdec-pass
    usaco-2.4-comhome-pass
    usaco-2.4-cowtour-pass
    usaco-2.4-maze1-pass
    usaco-2.4-ttwo-pass
    usaco-2.3-concom-pass
  • 原文地址:https://www.cnblogs.com/BloodAndBone/p/1797965.html
Copyright © 2011-2022 走看看