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:
TypeApplicationDetailUnrecognized error code: Invalid web service operation.
Cannot locate operation foo that accepts parameters: { string (bar) }Tag
ContextCFINVOKE
(/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

Reply via email to