再谈Axis发布

来源:互联网 发布:cs算法 编辑:程序博客网 时间:2024/05/22 06:31

1、新建web工程,工程名字:Axis

2、将axis相关文件复制到工程相应目录

axis-bin-1_4\axis-1_4\webapps\axis下的所有文件复制到workspace\axis\WebRoot目录下覆盖所有原有的文件
workspace\axis目录下新建conf文件夹,将axis-bin-1_4\axis-1_4\webapps\axis\WEB-INF\classes下的i18n.propertiesi18n_ja.properties复制到conf
 
3、引入Axis
在MyEclipse中Axis工程名右击--》Build Path --》Configure Build Path --》Source -->Add Folder,将新建的conf目录增加到编译路径中使其生效。 
 
4、部署并启动服务

ie中输入http://127.0.0.1:8080/Axis以查看Axis是否安装成功

打开后,点击链接"Validate"来验证Axis所需的几个JAVA包是否齐全,如果包不全会有类似提示(见下面),只要将对应的包放到工程的WEB-INF\lib目录即可

:Error:could not find class javax........

加入相应的包后警告消失变为已找到包的信息。

ie中输入http://127.0.0.1:8080/Axis/services可以查看当前已存在的服务,AdminServiceVersionaxis默认提供的服务。

5、新建服务类

package com.axistest.server
public class KFServer{public String isAlive(String name){return "Hello " + name + ", this is KFServer";}}

6、即时布署(*.jws文件即时布署):
KFServer.java复制到WebRoot目录下,并重新命名为KFServer.jws

注意:如果类KFServer.java有包,需要KFServer.jws文件中关于包声明的部分注释掉

//package com.axistest.server
public class KFServer{public String isAlive(String name){return "Hello " + name + ", this is KFServer";}}

 启动服务后在ie中输入http://127.0.0.1:8080/axis/KFServer.jws?wsdl,查看wsdl文件,即时部署服务成功。

如果报错:No compiler found in your classpath! (you may need to add 'tools.jar')

解决办法:1、将C:\Program Files\Java\jdk1.6.0_18\lib中的tools.jar放到 "项目/WEB-INF/lib” 下面。

      或者:2、可以尝试把jdk中的tools.jar拷到tomcat中的lib目录。

7、定制布署(*.wsdd文件定制布署

WEB-INF目录下创建deploy.wsdd文件,内容如下栏所示(大概如下),本文件用来生成server-config.wsdd,然后启动服务

<?xml version="1.0" encoding="ISO-8859-1"?><deployment    xmlns="http://xml.apache.org/axis/wsdd/"    xmlns:ns="http://server.axistest.com"    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">  <service name="Server" provider="java:RPC">      <parameter name="className" value="com.axistest.server.KFServer"/>      <parameter name="allowedMethods" value="*"/>      <parameter name="scope" value="Request"/>  </service></deployment> 

MyEclipse发布

点击工程,右击-->Run As-->Open Run Dialog..-->右击java Application-->New

Name:deploy

在Main中,Project:选择Axis工程,Main class:填入org.apache.axis.client.AdminClient

勾选上:Incloud system libraries when seraching for main class

点开Arguments,Program arguments:WebRoot/WEB-INF/deploy.wsdd(我们在上面新建的)

点击 右下角Apply,然后点击下面的Run(该配置的整体结果相当于在cmd中执行javaorg.apache.axis.client.AdminClientdeploy.wsdd

MyEclipse显示结果:

Processing file WebRoot/WEB-INF/deploy.wsdd
<Admin>Done processing</Admin>

此时我们可以在WEB-INF下面看到生成一个文件server-config.wsdd(其实这个文件我们也可以手动才创建,结构可以参考如下)

<?xml version="1.0" encoding="UTF-8"?><deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <globalConfiguration>  <parameter name="sendMultiRefs" value="true"/>  <parameter name="disablePrettyXML" value="true"/>  <parameter name="adminPassword" value="admin"/>  <parameter name="attachments.Directory" value="D:\Tools\Development using\apache-tomcat-6.0.29\webapps\axis\WEB-INF\attachments"/>  <parameter name="dotNetSoapEncFix" value="true"/>  <parameter name="enableNamespacePrefixOptimization" value="false"/>  <parameter name="sendXMLDeclaration" value="true"/>  <parameter name="sendXsiTypes" value="true"/>  <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>  <requestFlow>   <handler type="java:org.apache.axis.handlers.JWSHandler">    <parameter name="scope" value="session"/>   </handler>   <handler type="java:org.apache.axis.handlers.JWSHandler">    <parameter name="scope" value="request"/>    <parameter name="extension" value=".jwr"/>   </handler>  </requestFlow> </globalConfiguration> <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/> <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/> <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/> <service name="AdminService" provider="java:MSG">  <parameter name="allowedMethods" value="AdminService"/>  <parameter name="enableRemoteAdmin" value="false"/>  <parameter name="className" value="org.apache.axis.utils.Admin"/>  <namespace>http://xml.apache.org/axis/wsdd/</namespace> </service> <service name="Version" provider="java:RPC">  <parameter name="allowedMethods" value="getVersion"/>  <parameter name="className" value="org.apache.axis.Version"/> </service> <service name="Server" provider="java:RPC">  <parameter name="allowedMethods" value="*"/>  <parameter name="scope" value="Request"/>  <parameter name="className" value="com.huawei.axistest.server.KFServer"/> </service> <transport name="http">  <requestFlow>   <handler type="URLMapper"/>   <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>  </requestFlow>  <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>  <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>  <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>  <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>  <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>  <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/> </transport> <transport name="local">  <responseFlow>   <handler type="LocalResponder"/>  </responseFlow> </transport></deployment>

重新启动服务后在ie中输入http://127.0.0.1:8080/Axis/services可以看到多出了Server项,点击wsdl可以看到相关的wsdl文件。

ie中输入http://127.0.0.1:8080/axis/services/Server?wsdl等同于上页中点击wsdl可以看到Serverwsdl文件。

 

手动发布

a、将上述的java类进行编译,生成一个包含路径:com\axistest\serverKFServer.classs;将上述目录并文件(一定注意要将整个class文件包目录一起,不能单独只复制class文件,否则会报找不到类)添加到web-inf\classes\路径下面

b、将上面创建的deploy.wsdd文件放置web-inf目录下

c、在windows控制台处,进入%TOMCAT_HOME%\webapps\axis\WEB-INF的文件目录下;

然后输入java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/servlet/AxisServlet deploy.wsdd  

如果制台返回:

    Processing file deploy.wsdd

   <Admin>Done processing</Admin>

则表明已经发布成功!此时,在同级目录即web-inf下会生成一个server-config.wsdd文件,这个就是我们所有向外提供服务的上下文。

注意:Tomcat服务器部署生成的server-config.wsdd文件在%tomcat_home%\webapps\axi

s\WEB-INF目录下;(其实它是根据-lhttp://localhost:8080/axis/servlet/AxisServlet这里来找到保存地址的,如果我们要整合到项目中我们可以改成类似于:

-lhttp://localhost:8080/wd/servlet/AxisServlet,然后server-config.wsdd

会保存在%tomcat_home%\webapps\wd\WEB-INF目录,这也是tomcat服务要打开才能执行deplyo.wsdd的原因之一吧)

通过http://localhost:8080/axis/servlet/AxisServlet可以查看我们所有定制的服务,也可以通过http://localhost:8080/services/Server?wsdl查看我们刚才才布的服务的wsdl文件。

定制部署成功

8、编写客户端调用

import org.apache.axis.client.Call;import org.apache.axis.client.Service;public class MyServiceExe{/** *  * 使用axis的WSDL2JAVA调用WS服务 *  * ..SoapBindingStub类的createCall()方法, *  */public String getMessage(String youName){String result = "";try{// 指定调用WebService的URLString endpoint = "http://localhost:8080/Axis/services/Server";// 调用WebServiceService service = new Service();Call call = (Call) service.createCall();call.setTargetEndpointAddress(new java.net.URL(endpoint));// 指定要调用的helloWorld方法call.setOperationName("helloWorld");// 填写你要调用的方法名称result = (String) call.invoke(new Object[] { youName });}catch (Exception e){}return result;}public static void main(String args[]){System.out.println("-----------------");System.out.println(new MyServiceExe().getMessage("isAlive"));}}

 

     上述所讲的例子基本上是将web service独立出的一个项目,即axis是在tomcat下的一个web项目,与其他项目是无关的,所以,如果我们需要操作数据库的时候,我们需要在axis的WEB-INF目录 的lib目录下需要引入我们所需要的包,操作我们自定义的类也一样。所以,非常不方便。特别是当我们web service项目比较复杂,即需要引入很多额外的包的时候,就会造成许多包的冗余(因为在其他项目中可能已经存在了)。所以,我们可以将axis整合到我们的具体项目中:所谓整合,也就是说在我们的项目中,将axis需要的包引进来,在项目的web.xml中将axis\WEB-INF下的web.xml里面的内容整合在一起,编写相应的服务java文件并按照上面的方法进行发布,并把相应生成的server-config.wsdd放置项目的WEB-INF文件夹。以上面的例子来说明所需步骤:1.将需要的包复制到项目的WEB-INF下的lib下;2.在项目的web.xml文件的web-app节点添加axis的web.xml的web-app节点  下的内容。3.编写java类KFServer并编译;4.根据第1步的类,编写deploy.wsdd;5.生成配置文件:server-config.wsdd ,将其复制到项目的WEB-INF文件夹下;

 

原创粉丝点击