0

私は通常、CFHTTP を使用して SOAP Web サービスを使用し、XML を HTTP パラメーターとして送信します。ただし、今回は で webservice を消費しようとしているのですが、 webservicecreateObjectに XML を引数として渡す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>
4

2 に答える 2

0

XMLを渡す代わりに、期待される構造をミラーリングするCFCで複雑なデータ型を期待するSOAPWebサービスを利用する必要があります。これを見る

于 2012-05-16T01:40:04.247 に答える
0

現在、単体テストを行っており、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] />

私の Web サービスのコードに興味がある場合は、こちらをご覧ください

于 2012-05-16T09:15:37.913 に答える