`

使用Axis在Tomcat下发布Webservice操作指南

    博客分类:
  • java
阅读更多

 最近在工作过程中总是需要向其它项目组提供Webservice的接口,由于开始需求不是很明确,接口的定义经常需要变更,每一次下来都需要将Java到wsdl,从wsdl到Java,再根据wsdd文件在tomcat上deploy服务这个过程重复一遍.在这个过程中经常出现一些问题,尤其是长期不用axis之后再突然这么用上一用的时候,总是有或多或少的问题存在,遂经上述过程的一些详细操作步骤整理了一些,供参考.

      使用Axis在Tomcat下发布Webservice有如下几个步骤:

      (1)用JavaBean写好要发布的服务的定义

      (2)使用Java2WSDL命令,根据JavaBean生成WSDL文件

      (3)使用Wsdl2Java命令,根据WSDL文件生成服务端源代码,以及deploy.wsdd文件

      (4)根据deploy.wsdd文件在tomcat下发布Webservice服务          

    (1)用JavaBean写好要发布的服务的定义


     以用户注册为例,需要提供如下样式的用户注册服务,输入参数为com.huawei.mtv.commons.services.schemas.UserRegisterEvt,输出参数为com.huawei.mtv.commons.services.schemas.UserRegisterResp.  

      UserManage接口文件定义:

    view plaincopy to clipboardprint?
package com.huawei.mtv.commons.services;  
import com.huawei.mtv.commons.services.schemas.UserRegisterEvt;  
import com.huawei.mtv.commons.services.schemas.UserRegisterResp;  
public class UserManage  
{  
    public UserRegisterResp register(UserRegisterEvt evt)  
    {  
        return null;  
    }  

package com.huawei.mtv.commons.services;
import com.huawei.mtv.commons.services.schemas.UserRegisterEvt;
import com.huawei.mtv.commons.services.schemas.UserRegisterResp;
public class UserManage
{
 public UserRegisterResp register(UserRegisterEvt evt)
 {
  return null;
 }
}

          输入参数UserRegisterEvt源代码:

   view plaincopy to clipboardprint?
package com.huawei.mtv.commons.services.schemas;  
public class UserRegisterEvt  implements java.io.Serializable {  
        private int accessCode;     
    private java.lang.String level;  
        private java.lang.String userId;  
        public UserRegisterEvt(){  
        }  
      
        public int getAccessCode(){  
        return accessCode;  
    }  
 
    public void setAccessCode(int accessCode){  
        this.accessCode = accessCode;  
    }  
 
    public java.lang.String getLevel(){  
        return level;  
    }  
 
    public void setLevel(java.lang.String level){  
        this.level = level;  
    }  
 
    public java.lang.String getUserId(){  
        return userId;  
    }  
 
    public void setUserId(java.lang.String userId){  
        this.userId = userId;  
    }  

package com.huawei.mtv.commons.services.schemas;
public class UserRegisterEvt  implements java.io.Serializable {
        private int accessCode;  
 private java.lang.String level;
        private java.lang.String userId;
        public UserRegisterEvt(){
        }
   
        public int getAccessCode(){
  return accessCode;
 }

 public void setAccessCode(int accessCode){
  this.accessCode = accessCode;
 }

 public java.lang.String getLevel(){
  return level;
 }

 public void setLevel(java.lang.String level){
  this.level = level;
 }

 public java.lang.String getUserId(){
  return userId;
 }

 public void setUserId(java.lang.String userId){
  this.userId = userId;
 }

         输出参数UserRegisterResp源代码:

   view plaincopy to clipboardprint?
package com.huawei.mtv.commons.services.schemas;  
public class UserRegisterResp  implements java.io.Serializable {  
        private java.lang.String description;  
    private java.lang.String returnCode;  
        public java.lang.String getDescription(){  
        return description;  
    }  
 
    public void setDescription(java.lang.String description){  
        this.description = description;  
    }  
 
    public java.lang.String getReturnCode() {  
        return returnCode;  
    }  
 
    public void setReturnCode(java.lang.String returnCode){  
        this.returnCode = returnCode;  
    }  

package com.huawei.mtv.commons.services.schemas;
public class UserRegisterResp  implements java.io.Serializable {
        private java.lang.String description;
 private java.lang.String returnCode;
        public java.lang.String getDescription(){
  return description;
 }

 public void setDescription(java.lang.String description){
  this.description = description;
 }

 public java.lang.String getReturnCode() {
  return returnCode;
 }

 public void setReturnCode(java.lang.String returnCode){
  this.returnCode = returnCode;
 }
}

       在Eclipse环境下将上述定义文件导出为mtv-common.jar包.至此第一步算是完成了. 

  (2)使用Java2WSDL命令,根据JavaBean生成WSDL文件


      这里我使用的是axis-1_4版本,具体使用到的jar包(只使用了axis-1_4中lib目录中自带的jar包)和命令参见如下代码。

      java2wsdl.bat批处理文件 :

  view plaincopy to clipboardprint?
set axis_home=D:\software\axis2\axis-1_4\lib  
set axis_path=%axis_home%\axis-ant.jar  
set axis_path=%axis_path%;%axis_home%\axis.jar  
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar  
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar  
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;  
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar  
set axis_path=%axis_path%;%axis_home%\mtv-common.jar  
set axis_path=%axis_path%;%axis_home%\saaj.jar  
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar  
set CLASSPATH=%CLASSPAHT%;%axis_path%  
java org.apache.axis.wsdl.Java2WSDL -n "urn:UserManage"  -p"com.huawei.mtv.commons.services" "urn:UserManage" -o "UserManage.wsdl" -l "http://localhost:8080/axis/services/UserManage"   com.huawei.mtv.commons.services.UserManage 
set axis_home=D:\software\axis2\axis-1_4\lib
set axis_path=%axis_home%\axis-ant.jar
set axis_path=%axis_path%;%axis_home%\axis.jar
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar
set axis_path=%axis_path%;%axis_home%\mtv-common.jar
set axis_path=%axis_path%;%axis_home%\saaj.jar
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar
set CLASSPATH=%CLASSPAHT%;%axis_path%
java org.apache.axis.wsdl.Java2WSDL -n "urn:UserManage"  -p"com.huawei.mtv.commons.services" "urn:UserManage" -o "UserManage.wsdl" -l "http://localhost:8080/axis/services/UserManage"   com.huawei.mtv.commons.services.UserManage

 

    执行上述批处理文件之后就生成了UserManage.wsdl文件了. 

    Java2WSDL命令的个参数含义如下:

  view plaincopy to clipboardprint?
-o:指定输出的WSDL文件的文件名。      
 
-l:指定服务的位置。  
          
-n:WSDL文件的目标名字空间。  
          
-p:指定从package到名字空间的映射,这里可以有多个映射。 
-o:指定输出的WSDL文件的文件名。   

-l:指定服务的位置。
       
-n:WSDL文件的目标名字空间。
       
-p:指定从package到名字空间的映射,这里可以有多个映射。

  

  要注意如下几点:

  -o -l -n -p这些选项最好与后面选项对应的值之间没有空格,尤其是-p参数,有空格的话在生成WSDL文件的时候会报错.    

  (3)使用Wsdl2Java命令,根据WSDL文件生成服务端源代码,以及deploy.wsdd文件


    使用如下wsdl2java.bat批处理文件来生成Webservice服务端和客户端源代码.

  view plaincopy to clipboardprint?
set axis_home=D:\software\axis2\axis-1_4\lib  
set axis_path=%axis_home%\axis-ant.jar  
set axis_path=%axis_path%;%axis_home%\axis.jar  
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar  
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar  
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;  
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar  
set axis_path=%axis_path%;%axis_home%\mtv-common.jar  
set axis_path=%axis_path%;%axis_home%\saaj.jar  
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar  
set CLASSPATH=%CLASSPAHT%;%axis_path%  
java org.apache.axis.wsdl.WSDL2Java --server-side --skeletonDeploy true UserManage.wsdl 
set axis_home=D:\software\axis2\axis-1_4\lib
set axis_path=%axis_home%\axis-ant.jar
set axis_path=%axis_path%;%axis_home%\axis.jar
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar
set axis_path=%axis_path%;%axis_home%\mtv-common.jar
set axis_path=%axis_path%;%axis_home%\saaj.jar
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar
set CLASSPATH=%CLASSPAHT%;%axis_path%
java org.apache.axis.wsdl.WSDL2Java --server-side --skeletonDeploy true UserManage.wsdl

   执行上述批处理文件之后会生成源代码的目录与结构如下:

   UserManage_pkg包下生成文件如下:

  view plaincopy to clipboardprint?
deploy.wsdd  
undeploy.wsdd  
UserManage.java  
UserManageService.java  
UserManageServiceLocator.java  
UserManageSoapBindingImpl.java  
UserManageSoapBindingSkeleton.java  
UserManageSoapBindingStub.java 
deploy.wsdd
undeploy.wsdd
UserManage.java
UserManageService.java
UserManageServiceLocator.java
UserManageSoapBindingImpl.java
UserManageSoapBindingSkeleton.java
UserManageSoapBindingStub.java  

  另外也生成了com包,该包下的java文件与我们最初在第一步定义的文件基本相同.

  利用Eclipse将上述生成的Java代码进行编译,导出为mtv-service.jar

     (4)根据deploy.wsdd文件在tomcat下发布Webservice服务

     将axis-1_4\webapps目录下的axis直接拷贝到tomcat/webapps目录下,再将mtv-service.jar包放到tomcat/webapps/axis/WEB-INFO/lib目录下,将tomcat启动,执行如下deploy.bat批处理命令即可发布UserManage服务了.

     deploy.bat批处理文件如下:    

     view plaincopy to clipboardprint?
set axis_home=D:\software\axis2\axis-1_4\lib  
set axis_path=%axis_home%\axis-ant.jar  
set axis_path=%axis_path%;%axis_home%\axis.jar  
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar  
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar  
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;  
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar  
set axis_path=%axis_path%;%axis_home%\saaj.jar  
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar  
set CLASSPATH=%CLASSPAHT%;%axis_path%  
java org.apache.axis.client.AdminClient -l"http://localhost:9000/axis/services/UserManage" deploy.wsdd 
set axis_home=D:\software\axis2\axis-1_4\lib
set axis_path=%axis_home%\axis-ant.jar
set axis_path=%axis_path%;%axis_home%\axis.jar
set axis_path=%axis_path%;%axis_home%\commons-discovery-0.2.jar
set axis_path=%axis_path%;%axis_home%\commons-logging-1.0.4.jar
set axis_path=%axis_path%;%axis_home%\jaxrpc.jar;
set axis_path=%axis_path%;%axis_home%\log4j-1.2.8.jar
set axis_path=%axis_path%;%axis_home%\saaj.jar
set axis_path=%axis_path%;%axis_home%\wsdl4j-1.5.1.jar
set CLASSPATH=%CLASSPAHT%;%axis_path%
java org.apache.axis.client.AdminClient -l"http://localhost:9000/axis/services/UserManage" deploy.wsdd

    

    经过上述4大步骤,我们的UserManage服务就顺利发布了.

    通过http://localhost:9000/axis/servlet/AxisServlet即可查看到刚才发布UserManage服务了.

    注意:

    在存在server-config.wsdd文件的时候上述方式发布Webservice服务则可能出现错误,这时我们可以先将原来的server-config.wsdd文件重新命名,在按照上述步骤(4)的方式发布服务,会再次生成新的server-config.wsdd文件。我们可以将新生成的文件中类似如下代码块复制到原来的server-config.wsdd文件中就可以将新的需要发布的服务合并到原来的服务中去,实现新老服务共存。

    view plaincopy to clipboardprint?
<service name="UserManage" provider="java:RPC">  
 <parameter name="allowedMethods" value="*"/>  
 <parameter name="typeMappingVersion" value="1.2"/>  
 <parameter name="wsdlPortType" value="UserManage"/>  
 <parameter name="className" value="UserManage_pkg.UserManageSoapBindingSkeleton"/>  
 <parameter name="wsdlServicePort" value="UserManage"/>  
 <parameter name="wsdlTargetNamespace" value="urn:UserManage"/>  
 <parameter name="wsdlServiceElement" value="UserManageService"/>  
 <parameter name="schemaUnqualified" value="http://schemas.services.commons.mtv.huawei.com"/>  
 <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns1:UserRegisterEvt" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.huawei.mtv.commons.services.schemas.UserRegisterEvt" xmlns:ns1="http://schemas.services.commons.mtv.huawei.com"/>  
 <typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns2:UserRegisterResp" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.huawei.mtv.commons.services.schemas.UserRegisterResp" xmlns:ns2="http://schemas.services.commons.mtv.huawei.com"/>  

 </service>  

分享到:
评论

相关推荐

    eclipse+tomcat+axis下创建WebService

    在本文中,我们将深入探讨如何在 Eclipse 集成开发环境中,利用 Tomcat 服务器和 Axis 插件创建并发布一个 WebService。这是一个详细步骤的指南,涵盖了从环境准备到测试 WebService 的全过程。 首先,我们需要确保...

    axis发布webservice教程源代码

    2. `webServices发布.doc` - 这很可能是教程文档,包含了详细的步骤和指南,解释如何使用Axis发布Web服务。用户可以在这里找到关于设置环境、编写服务接口、生成WSDL文件以及部署服务的具体信息。 3. `...

    AXIS入门指南-webservice

    本指南旨在为初学者提供AXIS框架下开发WebService的详细步骤,涵盖了从获取开发资源、生成 stub、编写服务器端代码到客户端测试的全过程。AXIS是一个开源的Java库,它提供了创建、部署和使用Web服务的工具,是基于...

    axis2_WebService_开发指南

    在某些情况下,可能会需要使用控制台命令(如Dos命令)来发布WebService,Axis2同样支持这种操作。对于需要跨多个WebService进行会话管理的情况,Axis2也提供了相应的解决方案。此外,对于需要异步调用WebService的...

    axis2创建webservice操作手册.doc

    本文档旨在为初次接触WebService技术的开发者提供一份详细的操作指南,帮助他们了解WebService的基本原理以及如何使用Axis2框架来构建WebService环境。 ##### 1.2 为什么要使用WebService WebService作为一项新兴的...

    Axis WebService 技术指南,开发文档

    本指南将详细介绍如何使用 Axis 进行 WebService 开发,包括从基础入门到高级特性的应用。 ### 1. Axis 简单入门 在开始之前,你需要从官方网站下载 Axis 的工程和必要的库文件,例如 `axis-bin-1.4`。解压缩后,...

    axis+ksoap2开发webservice配置指南

    总的来说,"axis+ksoap2开发webservice配置指南"是一个关于在Java环境下使用Axis创建Web服务,并使用ksoap2在J2ME平台上进行调用的实践教程。这个过程涉及到了Web服务的生命周期管理、SOAP通信机制以及J2ME平台上的...

    axis2搭建webService并包含android调用此WebService服务案例

    总结,本文档提供了完整的指南,从在Eclipse和Tomcat环境中设置axis2 webService,到在Android客户端使用ksoap2库调用这些服务。对于想要了解和实践Android与webService交互的开发者来说,这是一个宝贵的资源。

    axis2实现webservice

    ### Axis2实现WebService知识点 #### 一、Axis2简介 - **定义**:Apache Axis2是基于Java的一个开源的WebService框架,它支持...这为开发者提供了一个清晰的指南,帮助他们更好地理解和使用Axis2进行WebService开发。

    Axis 自动生成WebService

    标题 "Axis 自动生成WebService" 涉及到的是在IT行业中创建和使用Web服务的一个关键工具——Axis。Web服务是一种基于互联网的软件应用,允许不同系统之间的数据交换,通常使用XML作为数据格式,SOAP协议进行通信。...

    Axis2 WebService 开发指南

    通过本指南,我们不仅了解了Axis2 WebService的基本概念和操作流程,还深入探讨了一些高级特性。对于希望利用Axis2进行高效、灵活的WebService开发的开发者来说,本指南提供了一个全面且实用的参考指南。

    axis2 webservice开发指南.pdf

    ### Axis2 WebService 开发指南知识点详述 #### 一、Axis2 WebService 技术概览 **Axis2** 是Apache的一个开源项目,旨在提供一个高性能、灵活且可扩展的Web服务框架,用于实现基于SOAP协议的Web服务。与前代产品*...

    axis2;WebService

    【Axis2 WebService 开发指南】是关于使用Apache Axis2框架创建和操作Web服务的教程。Axis2是Axis1的升级版,提供了更多的功能和改进的性能。在开始之前,你需要下载并安装必要的开发工具,包括Axis2的jar包和...

    axis2-WebService-开发指南.docx

    需要将下载下来的 axis2-1.5.3-war.zip 文件中的 axis2.war 文件放在 Tomcat 目录下,启动 Tomcat 后,将 war 文件转换成一个可以跑起来的 axis2 项目。 4. 简单 WebService 示例: 可以编写一个简单的 ...

    AXIS1.4webservice服务端和客户端例子

    在这个"AXIS1.4 WebService服务端和客户端例子"中,我们将深入探讨如何使用AXIS1.4搭建服务端和客户端,以及如何进行远程调用。 首先,让我们从服务端开始。服务端是提供Web服务的系统,它可以接收客户端的请求并...

    axis2 axis webservice web 服务

    标题中的“Axis2 Axis WebService Web 服务”指的是Apache Axis2,它是一个强大的Web服务框架,主要用于构建和部署Web服务。Axis2是Apache SOAP(Simple Object Access Protocol)项目的第二代实现,专门设计用于...

    axis1-WebService

    【Axis1.x WebService开发指南】 Axis1.x是Apache软件基金会的一个开源项目,它提供了一个强大的框架,用于创建和部署Web服务。这个经典教程主要针对的是Axis1版本,旨在帮助开发者理解和掌握如何使用Axis来构建和...

    Axis开发WebService 指南

    Axis作为Java平台上的WebService框架,使得开发者可以轻松地在Java应用中创建和使用Web服务。 在开始使用Axis之前,确保你的开发环境中已经安装了Java Development Kit (JDK) 和Apache Ant。Ant是一个Java构建工具...

Global site tag (gtag.js) - Google Analytics