wsdl operation中参数的解析规律:
通常情况下由wsdl只定义一个input、一个output和一个Fault。input通常是一个对应复杂类型的element,这里我经常约束为request,ant出来的接口是一个request对象作为方法的参数,但是奇怪的是有时看别人的wsdl产生的代码却不是一个request参数,而是这个request中的多个具体属性作为这个方法的参数。最后经过我的追踪,发现:
1)当request对应的element定义为与operation(也即类的方法)的名字完全一样时,那么参数就不是一个request作为参数了,而是request的全部属性作为参数了。
2)如果element定义的名字与方法名完全一样,这时如果output(response)是一个有多个属性的复杂类型时,这时生成的类的方法就和我们想像的不一样了,response的多个属性也作为方法的参数来定义了,但是它们以Holder做了一下包装。这时有一个解决办法:将output复杂类型定义为一个xml的字符串,这样就只有一个参数了,客户端再去解析这个参数
注:在定义wsdl时,一定要记得操作“generate binding content...”,否则容易出错
通常情况下由wsdl只定义一个input、一个output和一个Fault。input通常是一个对应复杂类型的element,这里我经常约束为request,ant出来的接口是一个request对象作为方法的参数,但是奇怪的是有时看别人的wsdl产生的代码却不是一个request参数,而是这个request中的多个具体属性作为这个方法的参数。最后经过我的追踪,发现:
1)当request对应的element定义为与operation(也即类的方法)的名字完全一样时,那么参数就不是一个request作为参数了,而是request的全部属性作为参数了。
2)如果element定义的名字与方法名完全一样,这时如果output(response)是一个有多个属性的复杂类型时,这时生成的类的方法就和我们想像的不一样了,response的多个属性也作为方法的参数来定义了,但是它们以Holder做了一下包装。这时有一个解决办法:将output复杂类型定义为一个xml的字符串,这样就只有一个参数了,客户端再去解析这个参数
注:在定义wsdl时,一定要记得操作“generate binding content...”,否则容易出错