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 [email protected], "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/