在ColdFusion中应该使用什么映射到SOAP类型tns:ArrayOfString?

时间:2012-12-18 21:00:15

标签: web-services soap coldfusion

如果一个cfinvoke具有param类型的SOAP Web服务设置为tns:ArrayOfString,则会得到:

  

无法执行Web服务调用Hello。故障返回时   调用Web服务操作是:   ''java.lang.IlligalArgumentException:参数类型不匹配

如何调用类型为tns:ArrayOfString

的Web服务

根据http://forums.adobe.com/message/4337438

这有效:

<cfscript>
     root = structnew();
     text = arraynew(1);
     text[1] = "Hello";
     text[2] = "world";
     root.string=text;
</cfscript>

<cfinvoke method="Hello"
  webservice="http://localhost/Service1.asmx?wsdl"
  returnvariable="response">
     <cfinvokeargument name="array" value=#root#/>
</cfinvoke>

现在的问题是,为什么这有效?

1 个答案:

答案 0 :(得分:2)

就像我在您引用的主题中提到的那样,ArrayOfStringno direct mapping。所以它基本上被视为一种结构,就像任何其他复杂类型一样。如果您查看wsdl,ArrayOfString包含一个名为string的密钥,其值为type="s:string"的数组:

<s:complexType name="ArrayOfString">
   <s:sequence>
     <s:element minOccurs="0" maxOccurs="unbounded" 
           name="string" nillable="true" type="s:string" /> 
   </s:sequence>
</s:complexType>

因此CF代码有效,因为它创建了一个具有正确密钥名称(string)和值类型(字符串数组)的结构。

    root.string = [ arrayOfStrings ];