I didn't read through all of your code but here is the method I have been using with success.
var op:Operation = service.getOperation("GetDataByGrouping") as Operation; op.resultFormat = "e4x"; // temp object to store arguments var args:Object = new Object(); args.groupingRequests = new Object(); args.groupingRequests.GroupName = "RPRToolStaticData"; op.arguments = args; service.GetDataByGrouping(); HTH, Ben --- In flexcoders@yahoogroups.com, "kaleb_pederson" <[EMAIL PROTECTED]> wrote: > > Hello, > > I'm trying to send some arguments to a webservice, but every > variation I have tried other than generating the XML from scratch > keeps failing (eg. sends an empty message body). Relevant parts of > the WSDL are as follows: > > <message name="sendStrings"> > <part element="tns:sendStrings" name="parameters"></part> > </message> > <message name="sendStringsResponse"> > <part element="tns:sendStringsResponse" > name="parameters"></part> > </message> > ... > <operation name="sendStrings"> > <input message="tns:sendStrings"></input> > <output message="tns:sendStringsResponse"></output> > </operation> > > And from the XSD: > > <xs:element > xmlns:ns3="http://server.webservices.tutorials.wakaleo.com/" > type="ns3:sendStrings" name="sendStrings"></xs:element> > > <xs:complexType name="sendStrings"> > <xs:sequence> > <xs:element type="xs:string" minOccurs="0" name="arg0" > maxOccurs="unbounded"></xs:element> > </xs:sequence> > </xs:complexType> > > <xs:element > xmlns:ns4="http://server.webservices.tutorials.wakaleo.com/" > type="ns4:sendStringsResponse" > name="sendStringsResponse"></xs:element> > > <xs:complexType name="sendStringsResponse"> > <xs:sequence> > <xs:element type="xs:string" minOccurs="0" name="return" > maxOccurs="unbounded"></xs:element> > </xs:sequence> > </xs:complexType> > > Based on everything that I have been able to find in the > documentation and on flexcoders, there are a number of different > ways to send requests to the web service, so I tried each of the > ones that I could find. > > However, only one of them succeeds -- specifically, the case where I > build an XMLDocument from scratch and send it. All the other cases > fail -- that is, they do not pass *any* arguments to the web > service. > > The following TestCase (which is kind of long) shows the different > variations that have been tried. The main things of interest are > the variationN functions in the beginning of the class as these test > the different ways to call the web service. If TestCase had an > asyncSetup function the sample case could be quite a bit shorter... > (but perhaps I'll work on that next): > > package code > { > import flash.events.Event; > import flexunit.framework.TestCase; > import mx.rpc.events.FaultEvent; > import mx.rpc.events.ResultEvent; > import mx.rpc.soap.LoadEvent; > import mx.rpc.soap.mxml.WebService; > import flash.utils.describeType; > import mx.rpc.events.AbstractEvent; > import mx.rpc.AbstractOperation; > import flash.xml.XMLDocument; > import flash.xml.XMLNode; > > > public class TestSendStrings extends TestCase > { > private var ws:WebService; > private static const SERVICE_TIMEOUT:Number = 2000; > private var wsdlUrl:String > = "http://192.168.1.108:8080/stockquotes/stock_quote?wsdl"; > private var responseHandler:String; > private var sendStringsFunc:String; > > // these are the different variations that I have tried. Of > these > // different variations, variation9 succeeds because I have hand > // crafted a valid message body (NOTE that variation 8 fails and > // that the only difference is XML vs. XMLDocument). variation6 > // generates a fault, so it fails for a different reason than > // some of the others > private function variation1():void { > trace('variation1'); > var op:AbstractOperation = ws.getOperation('sendStrings'); > op.arguments = new Array('variation','one'); > op.send(); > } > > private function variation2():void { > trace('variation2'); > ws.sendStrings.arguments = new Array('variation','two'); > ws.sendStrings.send(); > } > > private function variation3():void { > trace('variation3'); > ws.sendStrings.send(new Array('variation','three')); > } > > private function variation4():void { > trace('variation4'); > ws.sendStrings.send('variation','four'); > } > > private function variation5():void { > trace('variation5'); > ws.sendStrings('variation','five'); > } > > private function variation6():void { > // this function results in a fault event: > // Unexpected parameter 'sendStrings' found in input > arguments. > trace('variation6'); > var op:AbstractOperation = ws.getOperation('sendStrings'); > op.arguments = {sendStrings:{arg0:new > Array('variation','six')}}; > op.send(); > } > > private function variation7():void { > trace('variation7'); > var op:AbstractOperation = ws.getOperation('sendStrings'); > op.send({sendStrings:{arg0:new Array('variation','six')}}); > } > > private function variation8():void { > trace('variation8'); > var xml:XML = new XML('<ns1:sendStrings > xmlns:ns1="http://server.webservices.tutorials.wakaleo.com/">' + > '<arg0>variation</arg0><arg0>eight</arg0>' + > '</ns1:sendStrings>'); > var op:AbstractOperation = ws.getOperation('sendStrings'); > op.send(xml); > } > > private function variation9():void { > trace('variation9'); > var xml:XMLDocument = new XMLDocument('<ns1:sendStrings > xmlns:ns1="http://server.webservices.tutorials.wakaleo.com/">' + > '<arg0>variation</arg0><arg0>nine</arg0>' + > '</ns1:sendStrings>'); > var op:AbstractOperation = ws.getOperation('sendStrings'); > op.send(xml); > } > > protected function handleResult(event:ResultEvent, > expectedResult:Object):void { > trace('---------------------------'); > trace('message body: ' + event.message.body); > var actualResult:String = "null"; > var xml:XML = new XML(event.message.body); > var a:Array = resultToStringArray(xml); > if (a != null) > actualResult = a.toString(); > assertEquals(expectedResult.toString(), actualResult); > } > > private function resultToStringArray(xml:XML):Array { > if (xml != null) { > // I would be better off to iterate over the namespace > declarations > // to find out what the prefix is for the soap namespace, > but since > // I know what it is for the particular service that I'm > currently > // working with, I'm just going to hard code the fetch. > var soapNS:Namespace = xml.namespace("soapenv") > var tutNS:Namespace = xml.namespace("ns1"); > var res:Array = new Array(); > for each (var node:XML in > xml.soapNS::Body.tutNS::sendStringsResponse.children()) { > res.push(node.text()); > } > return res; > } > return null; > } > > private function privateSetup(func:Function):void{ > trace('privateSetup'); > ws = new WebService(); > ws.addEventListener(LoadEvent.LOAD,func); > ws.addEventListener(FaultEvent.FAULT,handleFault); > ws.loadWSDL(wsdlUrl); > } > > private function onLoadCompleted(e:LoadEvent,o:Object):void { > trace('onLoadCompleted'); > ws.addEventListener(ResultEvent.RESULT, > addAsync(handleResult,SERVICE_TIMEOUT, o.expectedResult)); > this[o.test](); > } > > private function handleFault(e:FaultEvent):void { > trace('handleFault'); > trace('FAULT: ' + e.fault.getStackTrace()); > } > > private function variation1():void { > trace('variation1'); > var op:AbstractOperation = ws.getOperation('sendStrings'); > op.arguments = new Array('variation','one'); > op.send(); > } > > private function variation2():void { > trace('variation2'); > ws.sendStrings.arguments = new Array('variation','two'); > ws.sendStrings.send(); > } > > private function variation3():void { > trace('variation3'); > ws.sendStrings.send(new Array('variation','three')); > } > > private function variation4():void { > trace('variation4'); > ws.sendStrings.send('variation','four'); > } > > private function variation5():void { > trace('variation5'); > ws.sendStrings('variation','five'); > } > > private function variation6():void { > // this function results in a fault event: > // Unexpected parameter 'sendStrings' found in input > arguments. > trace('variation6'); > var op:AbstractOperation = ws.getOperation('sendStrings'); > op.arguments = {sendStrings:{arg0:new > Array('variation','six')}}; > op.send(); > } > > private function variation7():void { > trace('variation7'); > var op:AbstractOperation = ws.getOperation('sendStrings'); > op.send({sendStrings:{arg0:new Array('variation','six')}}); > } > > private function variation8():void { > trace('variation8'); > var xml:XML = new XML('<ns1:sendStrings > xmlns:ns1="http://server.webservices.tutorials.wakaleo.com/">' + > '<arg0>variation</arg0><arg0>eight</arg0>' + > '</ns1:sendStrings>'); > var op:AbstractOperation = ws.getOperation('sendStrings'); > op.send(xml); > } > > private function variation9():void { > trace('variation9'); > var xml:XMLDocument = new XMLDocument('<ns1:sendStrings > xmlns:ns1="http://server.webservices.tutorials.wakaleo.com/">' + > '<arg0>variation</arg0><arg0>nine</arg0>' + > '</ns1:sendStrings>'); > var op:AbstractOperation = ws.getOperation('sendStrings'); > op.send(xml); > } > > public function testSendStrings1():void{ > trace('testSendStrings1'); > privateSetup( > addAsync( > onLoadCompleted, > SERVICE_TIMEOUT, > {test:'variation1',expectedResult:new > Array('variation0','one1')} > ) > ); > } > > public function testSendStrings2():void{ > trace('testSendStrings2'); > privateSetup( > addAsync( > onLoadCompleted, > SERVICE_TIMEOUT, > {test:'variation2',expectedResult:new > Array('variation0','two1')} > ) > ); > } > > public function testSendStrings3():void{ > trace('testSendStrings3'); > privateSetup( > addAsync( > onLoadCompleted, > SERVICE_TIMEOUT, > {test:'variation3',expectedResult:new > Array('variation0','three1')} > ) > ); > > } > > public function testSendStrings4():void{ > trace('testSendStrings4'); > privateSetup( > addAsync( > onLoadCompleted, > SERVICE_TIMEOUT, > {test:'variation4',expectedResult:new > Array('variation0','four1')} > ) > ); > > } > > public function testSendStrings5():void{ > trace('testSendStrings5'); > privateSetup( > addAsync( > onLoadCompleted, > SERVICE_TIMEOUT, > {test:'variation5',expectedResult:new > Array('variation0','five1')} > ) > ); > > } > > public function testSendStrings6():void{ > trace('testSendStrings6'); > privateSetup( > addAsync( > onLoadCompleted, > SERVICE_TIMEOUT, > {test:'variation6',expectedResult:new > Array('variation0','six1')} > ) > ); > > } > > public function testSendStrings7():void{ > trace('testSendStrings7'); > privateSetup( > addAsync( > onLoadCompleted, > SERVICE_TIMEOUT, > {test:'variation7',expectedResult:new > Array('variation0','seven1')} > ) > ); > > } > > public function testSendStrings8():void{ > trace('testSendStrings8'); > privateSetup( > addAsync( > onLoadCompleted, > SERVICE_TIMEOUT, > {test:'variation8',expectedResult:new > Array('variation0','eight1')} > ) > ); > > } > > public function testSendStrings9():void{ > trace('testSendStrings9'); > privateSetup( > addAsync( > onLoadCompleted, > SERVICE_TIMEOUT, > {test:'variation9',expectedResult:new > Array('variation0','nine1')} > ) > ); > > } > } > } > > Are there other variations that I missed? Is there anything > else that I can do to make this work? Generating XML is not a very > good solution and requires me to know the required namespaces. > > Thanks for the help and suggestions. > > --Kaleb > -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/flexcoders/ <*> To unsubscribe from this group, send an email to: [EMAIL PROTECTED] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/