簡體   English   中英

通過createObject或CFINVOKE將參數傳遞給Web服務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM