`
shingo7
  • 浏览: 18706 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用Axis发布Webserive

阅读更多

前戏:

       其实有很多方式可以发布Webservice,我试验成功的有xfire和Axis,本来对xfire情有独钟的,无奈xfire的jar包太多,随便数了下有40多个,与我原项目中的多数jar包相冲突,并且有的版本和名称都不一样,手动挑选可能会发生些不可预计的错误,于是我转用Axis.

 

       无论用哪种方式开发,或者开发什么,首先你都得到其官网下载它的包.我下的是最新的axis-bin-1_4.tar.gz,找到它里面的lib文件夹,它包括这几个jar包.

 

       

 

       这里面共有8个jar包,往往log4j-1.2.8.jar和commons-logging-1.0.4.jar与原工程中的包会产生冲突,所以我们可只导入其余6个jar包.

       接下来我们在我们项目中书写将要被调用的类.

      

       这个类的意图是为了将来客户端访问的时候,在客户端传入一个字符串参数,在服务端响应后返回一串字符串.

 

       这个类书写完成后,将其改名为Hello.jws,将你的项目发布后,假设你的Hello.jws不在任何包中,浏览器的地址栏输入: http://172.20.108.211:8080/axis/Hello.jws?wsdl 即可看到你想要发布服务的wsdl文件.     

 

       然后为了客户端能够方便调用,还需要写两个文件

       在WEB-INF目录下创建deploy.wsdd,内容如下

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

      相信大家应该看得很明白了,<parameter name="className" value="Hello"/>代表我要发布的服务的类名是什么,第二句showKeyword代码客户端可以调用我哪个方法.

 

    这个文件完了还要书写一个server-config.wsdd文件,这文件可以手写生成,也可以让系统自动生成

 

    当项目发布后,打开DOS窗口,进入到deploy.wsdd文件所在目录,假如你的应用服务器是Tomcat,打入如下语句

D:\jakarta-tomcat-5.0.28\webapps\axis\WEB-INF>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd

系统会自动生成server-config.wsdd文件,内容就不贴了,太长了.

这里有个细节要注意的,-Djava.ext.dirs=lib 这句的意思是所有jar文件要从你项目中寻找,这里我们还需要导入两个jar文件activation.jar和mail.jar.这两个文件在我们下载的官方包中是没有的,好像1.4版本前的包有这两个jar文件,导入到你程序中就可以了.

至此服务端的开发基本完成,接下来就是客户端了

 

客户端也导入之前所说的一些包,其实服务端很简单,可以写个类来调用刚才服务端发布的服务

例如你可以写

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://172.20.108.211:8080/axis/Hello?wsdl";

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

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

                         System.out.println( res );
   }
}

 

     这个类最重要的就是那串URL地址,我们可以通过这个URL地址来调用不同服务端发布的服务.

 

      其实由此已经可见一斑了,客户端往往调用的都是比我们这个例子复杂得多的逻辑,我们可以将这些逻辑在服务端写好,return出客户端所需要的就可以了.

  

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics