用Axis和SOAP开发基于JAX-RPC的Web服务,遇到的问题!
RZZZB 2004-02-27 05:19:59 在文章“用Axis和SOAP开发基于JAX-RPC的Web服务”中讲到如下内容:
..........
参数模式(Parameter Modes)
基于JAX-RPC的Web服务调用使用的是拷贝传值的参数传递方式。它不支持引用传值的参数传递方式。
JAX-RPC支持下列参数模式:
A. IN模式:一个IN类型的参数传递的是一个拷贝。IN类型参数的值在Web服务调用之前就被拷贝。返回值也被创建为一个拷贝,然后返回给Web服务的客户端。
B. OUT模式:OUT类型的参数被作为一个没有任何输入值的拷贝传递给Web服务方法。Web服务方法填充OUT参数,然后把它返回给客户端。
C. INOUT模式:INOUT参数被作为一个具有一个输入值的拷贝传递给给Web服务方法。Web服务方法使用这个输入值,处理它,用一个新值填充INOUT参数,然后返回给客户端。
OUT和INOUT参数的参数传递模式都是使用Holder类。使用Holder类使得映射可以保持预期的WSDL签名和参数传递语义。JAX-RPC规范包括简单XML类型到Java数据类型的映射的“Holder类”。在JAX-RPC实现的javax.xml.rpc.holders包中可以得到原子数据类型(例如,int,float等等)的Holder类。对复杂的XML数据类型来说,Holder类的名字是通过在相对应的Java类的后面附加"Holder"来构成的。这些生成Holder类作为生成子包Holders的一部分被包装在WSDL到Java的映射中。
每个Holder类提供下列方法和属性:
A. 一个公共属性“value”,“value”的类型就是相映射的Java类型。
B. 一个默认的构造函数,用来初始化“value”属性为一个默认的值。
C. 一个把“value”属性的值设置为传入参数的构造函数。
....................
以上说的Holder类定义的格式是固定的吗?如果是的,我也照做了一个web service,
可是在axis里查看已部署的服务时提示:
Exception - java.lang.IllegalArgumentException: Illegal argument passed to ParameterDesc.setJavaType. The java type orderservice.holders.OrderHolder does not match the mode out
其中orderservice.holders.OrderHolder是我定义的一个Holder类! 究竟是哪出了问题,请大家帮忙看一下,谢谢!