2012-01-09 5 views
3

В ColdFusion 8 документации говорится следующее о «требуется» атрибут CFARGUMENT:Можете ли вы установить значение по умолчанию для аргумента в функции удаленного CFC?

«Все аргументы требуются при вызове в качестве веб-службы, независимо от того, как они определены»

Однако, я не хочу, чтобы ColdFusion выдавал исключение, если аргумент отсутствует в запросе. Я хочу сам обрабатывать это как часть запроса. Итак, могу ли я установить значение по умолчанию для требуемого аргумента?

+0

Посмотрите, как http://stackoverflow.com/questions/6326873/coldfusion-web-service- issue/6327300 # 6327300 –

ответ

8

Да и нет.

Официально вы не может, потому что WSDL производства ColdFusion оставляет важное требование в 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> 

и добавить "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. Вызовите свой веб-сервис так, используя атрибут «опустить» для аргументы, которые вы не хотите, чтобы пройти:
<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 = "" для каждого аргумента. –

1

в CF9 CFScript:

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 не работает. Я знаю, потому что это был мой первый ответ, затем я вернулся и протестировал его ... и это с треском провалилось. –

+0

Нечетный, я просто попробовал это на сервере CF8, и он работал нормально: # arg1 # BKK

+0

Бен, ты аргумент установлен в 'требуется = "истинный"', OP запрашивает информацию о том, есть ли у вас необязательный параметр, который будет «required =» false ». Попробуйте перевернуть его на false, установив параметр по умолчанию и повторите попытку. В конце концов вы должны увидеть ошибку о недопустимых аргументах. –