`
yager.j
  • 浏览: 4670 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Axis2复杂对象传递以及返回

阅读更多
List,Set,Map,HashMap等等等等,均无法返回,建议使用数组
另:参数传递也无法使用上述类型,可以使用对象,但是必须是简单对象。
PS:Axis2的版本为1.5

下面举例说明复杂对象传递:

接口类:
package webservice.wxm;
import java.util.*;
public interface IMessage
{
public void setName(String name);
public String getName();
}


实现类:
package webservice.wxm;
import java.util.*;
import webservice.wxm.IMessage;
public class ImplMessage implements IMessage
{
private String name;
public void setName(String name)
{this.name=name;}
public String getName()
{return this.name;}

}


服务类:
package webservice.wxm;
import webservice.wxm.*;
import java.util.*;
public class VectorService
{
public static String content="hello";
public Vector v=new Vector();
public void add(IMessage i)//这个地方是用接口类参数传递,在客户端测试会有异常
{ i=new ImplMessage();
i.setName("wxm");
v.add(i);

}
public ImplMessage get()
{
return (ImplMessage)v.get(0);
}

}


部署文件:
<service name="MessageService" scope="application">
    <description>
        Message Service
    </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">webservice.wxm.VectorService</parameter>

</service>


发布到Axis2的Webservices应用中,运行,就得到下面的异常
[SimpleAxisServer] Started
[INFO] Listening on port 8080
[ERROR] Exception occurred while trying to invoke service method add
org.apache.axis2.AxisFault: webservice.wxm.IMessage
        at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
        at org.apache.axis2.engine.DefaultObjectSupplier.getObject(DefaultObject
Supplier.java:45)
        at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java
:368)
        at org.apache.axis2.databinding.utils.BeanUtil.processObject(BeanUtil.ja
va:682)
        at org.apache.axis2.databinding.utils.BeanUtil.ProcessElement(BeanUtil.j
ava:630)
        at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java
:562)
        at org.apache.axis2.rpc.receivers.RPCUtil.processRequest(RPCUtil.java:15
3)
        at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.jav
a:188)
        at org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver.invokeBusines
sLogic(RPCInOnlyMessageReceiver.java:63)
        at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMe
ssageReceiver.java:114)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:173)
        at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostReq
uest(HTTPTransportUtils.java:167)
        at org.apache.axis2.transport.http.HTTPWorker.service(HTTPWorker.java:26
7)
        at org.apache.axis2.transport.http.server.AxisHttpService.doService(Axis
HttpService.java:281)
        at org.apache.axis2.transport.http.server.AxisHttpService.handleRequest(
AxisHttpService.java:187)
        at org.apache.axis2.transport.http.server.HttpServiceProcessor.run(HttpS
erviceProcessor.java:82)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:885)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:907)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.InstantiationException: webservice.wxm.IMessage
        at java.lang.Class.newInstance0(Class.java:340)
        at java.lang.Class.newInstance(Class.java:308)
        at org.apache.axis2.engine.DefaultObjectSupplier.getObject(DefaultObject
Supplier.java:40)
        ... 17 more
[ERROR] org.apache.axis2.AxisFault: Exception occurred while trying to invoke se
rvice method add
[ERROR] Array index out of range: 0
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.jav
a:165)
        at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic
(RPCMessageReceiver.java:102)
        at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusines
sLogic(AbstractInOutMessageReceiver.java:40)
        at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMe
ssageReceiver.java:114)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:173)
        at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostReq
uest(HTTPTransportUtils.java:167)
        at org.apache.axis2.transport.http.HTTPWorker.service(HTTPWorker.java:26
7)
        at org.apache.axis2.transport.http.server.AxisHttpService.doService(Axis
HttpService.java:281)
        at org.apache.axis2.transport.http.server.AxisHttpService.handleRequest(
AxisHttpService.java:187)
        at org.apache.axis2.transport.http.server.HttpServiceProcessor.run(HttpS
erviceProcessor.java:82)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:885)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:907)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0

        at java.util.Vector.get(Vector.java:694)
        at webservice.wxm.VectorService.get(VectorService.java:16)
        ... 17 more
[ERROR] Array index out of range: 0
org.apache.axis2.AxisFault: Array index out of range: 0
        at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic
(RPCMessageReceiver.java:158)
        at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusines
sLogic(AbstractInOutMessageReceiver.java:40)
        at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMe
ssageReceiver.java:114)
        at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:173)
        at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostReq
uest(HTTPTransportUtils.java:167)
        at org.apache.axis2.transport.http.HTTPWorker.service(HTTPWorker.java:26
7)
        at org.apache.axis2.transport.http.server.AxisHttpService.doService(Axis
HttpService.java:281)
        at org.apache.axis2.transport.http.server.AxisHttpService.handleRequest(
AxisHttpService.java:187)
        at org.apache.axis2.transport.http.server.HttpServiceProcessor.run(HttpS
erviceProcessor.java:82)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
utor.java:885)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
.java:907)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.jav
a:165)
        at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic
(RPCMessageReceiver.java:102)
        ... 11 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0

        at java.util.Vector.get(Vector.java:694)
        at webservice.wxm.VectorService.get(VectorService.java:16)
        ... 17 more



异常原因就是因为Axis2不支持接口作为参数传递,而是由axis2容器决定的
它就不支持这样的传递方法。。。。
讲服务类中的参数IMessage更改为ImplMessage变可正常运行。

哎....
郁闷的Webservice,纠结的Axis2
分享到:
评论

相关推荐

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

    本实战案例将关注使用Axis2进行复杂对象传输以及文件传输,特别是如何通过Web服务来传递列表(List)、对象(Object)和文件。 首先,让我们深入理解`axis2 Demo`。Axis2 提供了一个强大的开发和部署环境,它支持多种...

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

    总结一下,"webServices学习之二——axis1传递复杂类型javabean"这篇文章可能会详细讲解如何使用Axis1框架处理JavaBean对象,包括创建JavaBean、生成WSDL、部署服务以及客户端调用等步骤。了解这些内容对于开发基于...

    WebService axis1.4接口服务序列/反序列复杂项目实例

    在这个"WebService Axis1.4接口服务序列/反序列复杂项目实例"中,我们将深入探讨如何在 Axis1.4 中处理复杂的参数、自定义实体对象的序列化与反序列化,以及客户端的复杂调用。 首先,让我们理解序列化和反序列化的...

    axis自定义数组对象

    通过定义自定义对象类型、实现处理逻辑以及配置服务,可以有效地在Web服务中传递复杂的数据结构。这对于提高Web服务的功能性和灵活性至关重要。希望本文能够帮助读者更好地理解和掌握这一技术要点。

    axis2传送list资源包

    在描述中提到的“实现传递list格式的资源包”,意味着我们要探讨的是如何通过Axis2来发送和接收包含List对象的数据。 首先,让我们了解Apache Axis2中的数据绑定(Data Binding)。在这里,我们提到了"axis2-adb-...

    Java+Axis2调用Web Services 网络接口

    Axis2是Apache Axis的第二代版本,提供了更高级的功能,包括模块化架构、消息传递模型、多协议支持等。它的核心部分负责处理SOAP消息,而可插入的模块则处理各种协议和格式,如REST、MTOM(Message Transmission ...

    axis复杂类型axis复杂类型

    总结一下,SOAP中的复杂类型处理涉及创建JavaBean类来表示复杂的数据结构,编写服务端程序来处理这些对象,以及在服务器配置文件中定义服务和对象的映射。在Axis框架中,这通常通过编辑`server-config.wsdd`文件来...

    axis2_webservice

    四、复杂对象类型的Web服务 在Axis2中,可以处理复杂的Java对象类型,包括数组、集合和自定义对象。通过 Axis2 的数据绑定机制,可以自动将这些复杂类型转换为XML格式,以便在网络中传输。 五、发布与调用Web服务 ...

    axis2 初学者教程

    - **复杂对象类型**:Axis2支持处理复杂的数据类型,如JavaBean,可以方便地在服务间传递复杂数据结构。 - **Session管理**:Axis2支持对Web服务的会话(Session)进行管理,这对于需要保持状态的交互式服务至关重要。...

    WebService之AXIS传递javabean.7z

    在Java世界中,当我们需要通过WebService传递复杂的数据结构时,例如一个对象或javabean,AXIS提供了很好的支持。javabean是一种Java类,遵循特定的命名和设计规则,用于封装数据和提供访问这些数据的方法,它们常...

    Java Webservice Axis2 Client(含soapheader验证)

    在Axis2中,可以通过`SOAPHeader`和`SOAPHeaderBlock`对象来实现。例如,如果你的SOAP Header需要包含认证信息,可以这样做: ```java OMFactory omFactory = OMAbstractFactory.getOMFactory(); OMElement ...

    webservice的axis2开发

    通过AXIS2,开发者可以轻松地创建和发布WebService,同时AXIS2提供了丰富的功能,如WS-Security、MTOM和SwA等,以支持复杂的Web服务交互场景。学习AXIS2有助于深入理解WebService开发,并能快速构建实际应用。

    axis2编写发布和例子详解

    Axis2支持复杂类型的传输,这意味着可以传递结构化的对象,如自定义的Java类或数组。通过WSDL(Web Service Description Language)定义,客户端可以正确地序列化和反序列化这些复杂类型的数据。 8. **模块机制** ...

    WebService大讲堂之Axis2(2):复合类型数据的传递.pdf

    总结,本篇内容主要讲解了如何在 Axis2 中处理复合类型数据的传递,包括数组(一维和二维)以及自定义类对象。通过 Axis2,开发者可以直接使用 Java 类型作为 WebService 方法的参数和返回值,简化了开发过程。同时...

    WebService大讲堂之Axis2

    Axis2能够处理复杂的Java对象,将其序列化为XML,并通过SOAP消息在服务端和客户端之间传输。 七、使用services.xml文件发布WebService 虽然Axis2支持0配置发布WebService,但某些场景下,开发者可能需要更细致地...

    axis2教程word文件

    Axis2允许在WebService中传输复杂的Java数据类型,如自定义对象、集合、映射等。这一特性对于处理复杂的业务逻辑至关重要,因为它允许在服务端和客户端之间透明地传递丰富的数据结构。 ##### 3. **使用services.xml...

    完整的axis webservice例子 实现List

    在IT行业中,Web服务是一种通过网络提供和使用功能的方式,而Axis是Apache软件基金会开发的一个开源Java SOAP(简单对象访问协议)客户端和服务器框架。它允许开发者创建和部署Web服务,使得不同系统间的通信变得...

    axis2_WebService_开发指南.docx

    三、复杂对象类型的WebService Axis2支持复杂数据类型,可以通过JavaBeans或XML Schema定义对象模型,然后在服务中使用这些对象作为参数或返回值。这使得能够传递更复杂的业务数据。 四、发布与调用Web服务 Axis2...

Global site tag (gtag.js) - Google Analytics