热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Axis2WebService框架的学习心得01

今天看了之前几天写的代码,关于WebService框架--Axis2的一些心得,总体我把Axis2的开发步骤和结构分为3部分:1.初始化组

 今天看了之前几天写的代码,关于WebService框架--Axis2的一些心得,总体我把Axis2的开发步骤和结构分为3部分:

     1.初始化组件:

     1.1 核心组件类:

                       RPCServiceClient--客户端服务类--建立全局的Axis2对象的基础核心组件

                       MessageContext--消息摘要上下文--建立全局 消息摘要的上下文组件,即使整体WebService系统框架的上下文操作。

                       EndpointReference--终结点外向指引--作为整体WebService框架的重要的核心组件。进行操作请求地址,

                      Options--操作选项--执行连接RPCServiceClient和EndpointReference两个最重要核心组 件,本身作为一个容器,进行存放EndpointReference组件

                       QName--webService框架的命名调用规范对象,包含两部分:名空间+方法名,

 

     1.2 自定义实体类:

         RPCModel对象实体信息类:

         以下就是我自定义的类型熟悉,仅供参考

          targetNameSpace--名空间

          targetMethodName--方法名

          targetServiceUrl--服务请求路径

          paramArray--参数数组文件

          overtime--超时时间

         returnType--返回类型

     2.创建服务端:

        private static RPCServiceClient invokeBase(RPCModel model) throws AxisFault{

                if(model == null)

                  throw new IllegalArgumentException("出现参数为空的异常!"); 

               EndpointReference edf = new EndpointReference(model.getTargetServiceUrl());

               Options options = RPCClientFactory.newInstance().initOptions();

               options.setTo(edf);

               RPCServiceClient client = RPCClientFactory.newInstance().initClient();

              MessageContext messgeContext = RPCClientFactory.newInstance().initMessageContext();

               messgeContext.setServiceContext(client.getServiceContext());

                MessageContext.setCurrentMessageContext(messgeContext);

               if(model.getOverTime() != null)

                  options.setTimeOutInMilliSeconds(model.getOverTime());

                 client.setOptions(options);

                 return client;

}

 

 

  testService

 

 

 

  class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver">

 

 

  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver">

 

 

 axisPro.test.TestService

 

 

     3.调用服务端: 

        @Override

public void invokeNoReturnMethod(RPCModel model) {

try {

RPCServiceClient client = invokeBase(model);

Object [] params = model.getParamArray();

QName qName = new QName(model.getTargetNameSpace(),model.getTargetMethodName());

OMElement qm  = client.invokeBlocking(qName,params);

} catch (AxisFault e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

 

@Override

public Object invokeReturnMethod(RPCModel model) {

try {

RPCServiceClient client = invokeBase(model);

Object [] params = model.getParamArray();

QName qName = new                                   QName(model.getTargetNameSpace(),model.getTargetMethodName());

//Class [] returnType = new Class[]{String.class};

Object[] response  = client.invokeBlocking(qName,params,model.getReturnType());

return response[0];

} catch (AxisFault e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

       4.测试类:

public static void clientTest()

RPCInvokeService ris = new RPCInvokeImpl();

RPCModel model = new RPCModel();

model.setReturnType(new Class[]{String.class});

model.setTargetMethodName("test");

model.setTargetServiceUrl("http://127.0.0.1/axisPro/services/TestService");

model.setTargetNameSpace("http://test.axisPro");

model.setParamArray(new Object[]{"�"});

System.out.println(ris.invokeReturnMethod(model).toString());

 

}



推荐阅读
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 在分析Android的Audio系统时,我们对mpAudioPolicy->get_input进行了详细探讨,发现其背后涉及的机制相当复杂。本文将详细介绍这一过程及其背后的实现细节。 ... [详细]
  • 本文主要探讨了Java中处理ActionEvent事件的接口,以及一些常见的编程问题和解决方案,包括方法重载、成员变量访问、镜片质量检测等。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 2022年7月20日:关键数据与市场动态分析
    2022年7月20日,本文对当日的关键数据和市场动态进行了深入分析。主要内容包括:1. 关键数据的解读与趋势分析;2. 市场动态的变化及其对投资策略的影响;3. 相关经济指标的评估。通过这些分析,帮助读者更好地理解当前市场环境,为决策提供参考。 ... [详细]
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 利用 Python Socket 实现 ICMP 协议下的网络通信
    在计算机网络课程的2.1实验中,学生需要通过Python Socket编程实现一种基于ICMP协议的网络通信功能。与操作系统自带的Ping命令类似,该实验要求学生开发一个简化的、非标准的ICMP通信程序,以加深对ICMP协议及其在网络通信中的应用的理解。通过这一实验,学生将掌握如何使用Python Socket库来构建和解析ICMP数据包,并实现基本的网络探测功能。 ... [详细]
  • 深入探索HTTP协议的学习与实践
    在初次访问某个网站时,由于本地没有缓存,服务器会返回一个200状态码的响应,并在响应头中设置Etag和Last-Modified等缓存控制字段。这些字段用于后续请求时验证资源是否已更新,从而提高页面加载速度和减少带宽消耗。本文将深入探讨HTTP缓存机制及其在实际应用中的优化策略,帮助读者更好地理解和运用HTTP协议。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
author-avatar
Watts
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有