2012-01-09 93 views
3

ColdFusion的8文檔指出以下有關CFARGUMENT的「必需的」屬性:您可以爲遠程CFC功能中的參數設置默認值嗎?

「他們是如何定義的,當作爲一個Web服務調用需要的所有參數,不論」

但是,我不希望ColdFusion在請求中缺少參數時拋出異常。我想自己處理它作爲請求的一部分。那麼,我可以爲所需的參數設置一個默認值嗎?

在CF9 CFSCRIPT
+0

樣子 http://stackoverflow.com/questions/6326873/coldfusion-web-service-問題/ 6327300#6327300 – 2012-01-10 09:57:53

回答

8

是,也不是。

正式,你不能,因爲ColdFusion的產生的WSDL遺漏了在必要允許可選參數不被傳遞的XML的一個重要要求。這個屬性是「minOccurs」。因此,儘管設置「default」屬性(以及值)對您來說是完全有效的,但您將永遠無法將其設置爲「required = false」並利用默認值,因爲遠程方法將永遠需要傳遞一些東西。

然而,有辦法非官方設置可選參數,並根據需要設置其默認:「WSDL」

  1. 使用標準生成WSDL您CFC參數最後,將代碼保存到自己的文檔中。

  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> 

,並添加 「的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> 
  1. 像這樣調用web服務,使用「omit」屬性你不想參數傳遞:
<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> 

來源:Issues when calling a ColdFusion web service with optional arguments.

+0

謝謝。我有一個預先構建的WSDL,所以我爲每個參數添加了default =「」。 – 2012-01-09 20:19:58

1

component // { 
    output='true' 
{ 

    remote function testMethod (
     string argument1='testValue' 
    ) 
     output='true' 
    { 
     writeOutput(arguments.argument1); 
    } 
} 

或標記,應在工作CF8:

<cffunction name="testMethod"> 
    <cfargument name="arg1" type="string" default="default"> 
</cffunction> 
+0

他正在CF8上工作,而CF8的發佈代碼無效。我知道,因爲那是我的第一個答案,然後我回去測試它......並且失敗了。 – 2012-01-09 16:55:10

+0

奇怪,我只是嘗試這樣一個CF8服務器上,它工作得很好: #ARG1# BKK 2012-01-09 17:26:06

+0

奔,則有參數設置爲 '需要= 「真」', OP正在請求有關您是否有可選參數的信息,該參數將爲'required =「false」'。嘗試將其翻轉爲false,設置默認參數,然後重試。您最終應該看到有關無效參數的錯誤。 – 2012-01-09 18:15:29

相關問題