`

使用axis发布webservice(一)

 
阅读更多

 JDK 1.4.2 + Myeclipse 6.0(实在经不起诱惑,尝尝鲜) + Tomcat 5.0.28 + AXIS 1.4。 AXIS 1.4包可以在http://ws.apache.org/axis/ 找到。 假设所有的环境你已经搭好,并且AXIS包也已经下好了。OK, Here we go~

         解压axis-bin-1_4.zip这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到 %TOMCAT_HOME%\webapps目录下,之后拷贝activation.jar、mail.jar、tools.jar到%TOMCAT_HOME%\webapps\axis\WEB-INF\lib目录下。启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp  如果访问成功,恭喜你!基本的配置你已经做完了。

PS:此处的%TOMCAT_HOME%指的是Tomcat的安装目录,至于那另外的三个jar包,J2EE 1.4库里就能找的到。

        现在来说一下最关键的Webservice的发布。AXIS提供了两种发布方式,一种是即时发布(Instant Deployment),另外一种是定制发布(Custom Deployment)。即时发布提供了一种非常简单的webservice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。这里也将会以定制发布为重点来介绍。

     1.即时发布 JWS (Java Web Service) Files - Instant Deployment     

    即时发布提供了一种非常简单发布方式,发布者只要有Java源代码(也就是.java文件),然后把其后缀名改成jws(也就是 java web service的缩写)拷贝到%TOMCAT_HOME%\webapps\axis目录下即完成了所有的发布工作。AXIS的编译引擎会处理接下来的所有事情。下面是一段示例代码:

java 代码
 
public   class  HelloAXIS {    
       
     public  String Hello(String name){   
         return   "AXIS say hello to "  + name;   
    }   
} 
 
        把 HelloAXIS.java 文件改成 HelloAXIS.jws 然后拷贝到%TOMCAT_HOME%\webapps\axis目录下,启动Tomcat之后访问 http://localhost:8080/axis/HelloAXIS.jws  如果能看到 Click to see the WSDL这个超链接就说明已经发布成功了,点击进去就可以看到这个Webservice的WSDL描述文件。server端的发布已经完成了,接下来就是编写Client端测试代码了。

 

java 代码
 
package  com.chnic.test;    
  
import  java.net.URL;   
  
import  javax.xml.namespace.QName;   
  
import  org.apache.axis.client.Call;   
import  org.apache.axis.client.Service;   
  
public   class  Test {   
       
     public   static   void  main(String[] args)  throws  Exception{   
        String targetEendPoint =  "http://localhost:8080/axis/HelloAXIS.jws" ;   
        Service service =  new  Service();   
        Call call = (Call) service.createCall();               
        call.setOperationName( new  QName(targetEendPoint,  "Hello" ));   
        call.setTargetEndpointAddress( new  URL(targetEendPoint));   
        String result = (String) call.invoke( new  Object[]{ "Robert" });   
        System.out.println(result);   
    }   
}   
 
 

       测试代码很简单,如果熟悉java反射机制的朋友不用两分钟就能看明白。运行后客户端控制台出现 AXIS say hello Robert。测试成功。果然很简单吧。不过在这简单背后却是以牺牲灵活性为代价的。假如你现在手里只有.class 或者一个jar包,jws就不再能满足你的需求了,最要命的就是即时发布不支持带包的类,这点AXIS的用户手册上写的也很明白。

 Important: JWS web services are intended for simple web services. You cannot use packages in the pages, and as the code is compiled at run time you can not find out about errors until after deployment. Production quality web services should use Java classes with custom deployment.

 

      2.定制发布 Custom Deployment - Introducing WSDD

      比起即时发布定制发布更加烦琐也更复杂,但是换来的却是更大的灵活性,因此在实际项目中定制发布还是不二的选择。定制发布需要你自己编写一个WSDD(Web Service Deployment Descriptor)文件,这个东东类似与XML稍后会做出介绍。废话不多说,我们来看代码:

 

java 代码
package  com.chnic.webservice;    
  
public   class  HelloWorld {   
       
     public  HelloWorld(){   
           
    }   
       
     public  String hello(String str){   
         return   "Hello "  + str;   
    }   
       
     public   int  add( int  a,  int  b){   
         return  a + b;   
    }   

 

        一个带包的很简单的类,在eclipse下编译后按照包名拷到 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes 目录下。以这个类为例,拷贝完之后这个HelloWorld.class的路径就是 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes\com\chnic\webservice。PS: 如果嫌这样太麻烦,可以另外建一个Java Web工程用myeclipse的发布工具发布到Tomcat之后,整体一次性拷贝到websericve的工程中。

       接下来就需要编写发布文件deploy.wsdd。到%TOMCAT_HOME%\webapps\axis\WEB-INF 目录下建立这个文件并在其中添加如下内容:

xml 代码
 
< 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 = "com.chnic.webservice.HelloWorld" />   
         < parameter   name = "allowedMethods"   value = "*" />        
    </ service >    
</ deployment >    

 

       简单的介绍下各个节点的含义,"HelloWorld"当然是这个webservice的名字,后面紧跟的java:RPC指的是服务类型。这里一共有有4种类型,分别是:RPC, Document, Wrapped 和 Message。有兴趣可以看下 org.apache.axis.providers这个包和子包下面的类的API文档。之后的parameter节点第一个当然是指出具体的类,第二个从字面上也很好理解:允许调用的方法。这里的配置告诉引擎可以调用所有的public方法,当然你也可以自己指定。

     编写完配置发布文件之后,cmd打开windows的控制台,进入%TOMCAT_HOME%\webapps\axis\WEB-INF目录下键入如下命令  

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd  

       之后控制台返回Processing file deploy.wsdd 和 Done processing 这两段话即说明发布成功。(此时会在同级目录生成一个server-config.wsdd文件 )在这里的AdminClient是AXIS提供的一个客户端管理工具。至于java.ext.dirs的含义可以去了解一下classloader和JVM类装载机制方面的知识,在这里就不多解释。 还有一点要注意的是在发布的时候Tomcat服务必须处于启动状态,否则就会抛出一堆无法连接的异常信息。

-------------------------------------------------------

 

备注:

------------------------------------------------------------------------------------------------------------------------------

在运行java org.apache.axis.client.AdminClient deploy.wsdd时,可能出现错误:

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

       Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/Axis/client/AdminClient 

       could not find the main class: org.apache.Axis.client.AdminClient

解决办法1:

1)在系统环境变量里新添变量

AXIS_HOME=D:\Tomcat\webapps\axis\WEB-INF 
AXISCLASSPATH=.;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;

2)这个环境变量里的值,对应着AXIS_HOME\WEB-INF\lib下的所有jar文件,注意一定要一一对应,错一不可。

3)确保tomcat开启

4)在cmd中运行 java -cp %AXISCLASSPATH% ora.apache.axis.client.AdminClient deploy.wsdd 

解决办法2:

1)在系统环境变量里新添变量

AXIS_HOME=D:\Tomcat\webapps\axis\WEB-INF 


2)在系统环境变量的classpath后添加.;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;

3)在cmd中运行 java ora.apache.axis.client.AdminClient deploy.wsdd

 

最终得到如下输出:

      Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart

      Processing file deploy.wsdd
    <Admin>Done processing</Admin>

虽然提示有一个警告 Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart,可以无视这个警告。

     生成成功

 

 

 

-------------------------------------------------------

发布成功之后你可以通过访问 http://localhost:8080/axis/servlet/AxisServlet 来查看你所有的定制发布的服务。

客户端测试代码
 
String targetEendPoint =  "http://localhost:8080/axis/services/HelloWorld" ;    
Service service =  new  Service();   
Call call = (Call) service.createCall();   
call.setTargetEndpointAddress( new  URL(targetEendPoint));   
  
call.setOperationName( new  QName(targetEendPoint,  "hello" ));        
String result = (String) call.invoke( new  Object[]{ "Robert" });   
System.out.println(result);   
  
call.setOperationName( new  QName(targetEendPoint,  "add" ));   
Integer res = (Integer) call.invoke( new  Object[]{ new  Integer( 1 ),  new  Integer( 2 )});   
System.out.println( "The result is: "  + res);  

 

       运行测试代码,控制台显示 Hello Robert 和 The result is: 3 这两句话,说明发布成功。仔细观察下发现其实除了那个targetEndpoint 之外,即时发布和定制发布的客户端调用代码基本上都是一样的。定制发布的URL可以在WSDL文件里找到。 

分享到:
评论

相关推荐

    axis 发布webservice的步骤

    标题中的“axis发布webservice的步骤”涉及到的是在Java环境中使用Apache Axis库创建并部署Web服务的过程。Apache Axis是开源的Web服务工具包,它允许开发者通过简单的API将Java类暴露为Web服务,或者调用远程Web...

    axis发布webservice教程源代码

    【标题】"Axis发布Web服务教程源代码"指的是使用Apache Axis框架来创建并发布Web服务的教学资源,其中可能包含了详细的步骤、示例代码以及相关的配置文件。Apache Axis是开源的Java库,它允许开发者在Java平台上快速...

    AXIS发布webservice

    AXIS发布WebService是一个在IT行业中常见的任务,尤其在企业级应用集成或Web服务开发中扮演着重要角色。AXIS是一个开放源码的Java库,它提供了用于创建、部署和使用Web服务的工具和API。本篇文章将深入探讨AXIS如何...

    axis2发布webservice和调用axis2服务接口

    总结起来,使用Axis2发布Web服务和生成客户端代码调用服务是一个标准化的过程,涉及到服务的编写、打包、部署以及客户端的代码生成和调用。了解并熟练掌握这一过程,对进行Java Web服务开发至关重要。在实际开发中,...

    axis2webservice接口例子

    标题中的“axis2webservice接口例子”指的是使用Apache Axis2框架创建的一个Web服务接口实例。Apache Axis2是Java平台上的一款强大的Web服务开发工具,它提供了高效、灵活且可扩展的环境来构建和部署Web服务。这个...

    SpringBoot开发WebService之Axis示例

    在本文中,我们将深入探讨如何使用SpringBoot框架开发基于Axis的Web服务。SpringBoot以其便捷的启动和配置方式,已经成为Java开发中的首选框架之一。而 Axis 是一个流行的Apache项目,用于创建和部署Web服务,它提供...

    spring集成axis发布webservice源码

    spring集成axis发布webservice源码 spring集成axis发布webservice源码 spring集成axis发布webservice源码 spring集成axis发布webservice源码

    Weblogic10.3及tomacat6.0下使用axis发布webService

    详细描述了如何在tomacat6.0下发布webService,并以此为基础,进一步重点描述了如何在Weblogic10.3下发布webService。网上多半描述的是Weblogic8.1版本,而很少有关Weblogic10版本下发布webService。据本人了解,这...

    Axis1发布webservice服务

    本项目是一个关于如何使用Axis1发布Web服务的示例,包含了必要的jar包和其他文件,可以直接运行。 首先,我们需要了解Web服务的基本概念。Web服务是一种基于互联网协议的软件,能够通过XML(eXtensible Markup ...

    axis发布webservice详细步骤(以实例讲解)

    在本文中,我们将深入探讨如何使用Axis框架发布Web服务,以实例的方式逐步解析整个过程。首先,我们需要了解Axis,它是一个开源的Java Web服务开发工具,由Apache软件基金会开发,用于简化SOAP(简单对象访问协议)...

    Axis2WebService 源码

    Axis2 WebService是一个开源的、基于Java的Web服务框架,由Apache软件基金会开发。它提供了构建和部署Web服务以及处理SOAP消息的强大工具。这个源码包可能是为了帮助开发者深入理解Axis2的工作原理,或者用于自定义...

    Spring集成axis2实现webservice所用到的包

    4. **部署和发布服务**:如果我们要在Spring中发布一个Web服务,可以使用Axis2的`SpringServiceDeployer`。这需要将服务类和相关的配置文件打包成一个Axis2模块(.aar文件),然后部署到Axis2服务器上。 5. **测试...

    使用Axis2搭建_WebService

    【使用Axis2搭建WebService】是关于在Java环境中利用Apache Axis2框架创建Web服务的过程。Apache Axis2是一个流行的Web服务引擎,用于构建和部署SOAP(简单对象访问协议)和RESTful Web服务。 首先,搭建环境是关键...

    Axis和WebService配置使用之Hello

    标题中的“Axis和WebService配置使用之Hello”表明我们将探讨如何在Java环境中使用Axis库来创建和使用Web服务,实现一个简单的“Hello World”示例。 Axis是一个开源的Java SOAP(简单对象访问协议)工具包,它允许...

    Axis实现webservice完整实例

    本实例将详细介绍如何使用 Axis 实现 WebService 的服务端和客户端。 ### 1. WebService 基础 WebService 是基于开放标准(如 WSDL、SOAP 和 UDDI)的分布式计算模型,使得不同系统之间的数据交换变得简单。WSDL...

    axis2发布webservice

    Axis2 提供了多种方式来编写和发布 WebService,下面介绍使用 POJO 形式发布 WebService。 使用 POJO 形式发布 WebService 在 Axis2 中,不需要进行任何的配置,就可以直接将一个简单的 POJO 发布成 WebService。...

    使用axis开发webservice使用的jar包

    在Java世界中,Apache ...总之,使用Apache Axis开发Web服务涉及多个jar包,它们共同构成了一个强大的框架,帮助开发者轻松地创建、部署和消费Web服务。理解每个jar包的作用并熟练使用它们,是成功构建Web服务的关键。

    Android axis调用Webservice

    - 服务发布后,可以通过Axis2的wsdl2java工具,根据服务的WSDL(Web Service Description Language)文件生成客户端所需的Java类(stubs)。 - 这些类将封装调用Web Service的具体方法,简化了调用流程。 4. **...

    使用axis调用WebService服务端

    压缩包中包含详细代码以及所用到的jar,是完整可运行的project。当然,需要正确的路径支持才可以运行,本人没有把我所用到的路径贴出,改为本机地址。

    axis调用webservice接口所需jar包.rar

    axis调用第三方webservice接口所需的jar包,包括axis-1.4.jar,axis-jaxrpc-1.3.jar,axis-jaxrpc-1.4.jar,commons-discovery-0.5.jar,commons-logging-1.2.jar,cxf-rt-databinding-jaxb-3.3.1.jar,javax.mail-...

Global site tag (gtag.js) - Google Analytics