2012-12-18 35 views
2

如果一个cfinvoke与参数类型集来tns:ArrayOfString SOAP Web服务,一会就搞定:应该在ColdFusion中使用什么映射到SOAP类型tns:ArrayOfString?

无法执行的Web服务调用你好。 'java.lang.IlligalArgumentException:参数类型不匹配

如何与tns:ArrayOfString类型调用Web服务时 调用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> 

现在的问题是,为什么这项工作?

回答

2

就像我在你引用的主题中提到的那样,有no direct mappingArrayOfString。所以它基本上被当作一个结构,就像任何其他复杂类型一样。如果你看一下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 ]; 
相关问题