Axis2学习的第一天

按照下面,分别建2个工程,一个client(客户端),一个server(服务端)

先实现服务端:

1、编写services.xml文件,该文件是放在aar文件里的\META-INF目录下的:

<?xml version="1.0" encoding="UTF-8"?>
<!-- This file was auto-generated from WSDL -->
<!-- by the Apache Axis2 version: 1.4.1  Built on : Aug 19, 2008 (10:13:39 LKT)
     <parameter name="useOriginalwsdl">false</parameter>
     <parameter name="modifyUserWSDLPortAddress">true</parameter>
 -->
<serviceGroup>
    <service name="axis2Service">
        <description>
           This is a sample Web Service.
        </description>
        <!-- // ServiceClass指定Java Class的位置,即实现服务的类。  -->
        <parameter name="ServiceClass" locked="false">com.study.axis2.service.impl.Axis2ServiceImpl</parameter>
        <!-- // operation 与Java Class中方法名对应。  -->
        <operation name="user">
            <!-- // messageReceiver看下文注解。    -->
               <messageReceiver class="com.study.axis2.receive.Axis2MessageReceiverInOut"/>
        </operation>
    </service>
</serviceGroup>

2、编写Axis2ServiceImpl类:

package com.study.axis2.service.impl;

import com.study.axis2.domain.User;
import com.study.axis2.domain.UserResponse;
import com.study.axis2.service.Axis2Service;

public class Axis2ServiceImpl implements Axis2Service {

    public UserResponse user(User user) {
        // 将in转换为String。
        int userId = user.getUserId();
        String userName = user.getUserName();

        System.out.println("USER ID : " + userId + "; USER NAME : " + userName);

        UserResponse response = new UserResponse();
        response.setRspCode("0000");
        response.setRspDesc("SUCCESS");

        return response;
    }

}

3、编写User和UserResponse类;

4、编写Axis2MessageReceiverInOut类,用来接收报文的:

package com.study.axis2.receive;

import java.io.ByteArrayInputStream;
import java.util.Iterator;

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.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.receivers.AbstractInOutMessageReceiver;

public class Axis2MessageReceiverInOut extends AbstractInOutMessageReceiver{
    private static String ENCODEING = "UTF-8";
    private static String NAMING_SPACE = "http://impl.service.axis2.study.com";

    @Override
    public void invokeBusinessLogic(MessageContext envMsg, MessageContext newEnvMsg)
            throws AxisFault {
        System.out.println("------------------------------------");
        String body = envMsg.getEnvelope().getBody().toString();
        System.out.println("request body1 : " + body);

        //Axis2Service axis2 = new Axis2ServiceImpl();

        StringBuffer soapRequestData = new StringBuffer();
        soapRequestData.append("<userResponse>");
        soapRequestData.append("<rspCode>0000</rspCode>");
        soapRequestData.append("<rspDesc>SUCCESS</rspDesc>");
        soapRequestData.append("</userResponse>");

        SOAPEnvelope env = toEnvelope(soapRequestData.toString());

        newEnvMsg.setEnvelope(env);
    }

    public static SOAPEnvelope toEnvelope(String sourceXml)
    {
        String xmlBody = sourceXml;

        OMFactory of = OMAbstractFactory.getOMFactory();
        OMNamespace bname = of.createOMNamespace(NAMING_SPACE, "");

        SOAPFactory s12f = OMAbstractFactory.getSOAP12Factory();
        SOAPEnvelope s12e = s12f.getDefaultEnvelope();

        try
        {
            byte[] bytes = xmlBody.getBytes(ENCODEING);
            ByteArrayInputStream is = new ByteArrayInputStream(bytes);

            StAXOMBuilder builder = new StAXOMBuilder(is);

            OMElement elementBody = builder.getDocumentElement();
            //elementBody.setNamespace(bname);
            //addNameSpacePrefix(elementBody, bname);

            SOAPBody s12b = s12e.getBody();
            s12b.addChild(elementBody);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return s12e;
    }

    public static OMElement addNameSpacePrefix(OMElement element,
            OMNamespace prefix)
    {
        if (element.getChildElements() != null)
        {
            Iterator<OMElement> it = element.getChildElements();
            element.setNamespace(prefix);
            while (it.hasNext())
            {
                OMElement childelement = (OMElement) it.next();
                childelement.setNamespace(prefix);

                if ((childelement.getChildElements() == null)
                        || (!childelement.getChildElements().hasNext()))
                    continue;
                addChildNameSpacePrefix(childelement.getChildElements(), prefix);
            }
        }

        return element;
    }

    public static void addChildNameSpacePrefix(Iterator element,
            OMNamespace prefix)
    {
        if (element != null)
        {
            while (element.hasNext())
            {
                OMElement childelement = (OMElement) element.next();

                childelement.setNamespace(prefix);
                if ((childelement.getChildElements() == null)
                        || (!childelement.getChildElements().hasNext()))
                    continue;
                addChildNameSpacePrefix(childelement.getChildElements(), prefix);
            }
        }
    }

}

5、将该类和services.xml文件都放在aar下

时间: 2024-08-26 03:27:29

Axis2学习的第一天的相关文章

学习python第一天

学习Python第一天 Python小白,做Linux运维5年,纯系统运维已经不能满足日常工作需要,所以学习Linux运维开发入门级语言python 前言: Python, 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议. Python语法简洁清晰,特色之一是强制用空白符(white

Java学习记录第一章

学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言--->高级语言(面向过程的语言和面向对象的语言)总而言之就是从人类比较难识别的字符串向人类自然语言靠近使代码的可读性越来越高. Java的发展过程:1991年Sun公司为了抢占市场先机,成立了一个称为Green的项目小组,帕特里克.詹姆斯·高斯林.麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕

Axis2学习笔记

Axis2学习笔记 目录: 1.准备 2.发布service 3.生成客户端代码 1.     准备 下载axis2 的bin和war两种发行版本. Bin版本用于使用自带的命令生成客户端代码. War包中的WEB-INF目录下的文件用于服务提供方使用. 2.     发布service 新建一个Maven项目,在pom.xml中新增以下依赖:         <dependency>             <groupId>org.apache.axis2</groupI

Duilib学习二 第一个程序 Hello World

Duilib学习二  第一个程序 Hello World #pragma once #include <UIlib.h> using namespace DuiLib; #ifdef _DEBUG # ifdef _UNICODE # pragma comment(lib, "DuiLib_ud.lib") # else # pragma comment(lib, "DuiLib_d.lib") # endif #else # ifdef _UNICOD

UI学习笔记---第一天

一.iOS概述 iOS是Apple公司的移动操作系统,主要?用于iPhone.iPad.iPad Mini.iPod Touch等移动产品. 借助iOS,我们可以开发视频类.美图类.新闻类.?音乐类.团购类.电商类.阅读类.出?行类.?生活服务类.游戏类等应?用程序. 除此之外,iOS还可以与外部设备通信,开发出更多改变?活的产品,?比 如:智能家居(iOS App控制电视.空调等).健?产品(将人体健康 状况通过App直观的展现出来)等. 二.UI概述 UI(User Interface):?

我的linux学习,第一天!

毕业很久了,虽然一直在做网络管理圆.但是linux的东西已经丢的差不多了. 处于对未来发展以及职业规划方面,就决定把linux捡起来. 在网上找了很多linux相关书籍和教程等方面的东西. 最后决定书籍以<鸟哥的私房菜>入手,教程以马哥教育视频开始. 放弃懒散.选择坚持. 三个月后,再看结果! 加油,加油,加油!!! 我的linux学习,第一天!,布布扣,bubuko.com

CCNA学习指南 第一、二章 下载

ccna学习指南出版稿公布. 本博文公开第一.二章,其它章逐步公开. CCNA学习指南 第一.二章 下载

java学习日记第一天

java 学习日记 第一天 java学习准备工作 首先环境配置:一个是jdk安装,另一个编译工具 eclipse ,安装下载教程网上很多 找了一个照着做就行 : 上述步骤完成,我们就可以打开eclipse进行我们第一个程序的编写啦当然是编写我们熟悉的helloWorld创建一个Java Perfect 目前好像基本都习惯用工程管理我们就建一个java工程然后点开工程在src右键new一个class,不用问这是啥这是啥,先把程序跑起来,慢慢就懂了我们在{}写我们的程序,这就好比helloworld

C#学习笔记—第一天

C#学习笔记—第一天 一.C#与.NET Framework的关系 C#编译器专门用于.NET,这表示用C#编写的所有代码总是使用.NET Framework运行.所以对于C#语言来说,可以有一下两个结论: 1)C#的 体系结构和方法论反映了.NET基础方法论. 2)在许多情况下,C#的特定语言功能取决于.NET的功能,或依赖于.NET的基类. 二..NET编译过程 1)将源代码编译成Microsoft中间语言IL(Intermediate Language): 2)公共语言运行库CLR把IL编