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

axis2的一个例子

阅读更多
最近项目需要用到 SOAP以及AXIS2的知识,在学习之余,将第一天学到的内容整理了一下,一来做为笔记做个记录,二来如果有需要的,可以做为参考,今天主要是完成了一 下功能,通过一个SOAP请求消息(可以自己构造也可以通过指定一个xml文件),然后在Web Service中获取这个SOAP请求消息(一个OMElement对象),通过解析这个对象,获取需要的信息,然后对这些信息进行业务处理,最后返回一 个SOAP响应消息。
获取AXIS2 1.1,由于做项目一般使用稳定的发布版本,所以本文没有使用最新的AXIS2 1.1.1版本,该版本可以从Apache官方网站下载。下载地址如下:
在上面连接中,有三个版本的axis2可以供下载,分别是:Standard Binary Distribution, Source Distribution,WAR (Web Archive) Distribution,其中标准版可以直接独立使用(Stand-alone),源代码版本需要使用maven进行构建,同时允许开发人员自己修改源 代码,本文使用的是WAR版本,可以直接发布在WEB容器中(本文使用的是Tomcat5.5.17)。在上面的链接中还有一个是DOCS的下载,最好一 并下载,docs中包含用户手册,快速上手指南,以及其他相关文档,对了解并熟悉AXIS2很有帮助。
闲话少说,将已经下载的WAR包发布(拷贝+粘贴)到%TOMCAT_HOME%/webapps/目录下,其中%TOMCAT_HOME%以Tomcat安装目录进行替换。启动Tomcat,在IE地址栏中键入:http://localhost:8080/axis2 ,如果部署成功,即可看到欢迎页面,一般情况下不会出现什么错误。
进入主页之后,可以通过进入Administration链接来管理WEB服务,其中 初始化用户名和密码分别为admin/axis2。一般情况下,在管理控制台下进行操作比较方便,但是本文将直接进行操作系统目录级的操作(不会使用 UploadServices进行发布服务,而是直接将*.aar拷贝到%TOMCAT_HOME%/webapps/axis2/WEB- INF/services目录下)。
下面我们建立自定义的WEB服务:
我们要将类似以下XML格式的SOAP请求转换为SOAP响应,并获取SOAP请求中的关键元素,进行业务操作,本例子中只是简单的将数值拷贝,没有进行实际的业务操作,但是在代码中进行了指示:
SOAP请求:
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope>
 <soap:Header />
 <soap:Body>
    <RevokeCertRequest>
      <Issuer> ABC </Issuer>
      <Serial> DEF </Serial>
      <RevocationDate> GHI </RevocationDate>
    </RevokeCertRequest>
 </soap:Body>
</soap:Envelope>
 
SOAP响应:
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope>
 <soap:Header />
 <soap:Body>
    <RevokeCertResponse>
      <RevokeDate> GHI </RevokeDate>
    </RevokeCertResponse>
 </soap:Body>
</soap:Envelope>
 
 
在实际应用中,我们可能要获取ABC,DEF,GHI来进行业务处理,最后返回一个其他的消息,但是在示例中,我们仅仅获取ABC,DEF,GHI,然后打印出来,并返回GHI。
 
Step1.建立工程并创建文件
建立如下图所示的JAVA工程(工程的源代码路径与编译后路径不同,源代码为project/src,编译后为project/bin):首先 建立一些类,然后创建serives.xml,最后建立build.xml文件(ANT的构建文件,为了方便测试与构建,所以使用了ANT)
 
下面是这些文件的内容:
 
RevokeService.java(这个是进行WEB服务的类):
package newsdes.support.service;
 
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
import javax.xml.namespace.QName;
 
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
 
public class RevokeService {
 
      /**
       * The request soap message object.
       */
      public static OMElement requestSoap = null;
 
      /**
       * Write the soap response message to xml file.
       *
       * @param res
       *            The resource of that forms the xml file.
       * @param filePath
       *            The path where the xml file be stored.
       */
      private static void writeResponse(String res, String filePath) {
           try {
                 FileOutputStream fos = new FileOutputStream(filePath);
                 byte[] bytes = res.getBytes();
                 fos.write(bytes);
                 fos.close();
           } catch (FileNotFoundException e) {
                 e.printStackTrace();
           } catch (IOException e) {
                 e.printStackTrace();
           }
      }
 
      /**
       * Generate the path where the xml file is stored.
       *
       * @param fileName
       * @return
       */
      private static String makePath(String fileName) {
           String path =
"C:/eclipse/workspace/SDES_Enhance/data/" + fileName;
           return path;
      }
//主要的WEB服务方法
      public OMElement RevokeCertRequest(OMElement soapBody) {
           requestSoap = soapBody;
           QName issuerName = new QName("Issuer");
           QName serialName = new QName("Serial");
           QName revocationDateName = new QName("RevocationDate");
           OMElement issuerElement =
requestSoap.getFirstChildWithName(issuerName);
           OMElement serialElement =
requestSoap.getFirstChildWithName(serialName);
           OMElement revocationDateElement = requestSoap
                      .getFirstChildWithName(revocationDateName);
           String issuer = issuerElement.getText();
           String serial = serialElement.getText();
           String revocationDate = revocationDateElement.getText();
           // print out the value
           System.out.println(issuer);
           System.out.println(serial);
           System.out.println(revocationDate);
 
           // TODO use "issuer,serial,revocationDate" to do business
 
           // Generate the soap response message
           OMFactory soapFactory = OMAbstractFactory.getOMFactory();
           OMNamespace omNs = soapFactory.createOMNamespace(
                      "http://www.sdes.net/", "");
           OMElement soapResponse = soapFactory.createOMElement(
                      "RevokeCertResponse", omNs);
           OMElement soapMain = soapFactory.createOMElement("RevokeDate", omNs);
           soapMain.setText(revocationDate);
           soapResponse.addChild(soapMain);
           soapResponse.build();
           String path = makePath("resMsg.xml");
           writeResponse(soapResponse.toString(), path);
           return soapResponse;
      }
}
 
该Service类主要实现了将传入的参数OMElement进行解析,获取其中的Issuer,Serial以及 RevocationDate元素的值,然后进行业务处理(蓝色部分,省略)。然后根据业务操作结果,将响应返回。(这里仅仅是将内容写入到一个XML文 件中)。
 
services.xml(WEB服务的配置文件,放置在META-INF目录下):
< serviceGroup >
      < service name = "CertRevokeService " >
           < description >
                 This is the service for revoking certificate.
           </ description >
           < parameter name = "ServiceClass" locked = "false" >
                  newsdes.support.service.RevokeService
           </ parameter >
           < operation name = "RevokeCertRequest" >
                 < messageReceiver
                      class = "org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
                 < actionMapping > urn:RevokeCertRequest </ actionMapping >
           </ operation >
      </ service >
</ serviceGroup >
其中 serviceGroup 中可以包含多个 service, 如果只有一个的时候,可以省略外层的 serviceGroup 元素。服务名为 CertRevokeService 。主要业务操作为 RevokeCertRequest
红色部分标志了进行 WEB 服务的主要类。
 
Step2:进行打包
首先编写build.xml文件,为了简便(只是个例子,所以任务也比较简单,只是将project/bin目录下的内容进行JAR打包,文件名为SDES_Enhance.aar,其中.aar为AXIS2的应用的后缀名。)
<project name= "SDES_Enhance" default= "deploy" basedir= "." >
      <description>
            Deploy SDES_Enhance Services
    </description>
      <property name= "dist" value= "${basedir}/dist" />
      <property name= "service" value= "C:/Tomcat5.5/webapps/axis2/WEB-INF/services" />
      <target name= "init" >
           <echo> Initializing the environment! </echo>
           <delete dir= "${dist}" />
           <delete dir= "${basedir}/data" />
           <mkdir dir= "${dist}" />
           <mkdir dir= "${basedir}/data" />
      </target>
      <target name= "jar" depends= "init" >
           <echo> Compressing files to .aar file! </echo>
           <jar basedir= "${basedir}/bin" destfile= "${dist}/SDES_Enhance.aar" />
      </target>
      <target name= "deploy" depends= "jar" >
           <echo> Deploying service! </echo>
           <copy todir= "${service}" >
                 <fileset dir= "${dist}" >
                      <include name= "SDES_Enhance.aar" />
                 </fileset>
           </copy>
      </target>
</project>
 
打包完成后,直接将SDES_Enhance.aar部署到
%TOMCAT_HOME%/webapps/axis2/WEB-INF/services目录下,在TOMCAT启动情况下,会进行HOT-DEPLOY,直接部署完成,在http://localhost:8080/axis2/axis2-admin/listService 下刷新,可以看到部署的服务: CertRevokeService 。如下图所示:
 
Step3:编写客户端测试代码:
建立测试类:TestCertRevokeService(通过构造一个SOAP请求对象,传入给服务,来实现返回一个SOAP响应的XML文件):
TestCertRevokeService.java
package com.neusoft.service.test;
 
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
 
public class TestCertRevokeService {
      private static EndpointReference targetEPR = new EndpointReference(
                 "http://localhost/axis2/services/CertRevokeService");
 
      public static OMElement getSoapRequestMessage() {
           OMFactory factory = OMAbstractFactory.getOMFactory();
           OMNamespace omNs =
factory.createOMNamespace("http://www.sdes.net", "");
           OMElement issuer = factory.createOMElement("Issuer", omNs);
           OMElement serial = factory.createOMElement("Serial", omNs);
           OMElement revocationDate =
factory.createOMElement("RevocationDate",
                      omNs);
           issuer.setText("C=JP,O=FX,CN=SDES CA");
           serial.setText("1234567890");
           revocationDate.setText("2007-01-01T00:00:00.000Z");
 
           OMElement requestSoapMessage = factory.createOMElement(
                      "RevokeCertRequest", omNs);
           requestSoapMessage.addChild(issuer);
           requestSoapMessage.addChild(serial);
           requestSoapMessage.addChild(revocationDate);
           requestSoapMessage.build();
           return requestSoapMessage;
      }
 
      /**
       * @param args
       */
      public static void main (String[] args) {
           OMElement requestSoapMessage = getSoapRequestMessage();
           Options options = new Options();
           options.setTo(targetEPR);
           ServiceClient sender = null;
           try {
                 sender = new ServiceClient();
                 sender.setOptions(options);
                 sender.sendReceive(requestSoapMessage);
           } catch (AxisFault e) {
                 System.out.println(e.getFaultElements().toString());
           }
      }
}
 
其中,Options对象的setTo方法一定要写正确,这是将SOAP请求发送的终点,如果书写不对,将不能通过WEB服务来处理请求。
 
执行TestCertRevokeService类,可以看到在控制台(Tomcat)的控制台打印出了在CertRevokeService中要打印的消息。
分享到:
评论

相关推荐

    axis2例子 webservice axis2 示例

    axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例axis2例子 webservice axis2 示例

    axis2webservice接口例子

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

    AXIS2简单例子

    下面我们将通过一个简单的例子来阐述如何使用AXIS2: 首先,我们需要安装和配置AXIS2。这通常包括下载AXIS2的最新版本,解压并将其添加到系统路径中。确保JDK已经安装并设置好环境变量,因为AXIS2依赖Java运行环境...

    Axis2 Webservice端例子

    Axis2是Apache软件基金会开发的一个开源Web服务框架,主要用于构建高效、灵活且可扩展的Web服务。本示例将深入探讨如何在Axis2环境中创建和部署一个简单的Web服务端点,以便于理解其核心概念和技术。 一、 Axis2 ...

    Axis2例子Demo

    总的来说,"Axis2例子Demo"是一个宝贵的资源,可以帮助开发者快速上手并熟练掌握Axis2框架,从而在实际项目中高效地开发和部署Web服务。通过深入学习和实践,你可以进一步理解Web服务的工作原理和Axis2的高级特性。

    Axis2介绍和例子

    通过以上内容,我们可以了解到Axis2作为一个强大的Web服务引擎,它提供了一套全面的工具和框架,使得开发者可以高效地构建和部署Web服务,同时支持多种通信协议和数据格式,极大地推动了服务化和跨平台集成的发展。...

    axis2入门及简单例子

    Axis2 是一个基于 Java 的 Web 服务框架,它提供了一个灵活、可扩展、可靠的方式来创建、部署和管理 Web 服务。Axis2 是 Apache 软件基金会的一个开源项目,是基于 SOAP 和 WSDL 的 Web 服务实现。 一、准备工作 1...

    Axis2完美例子Demo

    Axis2 是一个流行的开放源代码Web服务引擎,用于构建和部署SOAP(Simple Object Access Protocol)和RESTful(Representational State Transfer)Web服务。这个标题暗示我们将探讨一个使用Axis2在MyEclipse集成开发...

    Spring+Axis2例子

    3. **配置Spring**:在Spring的XML配置文件中,创建一个Bean,使用`&lt;bean&gt;`标签定义服务实现,并使用`&lt;axis2:service&gt;`或`&lt;axis2:client&gt;`标签来声明这是一个Axis2服务或客户端。 4. **配置Axis2**:在Axis2的配置...

    axis2+spring webservice

    描述中提到的“简单例子:axis2整合spring发布webservice”,意味着我们将学习如何将这两个框架结合,以便通过Spring来管理和控制Web服务的生命周期,同时利用Axis2的Web服务处理能力。此外,“以及session的管理”...

    axis2 调用webservice 例子

    &lt;groupId&gt;org.apache.axis2 &lt;artifactId&gt;axis2 &lt;version&gt;1.6.2 &lt;groupId&gt;org.apache.axis2 &lt;artifactId&gt;axis2-adb &lt;version&gt;1.6.2 &lt;groupId&gt;org.apache.axis2 ...

    axis2webservice例子

    描述 "axis2webservice应用的例子" 暗示我们将通过一个实际的项目来学习Axis2在Web服务实现中的应用。这通常包括以下步骤: 1. **安装与配置**:首先,我们需要下载Apache Axis2的最新版本,并将其解压到本地文件...

    Axis 下的 WebService例子

    接下来,我们将通过一个简单的例子来了解如何使用Axis创建和调用Web服务。 1. **创建WebService** - **编写Java类**:首先,你需要编写一个Java类,这个类会暴露为Web服务。例如,我们可以创建一个名为`Calculator...

    axis2 dynamic 整合例子

    本教程将通过一个简单的例子,讲解如何在Eclipse开发环境中整合Axis2与动态特性,以便于快速地创建和部署Web服务。 首先,确保你已经安装了Eclipse IDE和Apache Axis2库。你可以从Apache官方网站下载Axis2的最新...

    在java中启动axis2的例子

    Axis2是Apache组织下的一个开源项目,它是一个高性能、可扩展的Web服务框架,支持SOAP和REST等协议,为开发者提供了构建、部署和管理Web服务的能力。Axis2在Java环境下启动和运行,能够提供异步服务调用的支持,这在...

    初学者AXIS2教程(介绍和例子)

    总的来说,AXIS2教程是一个全面且适合初学者的Web服务开发指南,通过理论与实践相结合的方式,帮助学习者快速入门并深入理解Web服务和AXIS2的使用。无论是对于Java开发者想要拓宽技能领域,还是.NET开发者寻求与Java...

    axis2 webservices 例子

    Axis2是Apache软件基金会开发的一个高效且灵活的Web服务引擎,它主要用于处理SOAP消息。本示例将详细介绍如何使用JAX-WS(Java API for XML Web Services)发布Web服务,并利用Axis2作为客户端获取Web服务的数据。 ...

    axis2-1.6.0(两个插件,一个例子)

    org.apache.axis2.eclipse.service.plugin_1.6.0.jar axis2-1.6.0 axis2-1.4.1-war.zip axis2-1.6.0-bin.zip

    axis搭建webService的例子

    本教程将通过一个详细的实例,指导你如何使用Axis搭建Web服务。 一、Web服务简介 Web服务通常采用SOAP(Simple Object Access Protocol)协议进行通信,它基于XML格式,允许不同平台的应用程序之间交换结构化信息。...

    Axis简单例子

    2. **生成WSDL**:使用 Axis 的 wsdl2java 工具,根据服务类生成WSDL文件,这是一个XML格式的文档,描述了服务的接口、消息结构和绑定信息。 3. **部署服务**:将生成的服务部署到Axis服务器上,使其可被网络上的...

Global site tag (gtag.js) - Google Analytics