当我得到异常时,从Web服务返回的XML的相关部分是:
<data soapenc:arrayType="xsd:anyType[][1]" xsi:type="soapenc:Array"> <data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array"> <data xsi:type="soapenc:string">6490</data> <data xsi:type="soapenc:string">Other Expense</data> </data></data>
如果来自Web服务的XML包含多个< data>孩子,没有例外.
<data soapenc:arrayType="xsd:anyType[][3]" xsi:type="soapenc:Array"> <data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array"> <data xsi:type="soapenc:string">2600</data> <data xsi:type="soapenc:string">Deferred Revenue</data> </data> <data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array"> <data xsi:type="soapenc:string">4120</data> <data xsi:type="soapenc:string">Non-Credit Income</data> </data> <data soapenc:arrayType="xsd:anyType[2]" xsi:type="soapenc:Array"> <data xsi:type="soapenc:string">6490</data> <data xsi:type="soapenc:string">Other Expense</data> </data></data>
导致此异常的原因是什么导致无法更改Web服务本身?
解决方法 我不知道导致错误的原因是什么,但是,有一种解决方法.您可以使用RIO_AfterExecute()处理程序来修改SOAPResponse,以将XML更改为“使其适合”.这是一种丑陋的“更大锤子”方法,但它最终会让你摆弄数据以解决各种各样的问题.看看你的两个例子,我尝试使用stringreplace用’xsd:anyType [] [3]’替换’xsd:anyType [] [1]’.如果这不起作用,请尝试使用空值注入另一组数据,以使其看起来不仅仅是一个.
你需要一个RIO对象,然后你把它连接到这样的处理程序:
MyRIO.OnAfterExecute := self.RIO_AfterExecute;
在我的例子中,“self”指的是我在SOAP中编写的类.
当您完成摆弄请求时,请务必将您的位置设置为0.
这是一些未经测试的代码:
procedure MyWrapper.RIO_AfterExecute(const Methodname: string; SOAPResponse: TStream);var SL : TStringList; begin // do stuff with the SOAPResponse here. // It's a stream,so I like to load it into a stringList // ex: SL := TStringList.Create; try SOAPResponse.position := 0; SL.LoadFromSTream(SOAPREsponse); // fiddle with stringreplace here,to doctor up the SL.text. SOAPResponse.position := 0; SOAPResponse.size := length(SL.Text); SL.SavetoStream(SOAPResponse); finally SL.free; end;end;总结
以上是内存溢出为你收集整理的web-services – 使用Web服务时出现此错误的原因是什么?全部内容,希望文章能够帮你解决web-services – 使用Web服务时出现此错误的原因是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)