Axis

来源:互联网 发布:网络直播卖衣服 编辑:程序博客网 时间:2024/06/10 03:00

Axis入门

Axis总体上是一个SOAP引擎,但又不仅仅是个引擎.

       1)是一个简单的独立的服务器
       2)是一个可插入到servlet引擎(如Tomcat)中的服务
       3)可扩展的支持WSDL
       4)能根据WSDL产生JAVA文件/类
       5)包括一些例子程序
       6)包括一个可以监控TCP/IP包的工具
 
       Axis起源于IBM的SOAP4J,是Apache SOAP的第三代产品,相对于以前的版本,它有如下特性:
      1)快速,它使用了基于事件的SAX解析机制.
      2)灵活,用户可以灵活定制扩展.
      3)稳定,接口将会变动很小.
      4)基于组件开发.
      5)支持WSDL1.1

 

一、软件环境

 1、axis-1_2  (从apache网站下载最新axis-bin-1_2.zip解压即可)

 2、Tomcat5.0 

 3、JDK5.0

二、相关配置

 1、在你的%TOMCAT_HOME%commonlib下需要加入三个包 activation.jar、mail.jar、tools.jar

 2、环境变量设置

     AXIS_HOME 即axis-bin-1_2.zip解压的目录(我的是在F:soapaxis-1_2)

     AXIS_LIB    即 %AXIS_HOME%lib

    AXISCLASSPATH  即 %AXIS_LIB%axis.jar;%AXIS_LIB%commons-discovery-0.2.jar;%AXIS_LIB%commons -logging-1.0.4.jar;%AXIS_LIB%jaxrpc.jar;%AXIS_LIB%saaj.jar;%AXIS_LIB%log4j -1.2.8.jar;也就是把%AXIS_LIB%下所用JAR文件都导入

三、实验一下

   在%AXIS_HOME%webapps下找到axis文件夹,将其整个拷贝到%TOMCAT_HOME%webapps下,启动

  Tomcat,打开浏览器访问http://localhost:8080/axis/,出现以下页面说明你配置成功了。很简单吧:)


四、发布我们的第一个程序

   第一个程序简单的返回HELLO WORLD!

  HelloWorld.java

public class HelloWorld {
  public String sayHello()
  {
    return "HELLO WORLD!"; 
  } 
}

我们的第一种发布方式:

将HelloWorld.java拷贝到%TOMCAT_HOME%webappsaxis下,然后将其改名为HelloWorld.jws,这样AXIS就自然将其发布了。现在写个客户端程序访问一下:

TestClient.java

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

import javax.xml.rpc.ParameterMode;

public class TestClient
{
   public static void main(String [] args) throws Exception {
       
       String endpoint = "http://localhost:" +"8080"+ "/axis/HelloWorld.jws";//指明服务所在位置

       Service  service = new Service();  //创建一个Service实例,注意是必须的!
       Call     call    = (Call) service.createCall();//创建Call实例,也是必须的!

     call.setTargetEndpointAddress( new java.net.URL(endpoint) );//为Call设置服务的位置

        call.setOperationName( "sayHello" );//注意方法名与HelloWorld.java中一样!!

         String res = (String) call.invoke( new Object[] {} );//返回String,没有传入参数

                         System.out.println( res );
   }
}

我的测试是在jbuilder2005中,注意项目中要导入其自带的AXIS包(当然应该把其中JAR文件替换一下),可以看到程序返回了 "HELLO WORLD!"

可以看到在AXIS里发布服务其实是一件很容易的事,这是因为这个服务很简单的原因:)下面我们介绍第二种发布方式,这是常用的。

我们的第二种发布方式:

1、将HelloWorld.java编译成HelloWorld.class,放到%TOMCAT_HOME%webappsaxisWEB-INFclasses

      下

2、在%TOMCAT_HOME%webappsaxisWEB-INF下新建deploy.wsdd文件,即SOAP服务发布描述文件

     deploy.wsdd

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="HelloWorld" provider="java:RPC">
        <parameter name="className" value="HelloWorld"/>
        <parameter name="allowedMethods" value="sayHello"/>
    </service>
</deployment>

在DOS下转换目录到%TOMCAT_HOME%webappsaxisWEB-INF,命令:

java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

你 会发现目录下多了一个server-config.wsdd文件,这就是AXIS的配置文件,以后所有的服务发布描述都会在里面找到。(当然,你可以直接 修改它,不用再写deploy.wsdd)然后打开浏览器http://localhost: 8080/axis/servlet/AxisServlet,你就会看到你的服务已发布

同样用客户端程序访问一下:(注意和上边的差别!!)

HelloClient.java

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class HelloClient
{
   public static void main(String [] args) throws Exception {

       String endpoint = "http://localhost:" +"8080"+ "/axis/services/HelloWorld";//注意!差别仅仅在这里!!

       Service  service = new Service();
       Call     call    = (Call) service.createCall();
       call.setTargetEndpointAddress( new java.net.URL(endpoint) );
        call.setOperationName("sayHello"  );

         String res = (String) call.invoke( new Object[] {} );

                         System.out.println( res );
   }
}

好了,相信你对AXIS已有了大致的了解 

 

Other

一、Axis环境的安装

  1、安装环境 J2SE SDK 1.4,Tomcat 5.0,eclipse 3.2。

  2、到 http://xml.apache.org 网站下载Axis安装包。

  3、将Axis相关包文件放在WEB-INF/lib目录下。

  4、Axis可选的包:activation.jar; mail.jar; xmlsec-1.4.Beta1.jar拷贝到WEB-INF目录下,生成客户端时候需要使用。

  Axis支持三种web service的部署和开发,分别为:

  1、Dynamic Invocation Interface (DII)

  2、Dynamic Proxy方式

  3、Stubs方式

  前两种方式我就不介绍了,同事告诉我他们自己都不使用前两种方式,他们建议我们使用Stubs方式,因此我就主要就介绍一下第三种方式。注意,我自己的Java源代码是放在D:/workspace/test/目录下,Axis相关包文件放在D:/workspace/test/WEB-INF目录下。

  二、编写wsdd发布web服务,编写stub client访问web服务

  1、编写服务端程序server,SayHello.java,编译server.SayHello.java

package server;
public class SayHello
{
    public String getName(String name)
    {
        return "hello "+name;
    }
}

  2、编写wsdd文件

  deploy.wsdd文件内容如下:

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 <service name="SayHello" provider="java:RPC">
  <parameter name="className" value="server.SayHello.getName"/>
  <parameter name="allowedMethods" value="*"/>
 </service>
</deployment>

  3、发布服务:

  编辑一个deploy.bat,Axis_Lib为axis.jar路径。内容如下:

set Axis_Lib=D:/workspace/test/WEB-INF/lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://localhost:8080/test/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% deploy.wsdd

  执行这个批处理文件,这时候,如果提示成功的话,访问http://localhost:8080/test/services 就会显示服务列表。

  4、生成客户端client stub文件

  在浏览器上访问服务器端的服务,可以下载到WSDL文件,通过Axis的相关工具,可以自动从WSDL文件中生成Web Service的客户端代码。

  编写一个WSDL2Java.bat文件,其内容如下:

set Axis_Lib=D:/workspace/test/WEB-INF/lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:/workspace/test/src
set Package=server.SayHello
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% SayHello.wsdl

  执行这个批处理文件就可以生成client stub.

  生成的stub client文件列表为:SayHello.java,SayHelloService.java,SayHelloServiceLocator.java,SayHelloSoapBindingStub.java .

  5、编写客户端程序,编译并执行

  下面是一段junit测试客户端代码。

import java.net.URL;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestWSClient extends TestCase {

    public TestWSClient(String string) {
        super(string);
    }

    public void SayHelloClient() throws Exception {

        SayHelloService service = new SayHelloServiceLocator();
        SayHello_PortType client = service.getSayHello() ;
        String retValue = client.getName("clientname");
        System.out.println(retValue);

    }

    public static Test suite() {
        TestSuite suite = new TestSuite();
        suite.addTest(new TestWSClient("SayHelloClient"));
        return suite;
    }
}

  至此,整个服务器端和客户端的Web Service框架代码就完成了,剩下的就是在里面加入你的业务代码了,怎么样,Web Service并不难开发吧。