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进行复杂对象传输以及文件传输,特别是如何通过Web服务来传递列表(List)、对象(Object)和文件。 首先,让我们深入理解`axis2 Demo`。Axis2 提供了一个强大的开发和部署环境,它支持多种...
总结一下,"webServices学习之二——axis1传递复杂类型javabean"这篇文章可能会详细讲解如何使用Axis1框架处理JavaBean对象,包括创建JavaBean、生成WSDL、部署服务以及客户端调用等步骤。了解这些内容对于开发基于...
在这个"WebService Axis1.4接口服务序列/反序列复杂项目实例"中,我们将深入探讨如何在 Axis1.4 中处理复杂的参数、自定义实体对象的序列化与反序列化,以及客户端的复杂调用。 首先,让我们理解序列化和反序列化的...
通过定义自定义对象类型、实现处理逻辑以及配置服务,可以有效地在Web服务中传递复杂的数据结构。这对于提高Web服务的功能性和灵活性至关重要。希望本文能够帮助读者更好地理解和掌握这一技术要点。
在描述中提到的“实现传递list格式的资源包”,意味着我们要探讨的是如何通过Axis2来发送和接收包含List对象的数据。 首先,让我们了解Apache Axis2中的数据绑定(Data Binding)。在这里,我们提到了"axis2-adb-...
Axis2是Apache Axis的第二代版本,提供了更高级的功能,包括模块化架构、消息传递模型、多协议支持等。它的核心部分负责处理SOAP消息,而可插入的模块则处理各种协议和格式,如REST、MTOM(Message Transmission ...
总结一下,SOAP中的复杂类型处理涉及创建JavaBean类来表示复杂的数据结构,编写服务端程序来处理这些对象,以及在服务器配置文件中定义服务和对象的映射。在Axis框架中,这通常通过编辑`server-config.wsdd`文件来...
四、复杂对象类型的Web服务 在Axis2中,可以处理复杂的Java对象类型,包括数组、集合和自定义对象。通过 Axis2 的数据绑定机制,可以自动将这些复杂类型转换为XML格式,以便在网络中传输。 五、发布与调用Web服务 ...
- **复杂对象类型**:Axis2支持处理复杂的数据类型,如JavaBean,可以方便地在服务间传递复杂数据结构。 - **Session管理**:Axis2支持对Web服务的会话(Session)进行管理,这对于需要保持状态的交互式服务至关重要。...
在Java世界中,当我们需要通过WebService传递复杂的数据结构时,例如一个对象或javabean,AXIS提供了很好的支持。javabean是一种Java类,遵循特定的命名和设计规则,用于封装数据和提供访问这些数据的方法,它们常...
在Axis2中,可以通过`SOAPHeader`和`SOAPHeaderBlock`对象来实现。例如,如果你的SOAP Header需要包含认证信息,可以这样做: ```java OMFactory omFactory = OMAbstractFactory.getOMFactory(); OMElement ...
通过AXIS2,开发者可以轻松地创建和发布WebService,同时AXIS2提供了丰富的功能,如WS-Security、MTOM和SwA等,以支持复杂的Web服务交互场景。学习AXIS2有助于深入理解WebService开发,并能快速构建实际应用。
Axis2支持复杂类型的传输,这意味着可以传递结构化的对象,如自定义的Java类或数组。通过WSDL(Web Service Description Language)定义,客户端可以正确地序列化和反序列化这些复杂类型的数据。 8. **模块机制** ...
总结,本篇内容主要讲解了如何在 Axis2 中处理复合类型数据的传递,包括数组(一维和二维)以及自定义类对象。通过 Axis2,开发者可以直接使用 Java 类型作为 WebService 方法的参数和返回值,简化了开发过程。同时...
Axis2能够处理复杂的Java对象,将其序列化为XML,并通过SOAP消息在服务端和客户端之间传输。 七、使用services.xml文件发布WebService 虽然Axis2支持0配置发布WebService,但某些场景下,开发者可能需要更细致地...
Axis2允许在WebService中传输复杂的Java数据类型,如自定义对象、集合、映射等。这一特性对于处理复杂的业务逻辑至关重要,因为它允许在服务端和客户端之间透明地传递丰富的数据结构。 ##### 3. **使用services.xml...
在IT行业中,Web服务是一种通过网络提供和使用功能的方式,而Axis是Apache软件基金会开发的一个开源Java SOAP(简单对象访问协议)客户端和服务器框架。它允许开发者创建和部署Web服务,使得不同系统间的通信变得...
三、复杂对象类型的WebService Axis2支持复杂数据类型,可以通过JavaBeans或XML Schema定义对象模型,然后在服务中使用这些对象作为参数或返回值。这使得能够传递更复杂的业务数据。 四、发布与调用Web服务 Axis2...