我通常使用带有CFHTTP的SOAP webservices,并将XML作为HTTP参数发布。但是,这一次我尝试使用createObject来使用when服务,但是当我将XML作为参数传递给when服务ws.someMethod(args);时,它失败了。我尝试使用结构来保存参数值,但同样不起作用。因此,如何传递参数呢?部分WSDL如下
<xs:element name="ORDER">
<xs:complexType>
<xs:sequence>
<xs:element name="Header" type="schemaOne:HeaderType"/>
<xs:element maxOccurs="unbounded" name="Detail" type="schemaOne:DetailType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="DetailType">
<xs:sequence>
<xs:element ref="schemaOne:DTORDN"/>
<xs:element ref="schemaOne:DTRCID"/>
<xs:element ref="schemaOne:DTPRT"/>
<xs:element ref="schemaOne:DTQTY"/>
<xs:element ref="schemaOne:DTNTU"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="HeaderType">
<xs:sequence>
<xs:element ref="schemaOne:DSORDN"/>
<xs:element ref="schemaOne:DSRCID"/>
<xs:element ref="schemaOne:DSBFNM"/>
<xs:element ref="schemaOne:DSBLNM"/>
<xs:element minOccurs="0" ref="schemaOne:DSBENT"/>
<xs:element ref="schemaOne:DSBAD1"/>
<xs:element minOccurs="0" ref="schemaOne:DSBAD2"/>
<xs:element minOccurs="0" ref="schemaOne:DSBAD3"/>
<xs:element ref="schemaOne:DSBAD4"/>
<xs:element ref="schemaOne:DSBSTT"/>
<xs:element ref="schemaOne:DSBZIP"/>
<xs:element ref="schemaOne:DSBCNT"/>
</xs:sequence>
</xs:complexType>这是我构造的结构。
<cfscript>
ORDER = {};
ORDER.Header = {};
ORDER.Detail = {};
ORDER.Header.DSORDN = '251716';
ORDER.Header.DSRCID = 'H';
ORDER.Header.DSBFNM = 'Joe';
ORDER.Header.DSBLNM = 'Smith';
ORDER.Header.DSBAD1 = '4997 County Road';
ORDER.Header.DSBAD4 = 'Springfield';
ORDER.Header.DSBSTT = 'MO';
ORDER.Header.DSBZIP = '49657';
ORDER.Header.DSBCNT = 'USA';
ORDER.Detail.DTORDN = '251716';
ORDER.Detail.DTRCID = 'D';
ORDER.Detail.DTPRT = '0300604';
ORDER.Detail.DTQTY = '0000000000001';
ORDER.Detail.DTNTU = '00000009.9900';
</cfscript>发布于 2012-05-16 09:40:04
您必须使用SOAP web服务,这些服务需要复杂的数据类型和反映预期结构的CFC,而不是传递XML。请参阅this
发布于 2012-05-16 17:15:38
我目前正在处理单元测试,并试图将xml文件传递给我的Webservice。我只是将我需要的xml文件保存在外部文件中,并在cfscript中使用"FileRead“读取它们。我就是这么做的
<cfscript>
input = FileRead("http.....");
mycomponent = createObject("component", "component.beginning.from.root");
mycomponent.methodName(input);
</cfscript>但是我必须更改我的代码,因为在我将HttpRequest的内容解析为xml之前,我需要在哪里查找预期的元素。现在我使用传入的文件,并立即查找我想要的元素,而不是解析,因为它已经是xml
<cfset var body = xmlsearch(arguments.input, "//soapenv:body")[1] />如果您对我的‘re服务的代码感兴趣,请查看here
https://stackoverflow.com/questions/10610897
复制相似问题