使用Axis与外部系统对接的一些总结

写在前面

    在工作中经常会遇到与其他系统进行数据交互的问题,一般来说,系统间常用的对接技术有1.普通HTTP/HTTPS通讯协议;2.基于HTTP/HTTPS协议的WebService或SOAP方式通讯;3.普通Socket方式通讯;4.数据库共享数据方式;5.其他方式。由于各个系统实现语言不同等问题,多数系统提供的接口会采用WebService或数据库方式。对于数据量大、占用系统资源较多的数据一般采用数据库的方式进行数据更新,例如系统中的员工信息等主数据;而对于实时性要求较高、数据量较小的数据则会使用WebService的方式,对于java开发WebService来说,现在已经有JWS、Axis/Axis2、XFire和CXF这4种很成熟的框架供我们选择。而在项目中,笔者使用了Axis2进行开发。

为什么使用Axis?

    1.支持多语言。Axis除了支持java外,还支持C/C++等多种变成语言。

    2.更灵活。Axis允许自己作为独立的应用来发布WebService,并且可以根据需求的增减相应的增减不同的功能。

    3.开源。严格来说这一点不能算是Axis独有的优势,CXF也是开源的,这两种常用的技术在网上都有很多教程。

    4.拥有实例。在同事中有过使用Axis的先例,在有经验的人的指导下,开发速度相对会很快。

开发环境

    本文使用java 1.6.0_45版本,Eclipse 进行开发,Axis2使用1.4版本。

使用步骤

    Axis既可以用来生成客户端调用代码,也可以发布WebService应用。

    关于Axis,官方提供了四种类型的包,分别为二进制包、war包、文档包和源代码包。二进制包主要是一些jar包和相关实例程序;war包可以作为web应用部署在服务器中的服务包,它是Axis提供的服务管理的工具类web应用;文档包和源码包不再多说。

    使用Axis2发布WebService应用

       1.在Eclipse中新建一个Web工程AxisTestServer;

        2.src目录下新建包及java类,代码如下。

        

package com.pansoft.axis;

public class AxisTest {
	public String test(String pInputParam){
		return "AxisServer:"+ pInputParam;
	}
}

        3.右键工程,新建一个WebService


        4.在弹出的窗口中按下图选择需要发布的类。

      如果需要选择要发布的方法,可点击Next进行勾选,否则直接点击Finish即可发布。

        5.发布成功后会在WebContent(或WebRoot)目录下的wsdl目录生成一个.wsdl文件,文件名与发布的类名相同。

        AxisTest.wsdl文件内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://axis.pansoft.com" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://axis.pansoft.com" xmlns:intf="http://axis.pansoft.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
 <wsdl:types>
  <schema elementFormDefault="qualified" targetNamespace="http://axis.pansoft.com" xmlns="http://www.w3.org/2001/XMLSchema">
   <element name="test">
    <complexType>
     <sequence>
      <element name="pInputParam" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
   <element name="testResponse">
    <complexType>
     <sequence>
      <element name="testReturn" type="xsd:string"/>
     </sequence>
    </complexType>
   </element>
  </schema>
 </wsdl:types>
   <wsdl:message name="testRequest">
      <wsdl:part element="impl:test" name="parameters">
      </wsdl:part>
   </wsdl:message>
   <wsdl:message name="testResponse">
      <wsdl:part element="impl:testResponse" name="parameters">
      </wsdl:part>
   </wsdl:message>
   <wsdl:portType name="AxisTest">
      <wsdl:operation name="test">
         <wsdl:input message="impl:testRequest" name="testRequest">
       </wsdl:input>
         <wsdl:output message="impl:testResponse" name="testResponse">
       </wsdl:output>
      </wsdl:operation>
   </wsdl:portType>
   <wsdl:binding name="AxisTestSoapBinding" type="impl:AxisTest">
      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="test">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="testRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="testResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="AxisTestService">
      <wsdl:port binding="impl:AxisTestSoapBinding" name="AxisTest">
         <wsdlsoap:address location="http://localhost:8080/AxisTestServer/services/AxisTest"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>
关于wsdl文件的读法此处不再叙述,需要注意的是wsdl文件是 从下向上读的。

在wsdl文件最后可以发现wsdl的地址,启动服务后,通过访问

http://localhost:8080/AxisTestServer/services/AxisTest?wsdl

会显示此wsdl文件的内容。

如何调用这个WebService呢?除了用Axis调用之外,还可以使用工具进行调用,在这里,笔者用SOAP UI进行调用。

首先,在SOAP UI中新建一个Project,选中项目,按右键添加wsdl

在弹窗中输入wsdl地址,点击完成;

至此,使用SOAP UI调用WebService方法结束。

    使用Axis调用WebService

#Axis路径
set Axis_Lib=D:\axis-1_4\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
#输出路径
set Output_Path=D:\AxisTest
#输出的包名
set Package=com.pansoft.axis

%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% http://localhost:8080/AxisTestServer/services/AxisTest?wsdl

这里我是用批处理命令生成客户端调用代码,Eclipse中也有相应插件,但是由于版本等问题,生成时报错,暂未找到相应的解决办法,这里就不列出使用插件调用的方式了。

生成成功之后可以看到生成的类,如下图。


其中,AxisTestSoapBindingStub类为具体实现类,AxisTest_PortType为其接口类,参数配置类为AxisTestServiceLocator,AxisTestService类为其接口类。下面是具体的调用代码:

	public static void main(String[] args) throws ServiceException, RemoteException {
		// TODO Auto-generated method stub
		AxisTestServiceLocator  locator = new AxisTestServiceLocator();
		AxisTestSoapBindingStub bis = (AxisTestSoapBindingStub) locator.getAxisTest();
		String pRet = bis.test("test");//输入的参数
		System.out.println(pRet);
	}
启动服务,执行方法后会在控制台输出服务器端返回的信息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值