今天用axis传递自定义对象的数组,发生了很多问题,总结如下:
1: 发布程序的时候报出了找不到类的问题(类是解析xml用的),最终发现自己系统中存在的java版本为1.3.*,把java版本提高就可以解决了。(编译的类一定要放在apache-tomcat-5.5.28\webapps\axis\WEB-INF\classes下,否则也会报找不到类)
2:发布的时候系统报找不到我自己定义的类,经过检查发现发布文件中
<typeMapping
xmlns:ns="sheng.com"
qname="ns:Bean"
type="java:com.sheng.Student"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
的type="java:com.sheng.Student"被我多写个空格type="java: com.sheng.Student",去掉空格问题就没了。
3:客户端调用的时候,QName一定要与发布的文档相对应,如果会出错,如:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="StudentService" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="com.sheng.Test"/>
<parameter name="scope" value="application"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns1:Student" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.sheng.Student" xmlns:ns1="sheng.com"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="ns2:StudentArray" serializer="org.apache.axis.encoding.ser.ArraySerializerFactory" type="java:com.sheng.Student[]" xmlns:ns2="sheng.com"/>
</service>
</deployment>
客户端调用程序中应写:
QName studentQn = new QName("sheng.com","Student"); //应该与发布文件上的相对应
QName studentArrayQn = new QName("sheng.com","StudentArray");//应该与发布文件上的相对应
4:客户端调用服务的时候,一定要写清参数的类型,否则服务端根本收不到参数。代码如下:
QName xmlTypeQn = new QName("XMLType.SOAP_ARRAY");
call.addParameter(studentArrayQn, xmlTypeQn, ParameterMode.IN);
正確寫法應該是下面的,不過上面的寫法也能調用成功
call.addParameter(studentArrayQn, XMLType.SOAP_ARRAY, ParameterMode.IN);
分享到:
相关推荐
### Axis自定义数组对象知识点详解 #### 一、概述 在进行Web服务开发时,我们经常需要处理复杂的类型,如自定义的数组或对象。Apache Axis框架为Java开发者提供了强大的支持,使得创建、部署和调用Web服务变得简单...
在 Axis1.4 中传递复杂类型数组参数,涉及到的是 Web 服务中的数据绑定和消息处理。Axis 是一个开源的 SOAP 库,它允许开发者创建、部署和使用 Web 服务。在处理复杂类型数组时,ArrayMapping 是 Axis 中的一个关键...
Axis2提供了一个高效的方法调用机制,允许客户端通过HTTP或HTTPS协议调用服务端的方法,并传递参数。 2. **对象XML化**:在Web服务中,对象需要被序列化为XML格式以便在网络上传输。Axis2支持Java对象到XML的自动...
在Web服务中,有时我们需要传递更复杂的数据结构,如自定义对象或数组。Axis支持这种复杂类型的序列化和反序列化。我们需要确保这些对象正确实现了`Serializable`接口,并且在WSDL中定义了它们的XML Schema数据类型...
在这个"WebService Axis1.4接口服务序列/反序列复杂项目实例"中,我们将深入探讨如何在 Axis1.4 中处理复杂的参数、自定义实体对象的序列化与反序列化,以及客户端的复杂调用。 首先,让我们理解序列化和反序列化的...
Axis2 支持处理复杂的数据类型,包括数组、自定义对象等,使得服务能够处理更丰富的数据交互。 #### 3.2 WebService 会话管理 Axis2 提供了对 WebService 会话(Session)的管理,允许在多个请求之间保持状态。 #...
在Axis2中,可以直接使用Java的数组或自定义类(接口)作为WebService方法的参数或返回值。对于数组,注意只能声明一维数组,但可以通过分隔符来表示多维数组,例如上面的代码示例就是一个模拟的3x3二维字符串数组。...
总结,本篇内容主要讲解了如何在 Axis2 中处理复合类型数据的传递,包括数组(一维和二维)以及自定义类对象。通过 Axis2,开发者可以直接使用 Java 类型作为 WebService 方法的参数和返回值,简化了开发过程。同时...
- **说明**:可以是数组形式的数据,也可以是 URL 地址指向的外部数据文件。根据不同的图表类型,数据格式也会有所不同。 3. **color`:设置图表的颜色。 - **说明**:可以为图表中的各个元素指定不同的颜色,如...
通过`canvasbgcolor`和`canvasbgalpha`参数,可以自定义图表的背景颜色和透明度。 8. **Legend(图例)** 图例是图表中区分不同系列的标识。`showLegend`参数控制图例是否显示,`legendPosition`设定图例的位置,...
本程序演示了如何在计算机图形学中实现一个彩色立方体的旋转,并通过颜色插值的方式为立方体的不同面赋予不同的颜色。该示例代码主要展示了以下几个关键点: 1. **立方体顶点与颜色定义**:通过定义数组来存储立方体...
在MATLAB中,矩阵数组是数据处理和计算的基础,它是一种强大的工具,尤其在图形可视化方面。本示例将向你展示如何利用MATLAB的矩阵运算能力,来创建一个浪漫的心形图案,非常适合在情人节这样的特殊日子里表达情感。...
在示例中,我们看到一个名为`func`的函数被定义,它计算输入数组的最大值与最小值之差、绝对值和平方。这个函数通过`apply`方法应用于Series `ser1`和DataFrame `df1`。`apply`方法允许我们将函数应用于DataFrame的...
// 方法可以扩展为,判断参数是否匹配返回数组; // 返回的数组可以扩展为数据库查询结果返回。由于是字符数组传递,可以定义字符顺序。 // 例如: // infoList[0]="id||name||part||time"; // 用分隔符的方式...
`ticks`数组可以用来自定义坐标轴的刻度值,而`tickInterval`则定义了刻度之间的间距。`renderer`和`rendererOptions`分别指定了轴的数据渲染器及其配置,例如`$.jqplot.LinearAxisRenderer`用于线性轴。 `...
`.Plot.Axis(VtChAxisIdX).AxisGrid.MajorPen.Style`和`.Plot.Axis(VtChAxisIdY).AxisGrid.MajorPen.Style`决定了主要网格线的样式,此处设置为实线(`VtPenStyleSolid`)。这将绘制出连接主要刻度线的网格线。 `....
// 当返回值为其他类型如自定义类型、Map、List 等时,将其序列化后返回 public byte[] test4(String arg) { Map, Object> map = new HashMap(); map.put("测试", arg); try (ByteArrayOutputStream baos = ...
- `agg`: 默认情况下,`agg`操作沿着DataFrame的列方向(即按列聚合)进行,但也可以通过设置`axis`参数为1来沿着行方向操作。 - `apply`: `apply`可以沿着DataFrame的任何轴(行或列)进行操作,通过设置`axis`...