`
ufopw
  • 浏览: 163338 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

AXIS第二课:工程应用中的AXIS的发布方法Stub

    博客分类:
  • Axis
阅读更多
工程应用当中的web service的参数和通回值通常都是一个数据Bean类,因此前面介绍的两种发布AXIS的web service方法在工程应用当中并不多见,下面介绍Stub发布方法,开发步骤如下:

1,编写服务端程序UserEndpoint.java

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.remoting.jaxrpc.ServletEndpointSupport;

import com.miracle.dm.framework.organization.dao.hibernate.UserHibernateDAO;
import com.miracle.dm.framework.organization.model.User;

public class UserEndpoint extends ServletEndpointSupport{
protected Logger logger = LogManager.getLogger(UserEndpoint.class);
private UserHibernateDAO userHibernateDAO;

protected void onInit(){
   userHibernateDAO = (UserHibernateDAO)getWebApplicationContext()
                             .getBean("userHibernateDAO");

}

/**
* 增加User到数据库
*
* @return 返回新增加的数据的ID,失败返回字符串“FAILED”
*/
public String addUser(User user){
   try{
    String rev = userHibernateDAO.addUser(user);
    return rev;
   }catch(Exception e){
    logger.error("use web service to add user failed , user Name is : " + user.getName_());
    return "FAILED";
   }
}

/**
* 从数据库删除User
*
* @return 删除成功返回字符串“OK” ,失败返回字符串“FAILED”
*/
public String delUser(String userId){
   try{
    userHibernateDAO.delUser(userId);
    return "OK";
   }catch(Exception e){
    logger.error("use web service to delete user failed , user Id is : " + userId);
    return "FAILED";
   }
 
}

/**
* 将参数中的数据更新到数据库
*
* @return 成功返回字符串“OK”,失败返回字符串“FAILED”
*/
public String updateUser(User user){
   try{
    userHibernateDAO.updateUser(user);
    return "OK";
   }catch(Exception e){
    logger.error("use web service to update user failed , user Id is : " + user.getID_());
    return "FAILED";
   }
}
}

2,将Axis集成到工程当中

在工程的web.xml配置文件中加入以下AXIS配置:此配置加在<web-app>节点下。

<!-- AXIS配置 -->
    <listener>
        <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
    </listener>
   
<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>
        org.apache.axis.transport.http.AxisServlet
    </servlet-class>
</servlet>

<servlet>
    <servlet-name>AdminServlet</servlet-name>
    <display-name>Axis Admin Servlet</display-name>
    <servlet-class>
        org.apache.axis.transport.http.AdminServlet
    </servlet-class>
    <load-on-startup>100</load-on-startup>
</servlet>

<servlet>
    <servlet-name>SOAPMonitorService</servlet-name>
    <display-name>SOAPMonitorService</display-name>
    <servlet-class>
        org.apache.axis.monitor.SOAPMonitorService
    </servlet-class>
    <init-param>
      <param-name>SOAPMonitorPort</param-name>
      <param-value>5001</param-value>
    </init-param>
    <load-on-startup>100</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>*.jws</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>SOAPMonitorService</servlet-name>
    <url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>

<!-- uncomment this if you want the admin servlet -->
<!--
<servlet-mapping>
    <servlet-name>AdminServlet</servlet-name>
    <url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
-->

    <session-config>
        <!-- Default to 5 minute session timeouts -->
        <session-timeout>5</session-timeout>
    </session-config>

    <!-- currently the W3C havent settled on a media type for WSDL;
    http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft
    for now we go with the basic 'it's XML' response -->
<mime-mapping>
    <extension>wsdl</extension>
     <mime-type>text/xml</mime-type>
</mime-mapping>

<mime-mapping>
    <extension>xsd</extension>
    <mime-type>text/xml</mime-type>
</mime-mapping>

3,编写wsdd文件

  deploy.wsdd文件,此文件跟上面的类文件放在同一个包下,内容如下:

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

4、发布服务:

 在DOS下转换目录到上面的包目录,执行以下命令:

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

你会发现目录下多了一个server-config.wsdd文件,这就是AXIS的配置文件,以后所有的服务发布描述都会在里面找到。(当然你可以不用写deploy.wsdd,而是直接创建并修改它,以后新加入的web service也可以在里面添加而不用执行以上命令)。

server-config.wsdd文件的标准内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<service name="Document" provider="java:RPC">
<parameter name="className" value="com.miracle.dm.service.DocumentEndpoint"/>
<parameter name="allowedMethods" value="*"/>  
       
<beanMapping qname="ns:DocumentInfo" xmlns:ns="urn:beanservice"
             languageSpecificType="java:com.miracle.dm.doc.document.model.DocumentInfo"/>
    <beanMapping qname="ns:DocExtpropInfo" xmlns:ns="urn:beanservice"
             languageSpecificType="java:com.miracle.dm.doc.document.model.DocExtpropInfo"/>
            
    <beanMapping qname="ns:DocAttachmentInfo" xmlns:ns="urn:beanservice"
             languageSpecificType="java:com.miracle.dm.doc.document.model.DocAttachmentInfo"/>
            
    <beanMapping qname="ns:DoccatRelatInfo" xmlns:ns="urn:beanservice"
             languageSpecificType="java:com.miracle.dm.doc.document.model.DoccatRelatInfo"/>
            
    <typeMapping qname="ns:DataHandler" xmlns:ns="urn:beanservice"
          languageSpecificType="java:javax.activation.DataHandler"
          serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"
          deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                  
</service>

<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
</requestFlow>
</transport>

</deployment>

其中的beanmapping节点都是在此服务中应用到的Bean的配置。

此时你访问http://localhost:8080/工程名/services就可以看到此工程发布的所有的web service

5,生成客户端client stub文件

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

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

set Axis_Lib=D:\software\Axis\axis-bin-1_4\axis-1_4\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\project\MiracleDataManager\src
set Package=com.miracle.dm.service.client
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% User.wsdl
cmd

  注意,.bat文件中的路径不能有空格和中文字符,执行这个批处理文件就可以生成client stub.

  生成的stub client文件列表为:GenericValue.java,User.java,UserEndpoint.java,UserEndpointService.java,UserEndpointServiceLocator.java,UserSoapBindingStub.java

5,客户端调用例子

这里我使用Junit来测试:

package com.miracle.dm.service.test;

import com.miracle.dm.service.client.User;
import com.miracle.dm.service.client.UserEndpoint;
import com.miracle.dm.service.client.UserEndpointService;
import com.miracle.dm.service.client.UserEndpointServiceLocator;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

public class TestUserClient extends TestCase {

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

    public void addUser() throws Exception {
   
        UserEndpointService service = new UserEndpointServiceLocator();
        UserEndpoint client = service.getUser();
        User user = new User();
        user.setClass_("U");
        user.setName_("annlee");
        user.setEmail_("1@163.com");
        user.setSeq_(65546);
        user.setPassword_("password");
        user.setEnabled_("Y");
        user.setDisplayname_("李飞虎");
        user.setDomain("100");
        user.setMobile("12345");
        String retValue = client.addUser(user);
        System.out.println(retValue);

    }
   
    public void updateUser() throws Exception{
    UserEndpointService service = new UserEndpointServiceLocator();
        UserEndpoint client = service.getUser();
        User user = new User();
        user.setID_("402880ea1b447d08011b447e3e880002");
        user.setClass_("U");
        user.setName_("annlee");
        user.setEmail_("345@163.com");
        user.setSeq_(65546);
        user.setPassword_("password");
        user.setEnabled_("Y");
        user.setDisplayname_("李飞虎");
        user.setDomain("100");
        user.setMobile("12345");
        String retValue = client.updateUser(user);
        System.out.println(retValue);
    }
   
    public void delUser() throws Exception{
    UserEndpointService service = new UserEndpointServiceLocator();
        UserEndpoint client = service.getUser();
        String retValue = client.delUser("402880ea1b447d08011b447e3e880002");
        System.out.println(retValue);
    }

    public static Test suite() {
        TestSuite suite = new TestSuite();
//      suite.addTest(new TestUserClient("addUser"));
   //     suite.addTest(new TestUserClient("updateUser"));
        suite.addTest(new TestUserClient("delUser"));
        return suite;
    }
}

至此,整个服务器端和客户端的Web Service框架代码就完成了,剩下的就是在UserEndpoint.java文件里面加入你的业务代码了。
分享到:
评论

相关推荐

    Webservice之Axis高级编程

    2. **AXIS第二课:工程应用中的AXIS发布方法Stub** 这一课将介绍如何在实际工程中发布Web服务。Stub是客户端用来调用服务的代理类,通过Axis的wsdl2java工具,可以从WSDL文件自动生成服务接口和Stub。这使得客户端...

    使用axis1生成stub客户端样例

    在IT行业中,Web服务是一种允许不同应用程序之间进行通信和数据交换的技术。Axis1是一个流行的开源SOAP(简单对象访问协议)工具包,它被广泛用于创建和使用Web服务。本示例将详细介绍如何使用Axis1生成Stub客户端,...

    Axis2的发布和生产stub的操作

    这篇博客“Axis2的发布和生产stub的操作”将深入探讨如何使用Axis2来发布服务以及生成客户端Stub,这对于理解Web服务的开发流程至关重要。 首先,让我们了解一下Axis2。它是Apache软件基金会开发的一个开源项目,...

    Axis1 stub方式配置webService

    标题中的“Axis1 stub方式配置Web服务”是指在使用Apache Axis1这个开源SOAP库时,通过生成Stub(存根)类来与Web服务交互的方法。Apache Axis1是Java平台上广泛使用的Web服务框架,它允许开发者消费和发布Web服务。...

    Axis使用Stub方式开发Webservice只要看这个

    ### Axis使用Stub方式开发Webservice知识点详解 #### 一、概述 在当今信息化时代,Web服务作为实现系统间通信的一种重要手段,在企业级应用中扮演着至关重要的角色。Apache Axis作为一个开源的Java库,提供了简单...

    axis2的API,axis2 API,axis2帮助文档

    Axis2是Apache Axis的第二代版本,它在第一代的基础上进行了许多改进和优化,提供了更高效、灵活的Web服务解决方案。Axis2基于模块化设计,允许用户按需选择功能,从而降低了内存占用和提高了性能。它支持多种协议,...

    使用axis2发布WebService简单示例

    Axis2是第二代Apache Axis,是一个高度模块化和高性能的Web服务引擎。它支持SOAP 1.1、SOAP 1.2、RESTful风格的服务,并可以与多种传输协议(如HTTP、JMS等)集成。 3. **发布Web服务**: 使用Axis2发布Web服务...

    Apache Web Services Axis2(1.4.1) 详细经典入门实例图文并茂

    Apache Axis2是Apache SOAP(Simple Object Access Protocol)引擎的第二代产品,它提供了高性能、可扩展性和灵活性。Axis2基于模块化架构,支持多种消息传输协议,如HTTP、SMTP等,以及多种数据格式,如SOAP、...

    axis2客户端调用webService接口,精简jar包

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而Axis2是Apache软件基金会开发的一个Web服务框架,专门用于创建和消费Web服务。本文将深入探讨如何使用Axis2客户端调用WebService接口,并且会特别关注...

    Java+Axis2调用Web Services 网络接口

    Axis2是Apache Axis的第二代版本,提供了更高级的功能,包括模块化架构、消息传递模型、多协议支持等。它的核心部分负责处理SOAP消息,而可插入的模块则处理各种协议和格式,如REST、MTOM(Message Transmission ...

    经典入门:Axis2创建webservice.pdf

    - 二进制包 (`axis2-1.4.1-bin.zip`) 包含了 Axis2 运行时环境,而 WAR 文件 (`axis2-1.4.1-war.zip`) 可以用于在应用服务器(如 Tomcat)上部署 Axis2。 2. **部署 Axis2 在 Tomcat** - 将下载的 WAR 文件放到 ...

    axis实现webservice发布服务

    在IT行业中,Web服务是一种基于网络的通信协议,允许不同应用程序之间进行数据交换。而Axis是Apache软件基金会开发的一个开源工具,它主要用于Java环境中创建和部署Web服务。本篇文章将详细探讨如何使用Axis来实现...

    Axis1生成调用web服务的stub客户端所需jar包

    1.包含Axis1生成web服务的客户端stub类的所有jar包。 2.至于如何使用Axis1生成stub类型的客户端,请参考我的CSND博客,地址为http://blog.csdn.net/larry_lv/article/details/6708003

    axis入门中文文档

    1. 使用Stub(存根):Axis会根据WSDL文件生成客户端存根类,通过实例化存根并调用其方法来访问服务。 2. 直接使用SOAP请求:如果对SOAP消息格式熟悉,也可直接构造SOAP请求,通过HTTP POST发送到服务地址。 六、...

    AXIS发布webservice

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

    org.apache.axis jar

    4. **服务部署**:`org.apache.axis.jar`中的类用于处理服务的部署,包括解析WSDL文件,生成服务处理逻辑,以及将服务发布到应用服务器上。 5. **客户端调用**:对于Web服务的消费者,Axis提供了解析WSDL并生成...

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

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

    axis2示例工程

    【标题】"Axis2示例工程"是一个展示如何在Java环境中使用Axis2和Spring框架来构建Web服务的应用实例。这个项目旨在帮助开发者理解和实践WebService的创建、部署以及调用过程,特别是结合了流行的Spring框架,使得...

    Axis1.4快速发布服务以及客服端详解(根据wsdl)

    2. 编写客户端应用程序:利用生成的Java stubs,实例化服务代理并调用所需方法。例如: ```java YourServiceStub stub = new YourServiceStub("http://your-service-url"); YourServicePortType port = stub....

    SOAP Axis 三种发布调用方式简单实例

    本实例主要探讨了使用Axis进行SOAP Web服务发布的三种方法以及如何进行调用。 1. **命令行发布(Axis Ant Task)** Axis提供了Ant任务来发布Web服务。首先,你需要在项目中集成Ant构建工具,并将Axis的库文件添加...

Global site tag (gtag.js) - Google Analytics