Wow, thanks for the info. I guess I always assumed that the required attribute 
was being obeyed. I'm going to need to rethink my changes.


Thanks,
Charlie

Sent from my iPhone

On Aug 18, 2010, at 2:45 AM, "Nitai @ Razuna" <[email protected]> wrote:

> Hi Matt,
> 
> As you know we use a lot of webservices with Razuna and one thing that always 
> hits me is that functions which are declared with access=remote also requires 
> that all parameters are being passed in. The "required" true/false has no 
> effect.
> 
> This is something that Adobe Coldfusion documents also point out in 
> "Publishing Webservices" at 
> http://livedocs.adobe.com/coldfusion/8/htmldocs/webservices_01.html. Point 4: 
> The attribute setting required="false" for the cfargument tag is ignored. 
> ColdFusion considers all parameters as required. 
> 
> Kind Regards,
> Nitai
> 
> On Wed, Aug 18, 2010 at 6:52 AM, Matthew Woodward <[email protected]> 
> wrote:
> On Mon, Aug 16, 2010 at 10:48 AM, Skellington <[email protected]> wrote:
> The issue I'm running in to is once I add
> the new cfargument and a client connects and posts data I'm getting a
> "java.lang.NullPointerException" error in my logs.
> 
> I don't do a lot with web services so maybe someone else will have better 
> information, but I ran a quick test and think there may be a couple of issues.
> 
> Here's my web service CFC:
> <cfcomponent output="false">
> 
>     <cffunction name="foo" access="remote" output="false" returntype="string">
>         <cfargument name="bar" type="string" required="true" />
>         <cfargument name="baz" type="string" required="false" default="Here's 
> baz!" />
>         
>         <cfreturn arguments.bar & " " & arguments.baz />
>     </cffunction>
> 
> </cfcomponent>
> 
> Here's my calling CFML page:
> <cfinvoke webservice="http://localhost:8080/openbd/WSTest.cfc?wsdl"; 
> method="foo" returnvariable="wsreturn">
>     <cfinvokeargument name="bar" value="Hello from the web service!" />
>     <cfinvokeargument name="baz" value="Baz from caller." />
> </cfinvoke>
> 
> <cfdump var="#wsreturn#" />
> 
> Note that first I tried it with a SINGLE cfargument, meaning my initial test 
> was WITHOUT the "baz" cfargument and with only one cfinvokeargument (bar). 
> That worked fine.
> 
> When I added the second cfargument in the CFC and left the calling page with 
> a single cfinvokeargument, I get this error:
> Type  Application
> Detail        Unrecognized error code: Invalid web service operation. Cannot 
> locate operation foo that accepts parameters: { string (bar) }
> Tag Context   CFINVOKE 
> (/home/mwoodward/apache-tomcat-6.0.26/webapps/openbd/wstest.cfm, Line=1, 
> Column=1)
> 
> I thought maybe I needed to add refreshwsdl to the cfinvoke call, but that 
> output this on the calling page:
> true Hello from the web service!
> 
> So it seems to be dumping the value of refreshwsdl, which I wouldn't have 
> expected.
> 
> Changing the calling page to include the second argument, I get this:
> Hello from the web service! Baz from caller.
> 
> Which is expected.
> 
> So it seems that if you have an optional argument in the web service, things 
> get funky.
> 
> I did a bit more looking and found this:
> http://www.talkingtree.com/blog/index.cfm/2006/7/12/cfinvokeargument-omit-attr
> 
> Short version is that's a known issue all the way back to 2006 in Adobe CF 
> 6.x and in CF 7 they added the omit attribute to cfinvokeargument. This means 
> this is likely caused by the underlying Axis web services engine in 
> combination with the CFML layer on top of it.
> 
> So the trick is to add omit="true" to the second cfinvokeargument:
> <cfinvoke webservice="http://localhost:8080/openbd/WSTest.cfc?wsdl"; 
> method="foo" returnvariable="wsreturn">
>     <cfinvokeargument name="bar" value="Hello from the web service!" />
>     <cfinvokeargument name="baz" value="Baz from caller." omit="true" />
> </cfinvoke>
> 
> <cfdump var="#wsreturn#" />
> 
> That will dump "Hello from the web service!"
> 
> What's odd to me is that the default value of "Here's baz!" from within the 
> web service function never gets tacked on to the response no matter what you 
> do.
> 
> So that's the best answer I could come up with--you'll have to have the 
> caller include all the arguments in order for this to work, and if the caller 
> is CFML, you can add omit="true" to the arguments you don't want to actually 
> pass to the web service. 
> 
> -- 
> Matthew Woodward
> [email protected]
> http://blog.mattwoodward.com
> identi.ca / Twitter: @mpwoodward
> 
> Please do not send me proprietary file formats such as Word, PowerPoint, etc. 
> as attachments.
> http://www.gnu.org/philosophy/no-word-attachments.html
> -- 
> Open BlueDragon Public Mailing List
> http://www.openbluedragon.org/ http://twitter.com/OpenBlueDragon
> official manual: http://www.openbluedragon.org/manual/
> Ready2Run CFML http://www.openbluedragon.org/openbdjam/
>  
> mailing list - http://groups.google.com/group/openbd?hl=en
> 
> 
> 
> -- 
> See for yourself how easy it is to manage files today. Join the revolution!
> 
> Razuna SaaS On-Demand - Hosted Digital Asset Management Solution
> http://www.razuna.com/
> 
> Razuna - Open Source Digital Asset Management
> http://www.razuna.org/
> 
> Follow us on Twitter
> http://twitter.com/razunahq
> -- 
> Open BlueDragon Public Mailing List
> http://www.openbluedragon.org/ http://twitter.com/OpenBlueDragon
> official manual: http://www.openbluedragon.org/manual/
> Ready2Run CFML http://www.openbluedragon.org/openbdjam/
>  
> mailing list - http://groups.google.com/group/openbd?hl=en

-- 
Open BlueDragon Public Mailing List
 http://www.openbluedragon.org/   http://twitter.com/OpenBlueDragon
 official manual: http://www.openbluedragon.org/manual/
 Ready2Run CFML http://www.openbluedragon.org/openbdjam/

 mailing list - http://groups.google.com/group/openbd?hl=en

Reply via email to