2

如果一个cfinvoke参数类型设置为 的 SOAP Web 服务tns:ArrayOfString,将得到:

无法执行 Web 服务调用 Hello。调用 Web 服务操作时返回的错误是:''java.lang.IlligalArgumentException: argument type mismatch

如何使用 type 调用 Web 服务tns:ArrayOfString

根据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>

现在的问题是,为什么这行得通?

4

1 回答 1

2

就像我在您引用的线程中提到的那样,没有直接映射. ArrayOfString所以它本质上被视为一个结构,就像任何其他复杂类型一样。如果您查看 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 ];
于 2012-12-18T23:26:24.470 回答