基于axis的webservice开发和配置

 

 

这段时间做了个项目,需要使用润乾报表的接口,所以研究了一把webservice。现在把使用心得总结下,供初学者参考。

Axis是一个soap引擎,支持wsdl。下面介绍如何使用ant生成服务端和客户端,并配置webservice

ant是一个基于JAVA的自动化脚本引擎,脚本格式为XML下载ant的网址:http://ant.apache.org/。下载后直接解压,设置环境变量ANT_HOME%解压后路径%。在path中添加%ANT_HOME%/bin

axis的官方网站上下载(http://ws.apache.org/axis/)axis-bin-1_3.zip解压后的lib下的jar包放入文件夹D:/os/webservice/1.3/lib中。另建立D:/os/webservice/1.3/classesD:/os/webservice/1.3/generated-sources两个文件夹。在D:/os/webservice/1.3下建立build.xml

build.xml脚本内容如下:

<project name="Axis web service generator" default="all" basedir=".">

    <description>

        Generate an Axis Web Service with the axis-ant tasks.

    </description>

   

        <target name="init">

                   <path id="axis.classpath">

                            <pathelement path="D:/os/webservice/1.3/classes"/>

                            <fileset

                                     dir="${basedir}/lib/">

                                     <include name="**/*.jar" />

                            </fileset>

                   </path>

                   <taskdef

                            resource="axis-tasks.properties" classpathref="axis.classpath" />

          </target>

 

         <target name="2wsdl" depends="init">

                 <axis-java2wsdl

                   classname="com.landray.kmss.sys.webservice.reportattach.ReportAttach"

                   output="${basedir}/ReportAttach.wsdl"

                   namespace="http://com/landray/kmss/sys/webservice/reportattach/ReportAttach.wsdl"

                   location="http://java.kmss.net:8080/EKPReport/axis/ReportAttachService">

         </axis-java2wsdl>

  </target>

 

       <target name="2java" depends="init">

                <axis-wsdl2java

                         output="${basedir}/generated-sources"

                         testcase="true"

                         serverside="true"

                         url="${basedir}/ReportAttach.wsdl"

                         verbose="true">

                   <mapping namespace="http://com/landray/kmss/sys/webservice/reportattach/ReportAttach.wsdl" package="com.landray.kmss.sys.webservice.reportattach"/>

       </axis-wsdl2java>

  </target>

 

</project>

上面脚本定义了源文件夹classes,输出文件夹generated-sources,及相关命令。将编译好的class文件(包含类包)放入classes文件夹。这里以ReportAttach.class为例具体讲解。

ReportAttach.class

import javax.activation.DataHandler;

 

public interface ReportAttach  {

    public DataHandler[] getReportRun(java.lang.Object[] in0) throws java.rmi.RemoteException;

}

 

运行cmdcd  D:/os/webservice/1.3。执行ant 2wsdl,再执行ant  2java。这样服务端和客户端就生成好了。

generated-sources下的文件拷贝到你的服务端和客户端相应的模块下,注意包路径保持一致。同时将lib下的jar包拷贝到你服务端和客户端应用的lib下。

在服务端你的应用路径/web-inf/classes下建立server-config.wsdd。内容如下:

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 value="admin" name="adminPassword" />

                   <parameter value="org.apache.axis.attachments.AttachmentsImpl"

                            name="attachments.implementation" />

                   <parameter value="true" name="sendXsiTypes" />

                   <parameter value="true" name="sendMultiRefs" />

                   <parameter value="true" name="axis.development.system" />

                   <parameter value="true" name="sendXMLDeclaration" />

                   <parameter value="true" name="axis.sendMinimizedElements" />

                   <parameter value="true" name="dotNetSoapEncFix" />

                   <parameter value="false" name="sendMultiRefs" />

                   <requestFlow>

                            <handler type="java:org.apache.axis.handlers.JWSHandler">

                                     <parameter value="session" name="scope" />

                            </handler>

                            <handler type="java:org.apache.axis.handlers.JWSHandler">

                                     <parameter value="request" name="scope" />

                                     <parameter value=".jwr" name="extension" />

                            </handler>

                   </requestFlow>

         </globalConfiguration>

 

         <handler type="java:org.apache.axis.transport.local.LocalResponder"

                   name="LocalResponder" />

         <handler type="java:org.apache.axis.handlers.http.URLMapper"

                   name="URLMapper" />

         <handler

                   type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"

                   name="Authenticate" />

 

         <service provider="java:RPC" name="Version">

                   <parameter value="getVersion" name="allowedMethods" />

                   <parameter value="org.apache.axis.Version" name="className" />

         </service>

 

         <service name="AdminService" provider="java:MSG">

                   <parameter name="allowedMethods" value="AdminService"/>

                   <parameter name="enableRemoteAdmin" value="true"/>

                   <parameter name="className" value="org.apache.axis.utils.Admin"/>

                   <namespace>http://xml.apache.org/axis/wsdd/</namespace>

         </service>

 

  <!-- Services from AxisSalesOrderService WSDL service -->

 

         <transport name="http">

                   <requestFlow>

                            <handler type="URLMapper"/>

                            <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>

                   </requestFlow>

         </transport>

         <transport name="local">

                   <responseFlow>

                            <handler type="LocalResponder"/>

                   </responseFlow>

         </transport>

</deployment>

找到你生成的deploy.wsdd文件,拷贝service节点的内容到<!-- Services from AxisSalesOrderService WSDL service -->后面。找到服务端的ReportAttachServiceSoapBindingImpl.java,这是根据你提供的ReportAttach生成的实际功能实现的service。修改getReportRun方法(也是你在ReportAttach里定义的),在里面写你的具体实现。到这里服务端已经配置完成了。那么,在客户端如何调用呢?这里再啰嗦一句,如果你没把需要的jar包和生成的文件拷到客户端,也就是前面没看仔细,就请重新看下再往下操作。以下我贴出客户端调用的代码:

com.landray.kmss.sys.webservice.reportattach.ReportAttachServiceSoapBindingStub binding;

                   try {

                       binding = (com.landray.kmss.sys.webservice.reportattach.ReportAttachServiceSoapBindingStub)

new com.landray.kmss.sys.webservice.reportattach.ReportAttachServiceLocator().getReportAttachService();

                   }

                   catch (javax.xml.rpc.ServiceException jre) {

                       if(jre.getLinkedCause()!=null)

                           jre.getLinkedCause().printStackTrace();

                       throw new junit.framework.AssertionFailedError("JAX-RPC ServiceException caught: " + jre);

                   }

                   // Time out after a minute

                   binding.setTimeout(60000);

                   // Test operation                

                   Attach[] ret =binding.getReportRun(paras);

我这里用到了javax.activation.DataHandleraxis支持使用它进行二进制数据流的传输。如果要传输bean,记得实现java.io.Serializable接口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值