`

Axis2到底能否传递复杂类型参数【求指导篇】

 
阅读更多

   首先回顾一下,上篇博客给大家宏观上介绍了webservice框架—Axis,Axis2,CXF,XFire。接下来我们对框架的实践学习,其实,目前的阶段,主要是会实践,会应用。

并且上篇博客中也提到,目前Apache中最流行的两大Webservice框架——Axis2 VS CXF
那我们接下里的博客中会对这两大框架的介绍以及问题解决。其中,也会有疑问的问题,亟需高手指点。
 
若是您对Axis2发布以及调用Webservice不懂的话,可以按照这个开发文档一步步做,肯定会做出来的。
 
那这篇博客中,不再贴源码了,类似上述的开发文档的小例子,只是方法参数不同而已。发布以及调用的过程都是相同的。
Axis2服务端,发布的服务方式: 配置services.xml文件。在配置文件中,配置发布Webservice名称,服务提供的接口以及暴露的函数。文件如下:
  1. <?xmlversion="1.0"encoding= "UTF-8"?>
  2. <serviceGroup>
  3. <servicename= "myService"scope ="application">
  4. <description>
  5. MyService
  6. </description>
  7. <messageReceivers>
  8. <messageReceiver
  9. mep= "http://www.w3.org/2004/08/wsdl/in-only"
  10. class= "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
  11. <messageReceiver
  12. mep= "http://www.w3.org/2004/08/wsdl/in-out"
  13. class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
  14. </messageReceivers>
  15. <parametername ="ServiceClass">
  16. com.test.UserService
  17. </parameter>
  18. </service>
  19. </serviceGroup>
   <?xml version="1.0" encoding= "UTF-8"?>
<serviceGroup>
<service name= "myService" scope ="application">
    <description >
        MyService
    </description >
    <messageReceivers >
        <messageReceiver
            mep= "http://www.w3.org/2004/08/wsdl/in-only"
    class= "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        <messageReceiver
            mep= "http://www.w3.org/2004/08/wsdl/in-out"
    class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers >
   
    <parameter name ="ServiceClass">
        com.test.UserService
    </parameter >
</service>
</serviceGroup>
若是在测试过程中出现错误如下:
org.apache.axis2.AxisFault: The ServiceClass object does not implement the required method in the following form: OMElement getDocSummary(OMElement e)
则说明没有对方法设置MessageReceiver,则直接配置如下:
  1. <messageReceivers>
  2. <messageReceivermep="http://www.w3.org/2004/08/wsdl/in-out"
  3. class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
  4. </messageReceivers>
   <messageReceivers>
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
   </messageReceivers>
或者:
  1. <messageReceivers>
  2. <messageReceiver
  3. mep= "http://www.w3.org/2004/08/wsdl/in-only"
  4. class= "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
  5. <messageReceiver
  6. mep= "http://www.w3.org/2004/08/wsdl/in-out"
  7. class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
  8. </messageReceivers>
<messageReceivers >
        <messageReceiver
            mep= "http://www.w3.org/2004/08/wsdl/in-only"
    class= "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
        <messageReceiver
            mep= "http://www.w3.org/2004/08/wsdl/in-out"
    class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers >

需指教处????
Axis2发布服务生成的wsdl中,若是没有返回值:则Element没有相应的Response;若是参数为空,有返回值;则Element没有相应的方法;若参数为空,返回值也为空,则都没有Element,并且Message也为空。
如: 发布服务类中有个方法:
publicString test(){return"test";}
publicString saySorry(String name){return"Sorry,"+name+".";}
 
那最后生成的wsdl如下:
 
这个test方法中没有参数,所以没有输入参数的Element。若是没有返回值,则没有Response的Element的。
但是奇怪的是,在公司实习时,公司中使用的Axis2发布的服务,没有参数,但是依然有Element。只不过Element内部为空。
 
公司里Java端发布的时候,同样也是使用Axis2。但是生成的wsdl不同,难道还需要配置一下,这个问题有待解决……
一直以为,无论什么框架,发布服务,生成的wsdl都是相同的。其实不然。只能说明,wsdl,大方向相同。type,message,bind ,service四大部分。但是具体的样式是不同的。尤其是type中的Element。但是不用担心,我们最好按照w3school规范来写。这样不同语言之间可以方便相互调用。

还有一个问题需要请教
Axis2传递复杂类型的参数问题。在Axis2客户端使用常用的RPC形式,是无法传递List类型的,List<String>也不可以,更何况是自定义对象。
网上提供一种解决办法是,把List再次包装成一个对象,这样的话,Axis2传递自定义对象。
如下:
publicclassUserList {
privateList<User>users;
publicList<User> getUsers() {
returnusers;
}
publicvoidsetUsers(List<User> users) {
this.users= users;
}
}
但是使用RPC形式,返回值是无法转化成自定义对象,错误如下:
org.apache.axiom.om.impl.llom.OMTextImpl 无法转化List
 
这两个问题,有人解决了,可我尝试不正确,是配置的问题还是缺少步骤?
 
其实Axis2发布服务以及调用方式有很多种。调用中最常用也最直接最方便的就是RPC形式了,但是RPC却不能传递复杂类型以及自定义对象参数。
分享到:
评论

相关推荐

    在axis1.4中传递复杂类型数组参数(ArrayMapping)

    在 Axis1.4 中传递复杂类型数组参数,涉及到的是 Web 服务中的数据绑定和消息处理。Axis 是一个开源的 SOAP 库,它允许开发者创建、部署和使用 Web 服务。在处理复杂类型数组时,ArrayMapping 是 Axis 中的一个关键...

    axis2_demo实战 复杂对象传输 文件传输

    总的来说,这个实战教程将指导你如何利用Axis2创建Web服务,处理各种类型的数据,包括列表、对象和文件,这对于开发分布式应用和构建企业级集成解决方案具有很高的价值。通过学习和实践,你将能够熟练掌握Axis2的...

    webServices学习之二——axis1传递复杂类型javabean

    在本文中,我们将深入探讨Web服务的学习,特别是关于Axis1框架如何处理复杂类型的JavaBean作为参数的传递。在Web服务的世界里, Axis1是一个广泛使用的开源工具,它允许开发者创建和部署SOAP(简单对象访问协议)...

    axis复杂类型axis复杂类型

    在SOAP(Simple Object Access Protocol)通信中,复杂类型(Complex Type)是指除了基本数据类型(如整型、字符串等)之外的自定义数据结构,通常表现为包含多个属性或方法的对象,比如Java中的类。在本例中,我们...

    axis2常见异常总结

    6. Axis2 创建的WebService方法参数不能是数组类型的 如果我们想传入一个数组类型的参数给 Axis2 创建的 WebService 方法,那么需要将其转换为字符串,方可传递。例如,我们可以将 int[] array=new int[]{1,2,3,4} ...

    webservice之axis实例,axis复杂对象

    在本实例中,我们将深入探讨使用Apache Axis实现Web服务,特别是处理复杂对象的传递。 Apache Axis是Apache软件基金会开发的一个开源工具,它为Java开发者提供了一个方便的框架来创建和部署Web服务。Axis使得开发、...

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

    Axis2的帮助文档包括用户指南、开发者指南和API参考,为初学者和高级用户提供详尽的指导。用户可以通过官方文档学习如何配置Axis2、创建服务、调用服务以及使用各种特性。此外,社区论坛和邮件列表也是获取问题解答...

    axis1.4和axis2相关jar文件

    4. **配置文件**:如axis2.xml,这是Axis2的全局配置文件,定义了服务的默认行为和运行时参数。 5. **工具和脚本**:可能包括用于生成服务或客户端代码的工具,如wsdl2java等。 了解并熟练使用Axis1.4和Axis2的相关...

    axis2相关的jar包

    axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-jibx-1.5.4.jar axis2-json-1.5.4.jar axis2-kernel-1.5.4.jar axis2-metadata-1.5.4.jar axis2-mtompolicy-1.5.4.jar axis2-saaj-...

    axis2-1.6.2

    axis2-1.6.2.zip, windows axis2工具,根据 WSDL生成java文件。 1、axis2客户端下载地址:http://mirror.esocc.com/apache//axis/axis2/java/core/1.6.2/axis2-1.6.2-bin.zip; 2、下载解压在D:\Work_Program_...

    axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_

    标题中的"axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_"提到了几个关键元素,分别是"axis2"、"idea-plugin"和"idea导入axis2",这暗示了这个压缩包是用于在IntelliJ IDEA这款集成开发环境...

    axis和axis2的一些发布差异(WSDL2Java) 收藏

    通过对Axis与Axis2在使用WSDL2Java工具时的不同之处的详细探讨,我们可以看到,虽然两种工具都实现了相似的功能,但Axis2在很多方面都进行了优化和改进,尤其是在命令行参数、部署描述文件生成以及数据绑定等方面。...

    axis2-1.5.1-bin.zip axis2-1.5.1-war.zip axis2部署使用

    Apache Axis2是著名的开源Web服务框架,用于构建和部署高效且灵活的Web服务。这个框架是基于Axis1的升级版,提供了许多改进和新特性,包括更好的性能、模块化架构和增强的MIME支持。标题提到的“axis2-1.5.1-bin.zip...

    Axis1,Axis2,Xfire,CXF区别

    Axis2 和 CXF 都是 Apache孵化器下的开源开发工具,它们都提供了迁移的指导,但是对于这样的迁移,这两个开源项目都没有提供迁移的工具。Axis2 和 CXF 都有各自不同的 WebService 开发方法,每个方法都有相当数量...

    Axis_API和axis2_API

    这些文件可能包含上述提到的API参考、教程和示例代码,它们是学习和开发基于Axis或Axis2的Web服务不可或缺的资源。通过仔细阅读这些文档,开发者可以掌握如何使用Axis或Axis2来创建符合WS-I标准、高性能的Web服务,...

    axis2 包括源码 文档

    通过阅读文档,开发者可以学习如何配置 Axis2,设置服务部署,处理消息传递,以及集成各种WS-*规范,如WS-Security(Web服务安全)和WS-ReliableMessaging(可靠消息传递)。 其次,`axis2-1.6.2-src.zip` 文件包含...

    axis2-1.5.6完整版

    如果需要更深入地理解 Axis2 的工作原理或者开发自定义模块,`axis2-1.5.6-docs.zip` 将提供详细的指导。 总之,Axis2-1.5.6 是一个功能强大且灵活的 Web Service 框架,特别适合在 SAP 等企业级环境中开发和部署...

    axis2-1.6.1

    标题“axis2-1.6.1”指的是Apache Axis2的1.6.1版本,这是一个流行的开源Web服务引擎,用于构建和部署Web服务。Apache Axis2是Axis1的下一代,设计为更灵活、可扩展且高效。在这个版本中,它提供了一系列改进和新...

    s2axis2 实例

    通过对Seasar2的容器管理和组件化特性以及Axis2的Web服务处理能力的理解,开发者可以更高效地开发和维护复杂的分布式系统。在实际操作中,结合`s2axis2-examples`中的示例,可以进一步加深对这两个框架整合使用的...

    axis 1.x与axis2.x开发

    Axis分为两个主要版本:Axis1.x和Axis2.x,它们都是Java平台上的Web服务实现,但在设计和功能上有所不同。 Axis1.x是较早的版本,它在Web服务领域有着广泛的应用。Axis1.x基于Servlet API,提供了SOAP消息处理和...

Global site tag (gtag.js) - Google Analytics