0

我通常使用 CFHTTP 使用 SOAP Web 服务并将 XML 作为 HTTP 参数发布。但是,这一次我尝试使用 使用 webservice createObject,但是当我将 XML 作为参数传递给 webservicews.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 文件传递​​给我的 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] />

如果您对我的网络服务的代码感兴趣,请看这里

于 2012-05-16T09:15:37.913 回答
0

您必须使用需要复杂数据类型的 SOAP Web 服务,而 CFC 反映了预期的结构,而不是传递 XML。看到这个

于 2012-05-16T01:40:04.247 回答