web-services – 使用Web服务时出现此错误的原因是什么?

web-services – 使用Web服务时出现此错误的原因是什么?,第1张

概述我有一个Delphi XE应用程序,它使用Cold Fusion编写的Web服务(我无法控制服务的输出格式).我使用Delphi中的WSDL Importer来创建用于调用Web服务的单元.我遇到的情况是我在Delphi中得到一个异常,说“元素”数据“不包含单个文本节点”. 当我得到异常时,从Web服务返回的XML的相关部分是: <data soapenc:arrayType="xsd:anyTy 我有一个Delphi XE应用程序,它使用Cold Fusion编写的Web服务(我无法控制服务的输出格式).我使用Delphi中的WSDL importer来创建用于调用Web服务的单元.我遇到的情况是我在Delphi中得到一个异常,说“元素”数据“不包含单个文本节点”.

当我得到异常时,从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服务时出现此错误的原因是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067110.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存