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/
 



Reply via email to