`
zhongkem
  • 浏览: 148389 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

axis1.4 使用笔记(2)

阅读更多

3. 定制发布WSDD

        web服务的开发主要分两部分,一部分是服务的提供者,主要要做两件事情,一是完成服务的业务逻辑,也就是完成这个服务真正要做的事,二是完成服务的配制,也就是如何描述你的服务,以使别人能够调用,这一步是重点。另一部分就是服务的使用者,也就是客户端如何调用发布好的服务。因此在学习axis的过程中,一定要分清哪些事是服务器端要做的事,哪些事是客户端要做的事,而网上大部分资料为了讲述方便都放一起讲,让初学者迷惑不已。下面我就分别从这两部分来详细讲述。

       首先还是讲述下任务吧,我们的项目SN中有很多好而且实用的算法,这些算法还总要调用服务器中的数据库读取数据,这个项目是BS模式的,现在还需要开发一个CS模式的系统,很多要做的事BS模式中已经做完了,因此,很自然的想法就是直接复用这些算法。一开始是导入jar包的形式,后来发现这样很累,不但jar包很大,更重要的是BS一改,CS就得重导jar包。耦合性太紧。因此就有了把这些算法以web service的形式发布出去的 想法,让CS程序以web 服务的形式调用这些算法!这些天做的事情就是这些,下面以一个具体的算法如何发布出去为例讲述axis中服务的定制发布。

具体任务:SemanticQueryOperate这个类中有一个方法getAdvancedSearchList()用于高级搜索,通过语义匹配从数据库中找到相应的服务。

类加上包名为:cn.edu.tju.ikse.sn.advancedSearch.SemanticQueryOperate

方法:public List<Serviceinfo> getAdvancedSearchList(AdvanceSearch advanceSearch),其中AdvanceSearch 是一个javabean,用于封装用户的查询条件,Serviceinfo也是一个javabean,用于封装服务信息。

任务就是把这个方法接口发布出去。

    

3.1 Web Service服务端开发

对于服务端,第一件事已经做好了,即已经把业务相关的代码写好了。。下面要做的事就是把这个服务发布出去,也就是如何写描述文件wsdd。

具体语法就不讲了,直接看写好的:snAdvancedSearch.wsdd

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
	xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
	<service name="SN_AdvanceSearch" provider="java:RPC">
		<parameter name="className" value="cn.edu.tju.ikse.sn.advancedSearch.SemanticQueryOperate"/>
		<parameter name="allowedMethods" value="getAdvancedSearchList"/>
		<beanMapping qname="myNSD:AdvanceSearch" 	xmlns:myNSD="urn:BeanService"
			languageSpecificType="java:cn.edu.tju.ikse.sn.advancedSearch.AdvanceSearch"/>
		<beanMapping qname="myNSD:Serviceinfo"  xmlns:myNSD="urn:BeanService"
			languageSpecificType="java:cn.edu.tju.ikse.sn.hibernate.Serviceinfo"/>
	</service>
</deployment>

 

第三行,就是给这个服务取一个名字,这样别人就能按照名字来获取服务了。这里我们取名为SN_AdvanceSearch

第四行,指定这个服务代表的具体类,要包括包名

第五行,指定这个服务允许别人访问的方法名,这里只让访问getAdvancedSearchList,如果改成*号,则这个类所有    public的方法都能被客户端调用。

第六行,是重点,完成类型的映射,因为用到了用户自己定义的两个javaBean,因此需要映射。格式如第六行和第七行所示,qname="myNSD:AdvanceSearch" ,注意红色部分应该和你的javabean名一致,languageSpecificType也得注意下格式,java:表示这是一个java语言写的类,后面再加上具体的类。其它自定义类完全可以参考这个写法。

写完后我把这文档放在了D:\JavaTools\Tomcat 6.0\webapps\axis\WEB-INF目录下,下一步是如何把这个wsdd文档加到axis自己的配制文档server-config.wsdd里。

编写完配置发布文件之后,cmd打开windows的控制台,进入:%TOMCAT_HOME%\webapps\axis\WEB-INF 目录下键入如下命令:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient snAdvancedSearch.wsdd

之后控制台返回Processing file deploy.wsdd 和Done processing 这两段话即说明发布成功。(注意tomcat得开着)。

当然了为了操作方便也可以写个批处理文件wsdd.bat:

 

set Axis_Lib=D:\JavaTools\axis-1_4\lib    
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%    
set Axis_Servlet=http://localhost:8080/axis/servlet/AxisServlet    
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% snAdvancedSearch.wsdd 
pause

  

最终效果都是一样的,此时在server-config.wsdd会有如下代码段:

 <service name="SN_AdvanceSearch" provider="java:RPC">
  <parameter name="allowedMethods" value="getAdvancedSearchList"/>
  <parameter name="className" value="cn.edu.tju.ikse.sn.advancedSearch.SemanticQueryOperate"/>
  <beanMapping languageSpecificType="java:cn.edu.tju.ikse.sn.advancedSearch.AdvanceSearch" qname="ns2:AdvanceSearch" xmlns:ns2="urn:BeanService"/>
  <beanMapping languageSpecificType="java:cn.edu.tju.ikse.sn.hibernate.Serviceinfo" qname="ns3:Serviceinfo" xmlns:ns3="urn:BeanService"/>
 </service>

 

和原来的wsdd文件差不多。对着看就明白了。。如果熟悉了可以直接在server-config.wsdd中加上上面这段代码就行了。此时访问http://localhost:8080/axis/servlet/AxisServlet就能看到你发布的服务了,可以查看对应的wsdl文档。

服务端任务基本就完成了。。最后别忘记把服务端对应的class文件拷到D:\JavaTools\Tomcat 6.0\webapps\axis\WEB-INF\classes目录下。由于我们这是一个web工程也是发布在Tomcat中,我是直接把发布的工程中的WEB-INF下的classes文件夹全部拷到axis下对应目录。(似乎还要把lib下的jar包也拷到axis对应的lib目录下)

 

3.2 客户端的开发

客户端就是写程序怎么调用这个web服务了。留到下一节讲吧。。写得太多了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics