新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     >>计算机科学论坛<<     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> Web服务(Web Services,WS), 语义Web服务(Semantic Web Services, SWS)讨论区: WSDL, SOAP, UDDI, DAML-S, OWL-S, SWSF, SWSL, WSMO, WSML,BPEL, BPEL4WS, WSFL, WS-*,REST, PSL, Pi-calculus(Pi演算), Petri-net,WSRF,
    [返回] 计算机科学论坛W3CHINA.ORG讨论区 - Web新技术讨论『 Web Services & Semantic Web Services 』 → 请教关于SayHello的webservice的调用问题 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4073 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 请教关于SayHello的webservice的调用问题 举报  打印  推荐  IE收藏夹 
       本主题类别: Description Logics | Web Services    
     小鹿纯子 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:7
      积分:78
      门派:XML.ORG.CN
      注册:2008/7/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给小鹿纯子发送一个短消息 把小鹿纯子加入好友 查看小鹿纯子的个人资料 搜索小鹿纯子在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看小鹿纯子的博客楼主
    发贴心情 请教关于SayHello的webservice的调用问题

    我是webservice初学者
    请教各位高手,我是按照下面的步骤(http://www.fish888.com/Apache-AXIS-Web-Services-t147567 )把webservice部署上的,好像很简单就是一个SayHello的webservice,可是我就是不知道怎么样通过jsp或者java程序来调用它呢,
    请指点迷津,谢谢了~
    用Apache AXIS 开发 Web Services Step By Step
    一、环境准备
    使用Axis来开发Web services 需要准备 web 服务器,Axis API。本文使用的Web container 是Tomcat5.5, Axis API 采用版本2。

    1.1软件下载准备

    Tomcat下载地址:http://tomcat.apache.org/download-55.cgi#5.5.20

    Axis标准包:

    http://ftp.wayne.edu/apache/ws/axis2/1_0/axis2-std-1.0-bin.zip

    Axis War包:

    http://ftp.wayne.edu/apache/ws/axis2/1_0/axis2.war

    Axis Eclipse plug-in(代码生成工具和打包工具):

    http://apache.justdn.org/ws/axis2/tools/1_0/Axis2_Code_Generator.zip

    http://apache.justdn.org/ws/axis2/tools/1_0/Axis2_Service_Archiver.zip

    Eclipse+MyEclipse:可以到官方网站下载(本文为3.2+5.0GA)

    1.2安装

    A.首先搭建开发环境,需要将下载到的Eclipse解压缩到一个目录。

    B.将下载到的Axis 的两个plug-in解压缩到Eclipse安装目录下的plug-in子目录。

    C.安装MyEclipse5.0GA。然后启动MyEclipse,并选择“File->New->Other”可以找到下面的这些Wizards,这些将是本文中用到的很重要的工具。

                                 D.下面开始搭建Web Services的部署环境。将下载的

              tomcat报解压缩到一个目录。完成web container

              的安装。

            E.将axis2.war包拷贝到tomcat安装目录下的webapps

              目录中。

    F.启动Tomcat(windows 下为TOMCA_HOME/bin中的startup.bat;Linux,unix环境为startup.sh文件),打开浏览器输入并访问:http://ip:port/axis2来查看。(如果没有进行陪孩子文件的修改此地址应该为http://localhost:8080/axis),如果能看到下面的页面则说明已经安装完成。

    二、Quick Start
    环境准备好后,先从一个简单的例子开始。以便对使用Axis来开发Web services的大致流程有个了解。这个例子就是SayHello,请求端输入一个名字字符串,返回的将是一个问候语。

    例如:输入了Tom,那么返回的事Hi,Tom.How are you?

    2.1编写WSDL

    A.启动MyEclipse,新建立一个WebApps(File->New->Project->Web Project),给Project Name 为SayHello,其他保持不改变。

    B.选择File->New-Other菜单,进入后找到MyEclipse->Web Services并选择WSDL.

    C. 选择“src”目录作为“Enter or select the parent folder”的值,“File name”值给定为SayHello.wsdl。点击“Next”进入下一步。

    D.将目标命名空间设置为“http://ws.tonyzhangcn.org/SayHello/”.在生成代码的时候一般以这个命名空间为package的名字,例如:org.tonyzhangcn.ws.sayhello。这些值可以按需要设置。


    E.点击“Finish”按钮就可以看到MyEclipse提供的WSDL 设计器的界面了。可以看到设计器为WSDL默认的添加了一个现操作。

      

    即图中的“NewOperation”。现在将其改名为SayHello,如下图:

             之后点击设计界面中的“Source”Tab来查看其代码。如下:可以看到我们定义了一个SayHello的Web Services,她提供了一个SayHello的方法,她能够接受一个String(事实上是tns:SayHelloRequest对象,她对String进行了封装)类型的输入参数SayHelloRequest并返回一个String(事实上是tns:SayHelloResponse对象,她对String进行了封装)类型的SayHelloResponse结果。更多关于WSDL的信息,请参考W3C的规范文档。


    <?xml version="1.0" encoding="UTF-8"?>

    <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.tonyzhangcn.org/SayHello/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="SayHello" targetNamespace="http://ws.tonyzhangcn.org/SayHello/">

    <wsdl:types>

    <xsd:schema targetNamespace="http://ws.tonyzhangcn.org/SayHello/">

    <xsd:element name="SayHelloResponse" type="xsd:string" />

    <xsd:element name="SayHelloRequest" type="xsd:string" />

    </xsd:schema>

    </wsdl:types>

    <wsdl:message name="SayHelloResponse">

    <wsdl:part element="tns:SayHelloResponse" name="SayHelloResponse" />

    </wsdl:message>

    <wsdl:message name="SayHelloRequest">

    <wsdl:part element="tns:SayHelloRequest" name="SayHelloRequest" />

    </wsdl:message>

    <wsdl:portType name="SayHello">

    <wsdl:operation name="SayHello">

    <wsdl:input message="tns:SayHelloRequest" />

    <wsdl:output message="tns:SayHelloResponse" />

    </wsdl:operation>

    </wsdl:portType>

    <wsdl:binding name="SayHelloSOAP" type="tns:SayHello">

    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />

    <wsdl:operation name="SayHello">

    <soap:operation soapAction="http://ws.tonyzhangcn.org/SayHello/NewOperation" />

    <wsdl:input>

    <soap:body use="literal" />

    </wsdl:input>

    <wsdl:output>

    <soap:body use="literal" />

    </wsdl:output>

    </wsdl:operation>

    </wsdl:binding>

    <wsdl:service name="SayHello">

    <wsdl:port binding="tns:SayHelloSOAP" name="SayHelloSOAP">

    <soap:address location="http://www.example.org/" />

    </wsdl:port>

    </wsdl:service>

    </wsdl:definitions>

    至此WSDL的编写已经完成。

    2.2从WSDL生成Java代码

    A.选择菜单“File->New->Other”,从对话框中选取“Axis2 Wizards”下面的“Axis2 Code Generator”.点击“Next”进入下一个页面,保持“Generate java source code from WSDL file”被选中,点击“Next”进入下一步。

    B.点击“Browse”来选取存放在src目录下的SayHello.wsdl文件,“Next”进入下一步。设置如下:

    C.点击“next”进入下一个页面,设置“Output path”为本Project的src目录。点击“finish”后代在SayHello项目上按F5刷新就可以看到有代码生成好了。但是能看到一堆红“x”,这是由于没有将Axis2的jar包放入class path 中以及源代码的package不为org.tonyzhangcn.ws.sayhello引起的。

    下面解决这个问题,首先选择“SayHello”项目,并右击选择“Build path->Add External Archives..”,选择上面部署在tomcat中的axis2 web应用WEB-INF/lib目录中的所有jar包。之后右击“src.org.tonyzhangcn.ws.sayhello”项目,选择“Refactor->rename”,做如下修改,并选择OK完成。

    这个时候发现test.org.tonyzhangcn.ws.sayhello下面的SayHelloTest.java仍然存在问题。点击此文件中package 关键子前面的红“x”,会提示有两个选项,我们选择下面的那个。

    选择public class SayHelloTest前的红“x”,选择第一项。

    进行完这几个改动之后,生成的代码就没有问题了。其中

    SayHelloRequest,SayHelloResponse是输入输出参数对象。

    SayHelloSkeleton是服务端对象,用来编写业务逻辑调用。

    SayHelloStub是客户端用来定位endpoint(就是发布的Web Services的地址)的类,客户端根据其提供的方法定位Web服务并发起调用

    SayHelloMessageReceiverInOut是一个实现同步调用的web服务信息转换处理类。

    Resources目录下的services.xml文件是webservices的描述文件。

    SayHelloTest是一个客户端的TestCase示例,用户可以根据这个示例来编写自己的客户端调用类。

    2.3编写业务代码

    打开SayHelloSKeleton.java文件将其中的实现方法

    public org.tonyzhangcn.ws.sayhello.SayHelloResponse SayHello(org.tonyzhangcn.ws.sayhello.SayHelloRequest param0)

    {

    // Todo fill this with the necessary business logic

    throw new java.lang.UnsupportedOperationException();

    }

    改为

    public org.tonyzhangcn.ws.sayhello.SayHelloResponse SayHello(org.tonyzhangcn.ws.sayhello.SayHelloRequest request)

    {

    // Todo fill this with the necessary business logic

    try

    {

    SayHelloResponse response = new SayHelloResponse();

    response.setSayHelloResponse("Hi,"+request.getSayHelloRequest()+".How are you?");

    return response;

    }catch(UnsupportedOperationException e)

    {

    throw e;

    }

    }

    2.4打包

    A.选择菜单“File->New->Other”,从对话框中选取“Axis2 Wizards”下面的“Axis2 Services Archive”.点击“Next”进入下一个页面。

    B.选择编译好的class文件所在目录(本项目应该是WebRoot下面WEB-INF/classes),“Next”进入下一步。

    C.选择WSDL文件所在目录,此处为src目录下的SayHello.wsdl文件。“Next”,再“Next”。选择services.xm文件,本文应该是生成再src/resources下面的services.xml文件。之后选取“Generate the services.xml automatically”,然后再点击一下使其变为非选中状态,之后点击“Back”按钮,再点击一次“Next”。(注意:这里本应该不是这么来回折腾的,但是我的机器上只有这样操作finish按钮才能生效。怀疑这是一个bug,如果读到此文的用户没有这种情况,忽略此提示)

    D.点击“Next”,将记入最后一个页面,此处有两个选项,一个是输出目录一个是处处文件名称。我这里的输出文件名称给的是SayHello。点击“Finish”完成。

    2.5部署

    A.将打包好的文件SayHello.jar(或者可以改名为SayHello.aar),拷贝到Tomcat中已经部署的Axis2应用的WEB-INF/services目录下面。

    B.启动Tomcat(即点击Tomcat安装目录下的startup.bat,linux或unix下执行startup.sh)。

    C.打开浏览器,输入http://ipaddress:port/axis2(一般为http://localhost:8080/axis2),并点击其中的“services”链接

       可以看到SayHello已经被部署。点击SayHello提供的连接可以看到与之对应的WSDL。

    2.6调用测试

    A.修改SayHelloTest.java文件中的方法testSayHello的内容为:

    public void testSayHello() throws java.lang.Exception

    {

    String url="http://localhost:8080/axis2/services/SayHello";

    org.tonyzhangcn.ws.sayhello.SayHelloStub stub = new org.tonyzhangcn.ws.sayhello.SayHelloStub(url); // the

    org.tonyzhangcn.ws.sayhello.SayHelloRequest request = (org.tonyzhangcn.ws.sayhello.SayHelloRequest) getTestObject(org.tonyzhangcn.ws.sayhello.SayHelloRequest.class);

    request.setSayHelloRequest("tonyzhangcn");

    System.out.println(stub.SayHello(request).getSayHelloResponse());

    // todo Fill in the param14 here

    assertNotNull(stub.SayHello(request));

    }

    B.从菜单中选择“Run->Run as->JUnit Test”。

         可以看到web 服务已经正确的返回了结果。那么,不用TestCase类可以调用WebServices吗?答案是肯定的,我们可以随便些一个带有main方法的类,并仿照SayHelloTest.java中的testSayHello()方法就可以达到调用Web Services的目的了


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/12/9 16:56:00
     
     小鹿纯子 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:7
      积分:78
      门派:XML.ORG.CN
      注册:2008/7/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给小鹿纯子发送一个短消息 把小鹿纯子加入好友 查看小鹿纯子的个人资料 搜索小鹿纯子在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看小鹿纯子的博客2
    发贴心情 
    那么怎么调用axis包里面的例子
    http://localhost:8080/axis2/services/version?wsdl呢,大家能给我帮助吗?
    谢谢了
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/12/9 20:11:00
     
     wanggou 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:计算机学士学位(版主)
      文章:229
      积分:2047
      门派:XML.ORG.CN
      注册:2005/10/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给wanggou发送一个短消息 把wanggou加入好友 查看wanggou的个人资料 搜索wanggou在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看wanggou的博客3
    发贴心情 
    你的名字很好听啊
    小时候的一部电影的女主角
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/12/10 8:53:00
     
     小鹿纯子 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:7
      积分:78
      门派:XML.ORG.CN
      注册:2008/7/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给小鹿纯子发送一个短消息 把小鹿纯子加入好友 查看小鹿纯子的个人资料 搜索小鹿纯子在『 Web Services & Semantic Web Services 』的所有贴子 引用回复这个贴子 回复这个贴子 查看小鹿纯子的博客4
    发贴心情 
    恩,是啊,是排球~
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/12/10 13:39:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Web Services & Semantic Web Services 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/6/22 10:17:21

    本主题贴数4,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    74.219ms