Hi, I've created a new actor that can invoke web service operations with complex types. It's called WSWithComplexTypes. To see it in action, look at these workflows in $KEPLER/workflows/test/spa/:
NewWebServiceArrayReturnTest.xml NewWebServiceDecodeOutputTest.xml NewWebServiceNestedTypesTest.xml WSWithComplexTypes invokes web services defined by WSDLs. Similar to WebService, given a web service WSDL URL and an operation name, WSWithComplexTypes specializes its input and output ports to reflect the input and output parameters of the operation. For simple web service types, e.g., string, int, double, etc., the ports are set to the matching Ptolemy types. For complex web service types, the ports are set to XMLTOKEN. When the actor fires, it reads each input port, invokes the web service operation with the input data, and outputs the response to the output ports. WSWithComplexTypes also has two parameters, inputMechanism and outputMechanism, that aid in working with complex web service types. Their default setting is 'simple', which causes WSWithComplexTypes to specialize its ports as already described. By setting to 'composite', a composite actor is additionally created for each (web service operation) parameter that is a complex type. Each composite actor contains the XMLAssembler or XMLDisassembler actors needed to build the complex web service type, and the external ports are all simple Ptolemy types. Changing the mechanism back to 'simple' deletes the connected composite actors. (If you have made changes to the composite actors and don't want them lost, disconnect them from WSWithComplexTypes before changing the mechanism to 'simple'). If you have any questions, let me know. --dan

