posts - 3,  comments - 0,  trackbacks - 0
最近在项目中做用户同步用到了WebService,一开始用的IFire可是OA不支持此框架,没办法改用Axis.
Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目,我用的是1.4版本,部署环境tomcat5.0,JDK1.5
准备工作:
 1、下载axis1.4 http://ws.apache.org/axis/1_4  只下axis-src-1_4.zip就OK了。
 2、解压缩后将其中的“webapps”目录下的“axis”目录整个拷贝到Tomcat安装目录下的“webapps”目录下即可。
 3、配置Axis:       

Axis基于Java开发,可以部署于多种操作系统,使用前需要配置一系列的系统变量,在此假定你已经在本机上装好了Tomcat 5.0以上的版本,需要配置的系统变量如下表所示:

CATALINA_HOME
E:\Program Files\Apache Software Foundation\Tomcat 5.0

AXIS_HOME
%CATALINA_HOME%\webapps\axis

AXIS_LIB
%AXIS_HOME%\lib

AXISCLASSPATH
%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar

CLASSPATH 中加入:
%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar

以上是看了网上一篇文章是这要配置的。我们可以直接写一个批处理文件把这些变量加入,可以基本省略这一步。后面可以看到

 4、测试Axis    
        安装配置完毕后,应测试一下是否Axis可以正确运行了。
  启动Tomcat服务器,在浏览器中访问http://localhost:8080/axis/happyaxis.jsp,如果页面显示有错误,则需要回头检查一下相关配置是否正确,如果浏览页面能正确显示出系统组件、属性等参数配置信息,则表示安装成功。现在可以开始开发你的Web Services应用了。

 5、发布WebService
        Axis提供了两种服务发布方式,一种是即时发布(Instant Deployment),一种是定制发布(Custom Deployment)。
        即时发布只用将源Java后缀改成.jws,然后把此文件放到webapps\axis根目录下就OK。每当用户调用这类服务的时候,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。
        需要注意的是:JWS的web服务发布是一个很简单的Web服务发布方式,在页面中你不能使用包,而且由于代码是在运行期被编译的,所以在部署之后,你也很难找到错误所在。
        即时发布并不总是最好的选择,比如有些应用系统是第三方提供的,我们没有购买源代码,只有.class文件,但我们又希望将这个应用系统的一些功能对外发布成Web服务,使其能够在更大范围内产生作用,这个时候即时发布技术就无能为力了。此外,即时发布技术并不灵活,无法进行更多的服务配置,这使得它并不能满足一些特定系统的需求。
        因此,Axis提供了另一种服务发布方式,这就是定制发布。我们项目就是用的定制发布Web Service Deployment Descriptor(WSDD)。
        首先创建我们的业务逻辑类,可以直接在E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\classes下创建,也可以在别的地方创建好再Copy到此路径下,一定要在此路径才能发布。
        再创建发布文件deploy.wsdd,放在E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF。
        现在可以新建一个批处理文件来发布WebService了。
        由于先前没有建系统变理所以在批处理文件中将变量都加入了进来。内容如下:

        cd E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF

        set classpath=.;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\axis.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\axis-ant.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\commons-discovery-0.2.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\commons-logging-1.0.4.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\jaxrpc.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\log4j-1.2.8.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\saaj.jar;E:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\axis\WEB-INF\lib\wsdl4j-1.5.1.jar;

        java org.apache.axis.client.AdminClient deploy.wsdd

        路径同deploy.wsdd
        
        这样有个好处就是每次修改过deploy.wsdd文件后重新发布只要运行这个批处理文件就OK了。
        现在运行它,如果说没有找到类,那么可能是类路径没有配置好,建议将所有的与axis相关的jar都写到classpath中去。
        如果出现以下内容就表明发布成功了:
        Processing file deploy.wsdd
         <Admin>Doneprocessing</Admin>

    定制发布还有种方法就是直接写server-config.wsdd,但是我没那样试过。网上搜搜应该一大堆。

    来取消部署的命令:java org.apache.axis.client.AdminClient undeploy.wsdd  
    你也可以调用: java org.apache.axis.client.AdminClient list 来获得所有的已经部署的服务的列表。在这里你会看到services, handlers, transports等等,注意这个调用只是列出了WEB-INF\server-config.wsdd的文件内容。
       一定要注意:编译后的class文件要拷贝到web-inf/classes的目录中,如果该文件中有包存在的话,别忘了还要在classes目录下创建包的目录。
       通过访问 http://localhost:8080/axis/servlet/UserManagerService?wsdl可以看到这个服务的WSDL描述文件,这说明UserManagerService服务被成功发布了。你也可以通过访问http://localhost:8080/axis/servlet/AxisServlet查看所有定制发布的服务。

致此WebService开发完成,下面就是测试这个服务了。
我采用的是JAVA测试,测试代码如下:        

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;

public class AXISTest
{
    public static void main( String[] args ) throws Exception
    {
         //创建service和call对象,这些对象是标准的JAX-RPC对象,这些对象用于存储服务调用的数据(metadata)。

   Service service = new Service();
   Call call = ( Call ) service.createCall();
   //////////访问定制发布的UserManagerService服务
   call = ( Call ) service.createCall();
  
   //设置访问点
   call.setTargetEndpointAddress( "http://localhost:8080/axis/services/UserManagerService" );
  
   //设置操作名
   call.setOperationName( "addUser" );
  
   //设置入口参数
   call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );
   //设置返回类型
   call.setReturnType(  org.apache.axis.Constants.XSD_STRING   );   
   //call.setReturnClass(String.class);//也可这样设置返回类型

   MyBean myBean = new MyBean();//此处是一个JavaBean 用来处理XML格式的数据
   String userInfo = myBean.getMyBean("user.xml");//从文件中取
   
   String ret=(String)call.invoke(new String[]{userInfo});   
                               
   //调用服务
   System.out.println( " 结果: " + ret + "" );

    }
}

编译,运行。OK。


参考资料:http://blog.csdn.net/sunsnow8/archive/2005/01/10/246580.aspx

posted on 2008-11-06 10:00 bobily 阅读(408) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: