【问题标题】:Stack overflow error when importing WSDL into Delphi 7将 WSDL 导入 Delphi 7 时出现堆栈溢出错误
【发布时间】:2012-02-09 02:28:49
【问题描述】:

我正在尝试使用 WSDLImporter(以及 WSDLImp 命令行)将 WSDL 导入 Delphi 7。

使用 WSDLImporter 时,Delphi 的内存使用量开始增加,直到它崩溃(无错误)或我收到堆栈溢出错误。

使用命令行工具时,我得到以下信息

Borland WSDLIMP Version 2.2 - $Rev: 10138 $
Copyright (c) 2007 Borland Software Corporation
Reading: https://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl
Import : https://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl:0
*Error*: http://api.demo.ezidebit.com.au/v3-3/nonpci?xsd=xsd0
*Error*: http://api.demo.ezidebit.com.au/v3-3/nonpci?xsd=xsd1
*Error*: http://api.demo.ezidebit.com.au/v3-3/nonpci?xsd=xsd2
Import : http://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl=wsdl0
Import : http://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl
Import : http://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl=wsdl0
Import : http://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl

然后一遍又一遍地循环最后两行。显然这显示了一个错误,但没有关于该错误可能的进一步细节。

我在 Microsoft Visual Studio 中创建了一个 C# 项目,并将其添加为 Web 参考,没有任何问题,但由于遗留代码,我也需要在 Delphi 7 中拥有它。

WSDL 的地址是

https://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl

我也尝试使用soapUI加载它而没有任何错误。

编辑 我已经下载了 Delphi XE2 的试用版(在另一个问题中提到作为可能的解决方案),它在我的 PAS 文件顶部为我提供了以下内容。 (如果需要我可以上传整个代码)

我假设 Delphi 不喜欢的 WSDL 文件存在问题。关于我可以要求 WSDL 开发人员进行更改以便导入的任何线索?

// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL     : https://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl
//  >Import : http://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl=wsdl0
//  >Import : http://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl
//  >Import : https://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl>0
//  >Import : http://api.demo.ezidebit.com.au/v3-3/nonpci?wsdl>0
// Encoding : utf-8
// Version  : 1.0
// (9/02/2012 2:32:14 PM - - $Rev: 37707 $)
// ************************************************************************ //

unit nonpci;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type

  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Embarcadero types; however, they could also 
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:CreateScheduleResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:CreateSchedule  - "https://px.ezidebit.com.au/"[Lit][]
  // !:ClearScheduleResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:ClearSchedule   - "https://px.ezidebit.com.au/"[Lit][]
  // !:ChangeScheduledAmountResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetPayments     - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetPaymentDetailPlusNextPaymentInfoResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:ChangeScheduledAmount - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetPaymentsResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:ChangeScheduledDate - "https://px.ezidebit.com.au/"[Lit][]
  // !:IsSystemLockedResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:IsSystemLocked  - "https://px.ezidebit.com.au/"[Lit][]
  // !:PaymentExchangeVersionResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:PaymentExchangeVersion - "https://px.ezidebit.com.au/"[Lit][]
  // !:IsBsbValidResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:TestFunction    - "https://px.ezidebit.com.au/"[Lit][]
  // !:ChangeScheduledDateResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:IsBsbValid      - "https://px.ezidebit.com.au/"[Lit][]
  // !:TestFunctionResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetCustomerDetails - "https://px.ezidebit.com.au/"[Lit][]
  // !:ChangeCustomerStatusResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:AddPayment      - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetCustomerDetailsResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:ChangeCustomerStatus - "https://px.ezidebit.com.au/"[Lit][]
  // !:AddCustomerResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:AddCustomer     - "https://px.ezidebit.com.au/"[Lit][]
  // !:EditCustomerDetailsResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:EditCustomerDetails - "https://px.ezidebit.com.au/"[Lit][]
  // !:AddPaymentResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetPaymentDetail - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetPaymentStatusResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetPaymentDetailPlusNextPaymentInfo - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetPaymentDetailResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetPaymentStatus - "https://px.ezidebit.com.au/"[Lit][]
  // !:DeletePaymentResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:DeletePayment   - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetScheduledPaymentsResponse - "https://px.ezidebit.com.au/"[Lit][]
  // !:GetScheduledPayments - "https://px.ezidebit.com.au/"[Lit][]

【问题讨论】:

  • 您说的是 Delphi 7,但是在日志中显示“Copyright (c) 2007”,如果我没记错的话,delphi 7 将是“Copyright (c) 2002”,请注意 2007 ! = 2002,是否有可能在您的搜索路径中是 delphi 2006/7 而不是 delphi 7?尝试在 CMD 中调用“C:\Program Files\Borland\Delphi7\bin\WSDLImp.exe”以确保调用正确的 WSDLImp
  • @DorinDuminica,OP 正在使用这个更新的导入器cc.embarcadero.com/Item/24535
  • 哎呀,我的错,但也许他应该试一试原来的,它值得一试......
  • @Dorin 抱歉,此屏幕截图必须来自更新的导入程序。尝试使用原始版本,结果相同。
  • 哇...已经超过 20 分钟了。并且 D7 的导入器仍在工作...它使用超过 170 MB/RAM 但还没有响应,我正在一个非常灵活的系统上运行它...我想知道 WSDL 是否没有在不同的文件中定义别名可以创建导致堆栈溢出的“永无止境”循环...

标签: delphi wsdl delphi-7


【解决方案1】:

不回答这个问题,但可能会有所帮助:Free Pascal 有一个 Web 服务工具包,它也有一个 WSDL 导入器。文档说它也适用于 Delphi。

“Web Service Toolkit”是 FPC、Lazarus 和 德尔福; “Web Service Toolkit”旨在简化 Web 服务 FPC、Lazarus 和 Delphi 用户的消费和创作。

http://wiki.freepascal.org/Web_Service_Toolkit

【讨论】:

  • 感谢您的提示。认为我们将不得不编写一个 Active X 控件,在 Visual Studio 中公开 Web 服务方法并在 Delphi 7 中使用它。
  • 很高兴我能帮上忙!对于非常简单的 Web 服务,也可以选择 HTTP 服务器/客户端链接。或者基于开源解决方案的面向消息的中间件(参见我的个人资料主页)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2010-11-14
相关资源
最近更新 更多