You can invoke methods which take complextypes as parameters.
The idea is to create first a structure which represents the
complextype. For example; crit = structNew(), crit.paramname1 =
value1, ctir.paramname2 = value2. After this, you just pass the
structure
crit as a parameter value, for example with
<cfinvokeargument>.
Always check the wsdl and the possible documentation
carefully. You'll get always an error if the types of the
parameters passed didn't match exactly to what was expected.
Handling complextype responses is also possible, but not very
elegant with ColdFusion.
For example, you have <cfinvoke
returnvariable="wsResult"... >, and you get a java object as a
response which you can really do nothing about with CF functions,
you must use Java Reflection API to extract the values.
<cfset oFields =
wsresult.getClass().getDeclaredFields()>
<cfoutput>
<cfloop from="1" to="#arraylen(oFields)#" index="fi">
<cfset field = oFields[fi].getName()>
<cfif isdefined("wsresult." & field) AND field NEQ
"typedesc">
#field# = #wsResult[field]#<br>
</cfif>
</cfloop>
</cfoutput>
The above is just an example, and It might work with only
some types of complextype responses. But it's a start. :)
http://www.mail-archive.com/cf-xml@torchboxlists.com/msg00553.html
is also another example about handling complextype responses. It
plays "safer", not relying that CF can extract values without
"getters" automatically, and is more of a complete solution.