您可以为远程CFC功能中的参数设置默认值吗?

Eri*_*air 3 coldfusion arguments cfc remote-access

ColdFusion 8文档说明了有关CFARGUMENT的"required"属性的以下内容:

"当作为Web服务调用时,所有参数都是必需的,无论它们是如何定义的."

但是,我不希望ColdFusion在请求中缺少参数时抛出异常.作为请求的一部分,我想自己处理它.那么,我可以为所需参数设置默认值吗?

Sha*_*mes 8

是的,不是.

正式地说,你不能,因为ColdFusion生成的WSDL在XML中留下了一个重要的要求,它是允许不传递可选参数所必需的.该属性为"minOccurs".因此,虽然设置"默认"属性(以及值)完全有效 - 但您永远无法将其设置为"required = false"并利用默认值,因为远程方法总是需要传递一些东西.

但是,有一个办法非官方设置可选参数,并根据需要设置其默认值:

  1. 使用最后的标准"?wsdl"参数为您的CFC生成WSDL,并将代码保存到自己的文档中.

  2. 找到您要定义的可选参数:

<element name="test">
      <complexType>
        <sequence>
          <element name="a" type="xsd:string"/>
          <element name="b" type="xsd:string"/>
          <element name="c" type="xsd:double"/>
          <element name="d" type="xsd:boolean"/>
        </sequence>
      </complexType>
</element>
Run Code Online (Sandbox Code Playgroud)

并添加"minOccurs"属性,将其设置为0:

<element name="test">
  <complexType>
    <sequence>
      <element name="a" type="xsd:string"/>
      <element name="b" type="xsd:string"/>
      <element name="c" type="xsd:double" minOccurs="0"/>
      <element name="d" type="xsd:boolean" minOccurs="0"/>
    </sequence>
  </complexType>
</element>
Run Code Online (Sandbox Code Playgroud)
  1. 使用您不希望传递的参数的"省略"属性调用您的Web服务,如下所示:
<cfinvoke webservice="http://localhost/mysavedwsdl.cfm" returnvariable="result" method="runTest">
  <cfinvokeargument name="a" omit="no" value="test123" />   
  <cfinvokeargument name="b" omit="no" value="test456" />
  <cfinvokeargument name="c" omit="yes" />
  <cfinvokeargument name="d" omit="yes" /> 
</cfinvoke>
Run Code Online (Sandbox Code Playgroud)

来源:使用可选参数调用ColdFusion Web服务时出现的问题.