[英]Passing parameter to a webservice via createObject or CFINVOKE
我通常使用CFHTTP來使用SOAP Web服務,並將XML作為HTTP參數發布。 但是,這次,我嘗試使用createObject
來使用Web服務,但是當我將XML作為參數傳遞給Web服務時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>
您必須使用SOAP Web服務,該服務需要使用CFC來反映復雜的數據類型,而CFC可以反映期望的結構而不是傳遞XML。 看到這個
我目前正在使用單元測試,並且在嘗試將xml文件傳遞到我的Web服務。 我只是將所需的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] />
如果您對我的網絡服務的代碼感興趣,請看這里
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.