0

我正在使用 Flex SOAP Web 服务,连接到我们的 WSDL,一切都很好。但是,我是网络服务的新手,而网络人正在度假,所以我有点困惑。我要做的第一件事是运行检查连接:

private function configXMLHandler(event:LoaderEvent):void {
        fws.wsdl = checkWSDL;
        fws.loadWSDL();
        fws.addEventListener(LoadEvent.LOAD, wsdlLoaded);
    }

    private function wsdlLoaded(event:LoadEvent):void {
        checkAbstract = fws.getOperation("retrieveAssetIdbyLabel");
        checkAbstract.arguments = ["poll-asset-do-not-remove"];
        var token:AsyncToken = checkAbstract.send();
        token.addResponder(new Responder(checkAbstractResult, checkAbstractError));
    }

    private function checkAbstractError(event:FaultEvent):void {
        trace('Error in the WSDL');
    }

    private function checkAbstractResult(event:ResultEvent):void {

        if (event.result.returnCode == 0) {
            trace('Web service check ok');

            initContentLoader();

        } else {
            trace('Error in the WSDL');
            )

        }

    }

这很好,我得到了我期望的结果,所以我继续前进。然后我需要遍历一个 XML 列表并为该 XML 中的每个资产调用相同的 Web 服务函数,我的想法是使用循环:

private function initContent(event:LoaderEvent):void {
        assetList = event.target.content.asset;

        for (var i:int = 0; i < assetList.length(); i++) {
            assetAbstract = fws.getOperation("retrieveAssetIdbyLabel");
            assetAbstract.arguments = [assetList[i + assetCount].assetLabel];  //get the current index in the xmllist + the assetCount, grab the corresponding assetLabel from the XML and pass that to the web service
            trace(assetAbstract.arguments);
            var assetToken:AsyncToken = assetAbstract.send();
            assetToken.addResponder(new Responder(getAssetResult, getAssetError));
        }
    }

    private function getAssetResult(event:ResultEvent):void {
        var treasuresAsset:TreasuresAsset = new TreasuresAsset(event.result.returnCode, assetList[assetCount].asset.assetLabel, assetList[assetCount].asset.assetImage, assetList[assetCount].asset.assetDescription);
        addChild(treasuresAsset);

        assetCount++;  //increase the asset count
    }

    private function getAssetError(event:FaultEvent):void {
        trace(event.fault);
        trace('An error occured when we tried to get an asset id in the loop');
    }

我现在收到一个错误:

打开 URL 'http://www.nhm.ac.uk/web-services/VisitorService/' 时出错 SOAPFault (Server): org.apache.axis2.databinding.ADBException: Unexpected subelement RetrieveAssetIdbyLabel

我的直接想法是我需要为 xml 中的每个资产创建一个新的 Web 服务实例,并一遍又一遍地重复我的第一个代码。我可以只使用一次网络服务吗,您需要重新创建整个过程吗?

谢谢。

4

1 回答 1

0

好的,所以我想通了,这是一个简单的 XML 命名空间问题。

我更换了:

assetAbstract.arguments = [assetList[i + assetCount].assetLabel];

和:

var sender:String = assetList[i + assetCount].assetLabel;
            assetAbstract.arguments = [sender];

一切正常。

于 2012-07-24T11:20:21.123 回答