`
hanyexiaoxiao
  • 浏览: 42212 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

AXIS第二课:工程应用中的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文件里面加入你的业务代码了

分享到:
评论
2 楼 KingZha 2011-12-12  
请问:上面的调用好像没有涉及接口地址,默认有接口地址吗?接口地址怎么改?(存在这种情况:接口地址变了,功能没变,用原来生成的代码作为客户端)
1 楼 KingZha 2011-12-12  
顶 顶

相关推荐

    Webservice之Axis高级编程

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

    webservice发布包axis2

    1. **Apache Axis2**: Axis2是Apache SOAP(Simple Object Access Protocol)项目的第二代实现,用于处理SOAP消息和创建Web服务。它提供了高性能、可扩展性和灵活性,支持多种协议,如HTTP、SMTP、JMS等,并可以处理...

    Axis实践之Axis入门

    2. **解压Axis**:下载的ZIP文件(如axis-bin-1_4.zip)应解压缩到一个不含中文名称的文件夹,以避免可能出现的编码问题。例如,将文件解压至F:\AXIS_Study。 解压后,你会看到以下目录结构: - docs:包含各种文档...

    axis1.1发布webservice服务

    本篇文章将详细阐述如何使用Axis1.1发布Web服务,并通过一个简单的Eclipse工程实例来演示整个过程。 首先,我们需要了解Web服务的基本概念。Web服务是一种通过Internet进行通信的软件系统,它使用标准的XML格式传输...

    Axis2依赖的所有jar包

    在描述中提到,“这些jar包是我在官网上找到axis2的war包,把它部署到tomcat之后,得到axis2工程,在这个工程里面完全拷贝的。”这表明了获取这些jar包的过程。通常,当你从Apache Axis2官方网站下载并部署WAR文件到...

    Axis2与Was7

    #### 二、将Axis2集成到Web工程中 接下来介绍如何将Axis2集成到现有的Web项目中。 1. **准备工作** - 创建一个名为`myproject`的Web项目。 - 将Axis2的`lib`目录下的所有JAR文件复制到`myproject/WEB-INF/lib`...

    通向架构师的道路(第十天)之Axis2 Web Service(一).docx

    创建第一个 Axis2 Webservice 之 HelloWorld: * 在服务端代码中,首先需要引入 org.apache.axiom.om.OMElement、org.apache.axis2.AxisFault、javax.xml.stream.XMLStreamException 等类。 * 使用 OMElement 对象...

    webservice axis2实例与文件描述

    在"axis2工程(服务于客户)和文档描述"的压缩包中,包含了使用Axis2部署的服务工程和CXF客户端的相关文档,这些资源将帮助你理解并实践上述知识点。通过阅读文档,你可以了解到具体的服务部署步骤、客户端调用方法...

    使用axis2开发IsmpSp接口

    开发IsmpSp接口的第一步是在Eclipse环境中创建一个新的web工程,比如`zdflsmsservice`,遵循JAVA EE 5.0规范。这将为我们的服务提供基础架构。 2. **添加Axis2库** 为了支持 Axis2 服务的开发,我们需要在项目的...

    GE最新AXIS 5.1版本软件使复杂的多处理器应用开发更加快速和简便.pdf

    【GE最新AXIS 5.1版本软件】是GE智能平台发布的一款专为复杂多处理器应用开发...参考文献中提及的文献1、2、3则可能提供了更多关于雷达罩制造和精密测量的深入研究,而GE的新版本软件在此类工程应用中起到了关键作用。

    web service示例[axis]

    创建一个新的Java项目,导入Axis所需的JAR包,并将第7步生成的所有代码复制到测试项目中。编写一个测试类,调用Web服务的相应方法,如`IService`的`sayHello`方法。运行测试类,你会看到Web服务的调用结果。 通过...

    使用axis自动生成webservice客户端代码.pdf

    第二步,创建一个Webservice工程。在Myeclipse中,你可以按照标准步骤创建一个新的Web服务项目,并编写你的服务端代码。例如,这里给出的服务端代码是一个简单的HelloWorld类,它有一个hello()方法返回字符串。 ```...

    WAS 发布 第三方WebService的配置文档

    - **第三方WebService引擎嵌入**:通过将第三方WebService引擎如Axis2或CXF嵌入到应用EAR文件中,可以实现特定第三方运行时的特性、代码重用或在多厂商或多版本环境中的一致性。 - **配置选项**:WAS提供了一种配置...

    axis-axis2-java-kandula:Apache Axis2-Java Kandula

    Apache Axis2 是一个高度可扩展且模块化的Web服务引擎,它是Apache SOAP(Simple Object Access Protocol)项目的下一代...通过这个项目,你可以学习如何将Kandula集成到你的Axis2应用中,实现更强大的事务处理能力。

    Matlab在电气工程中的应用:第4章 数据和函数的可视化.ppt

    《Matlab在电气工程中的应用:数据和函数的可视化》 Matlab作为一款强大的数值计算与科学计算软件,广泛应用于电气工程领域。在数据分析和研究过程中,数据和函数的可视化是至关重要的,它能够帮助我们直观地理解...

    java实现webservice实例.doc

    第二步:下载Axis安装包 Axis安装包可以从Apache官方网站下载。下载完成后,需要将其安装到本地环境中。 第三步:编写wsdd文件 wsdd文件是WebService的描述文件,用于定义WebService的接口和实现。它是Axis框架中...

    grapher中文教程

    3. **Worksheet Columns**:指定电子表格中的列与X轴和Y轴的对应关系,默认情况下X轴对应第一列,Y轴对应第二列。 4. **Limit Curve to**:设置X轴和Y轴的范围。 - **Axis min** 和 **Axis max**:手动输入轴的...

    nehe第30课

    在本教程中,可能会介绍基本的几何体(如球体、立方体)之间的碰撞检测算法,如分离轴定理(Separating Axis Theorem,SAT),以及如何将这些算法应用到3D场景中。 2. **Tmatrix.h和Tmatrix.cpp**:这两个文件可能...

    通向架构师的道路(第1-20天)

    (第二天)之apache tomcat https应用 (第三天)之apache性能调优 (第四天)之Tomcat性能调优-让小猫飞奔 (第五天)之tomcat集群-群猫乱舞 (第六天)之漫谈基于数据库的权限系统的设计 (第七天)之漫谈使用...

Global site tag (gtag.js) - Google Analytics