我在尝试通过Delphi访问Web服务时遇到问题。我已经使用了WSDLimp工具的2007版本的一个java WSDL,并且它看起来正确地创建了所有对象。但是,当我制作一个测试程序时,每个对象都是空的,调用该服务。如果我在HTTPRIOAfterExecute方法中转储SOAPResponse对象,我可以看到我收回了一个格式正确的XML Soap数据包,其中包含我期望的所有数据,但我无法通过这些对象访问它。那么有什么我失踪?Delphi 2005 Web服务问题
回答
Web服务响应包含每个属性的别名名称空间。这些别名未在WSDL中定义。例如,WSDL包含一个名为“http://www.example.com/SomeService”的名称空间,以及顶层节点中的xmlns:ns3 =“http://www.example.com/SomeService”的请求别名。因此,响应中的属性看起来像ns3:somePropertyName =“[value]”。
在OPToSOAPDomConv单元的TSOAPDomConv.InitObjectFromSOAP中,它试图查找没有命名空间前缀的属性名称。这导致查找失败并且对象属性留空。即使在2007年的源文件中也是如此。
我能看到的最佳解决方案是修改InitObjectFromSOAP例程。
围绕线4181,添加:
RemTypeRegistry.InfoToURI(PropList[i].PropType^, NS, PropName, IsScalar);
,改变AttrNode.HasAttribute到NS变量传递作为第二个参数所以它看起来像:
if AttrNode.HasAttribute(ExternalPropName, NS) then
而且,几行向下是一个SetObjectPropFromText调用。最后一个参数是属性值,你就需要改变Attr.Attributes [ExternalPropName]到
SetObjectPropFromText(Instance, PropList[I], AttrNode.GetAttributeNS(ExternalPropName, NS))
当然申报NS,PROPNAME和IsScalar瓦尔。
讨论的解决方案德尔福下降的Web服务支持球德尔福7后,并没有再次合作让他们的行为,直到德尔福2007年(2006年虽然是一个改进)。
如果它在Delphi 2007中适用于您,您可能可以通过使用更新的SOAP运行时在Delphi 2005中使用它。
我不幸没有进入D2007。我确实使用了链接中引用的WSDLimp。我绝对注意到D2005创建了令人难以置信的错误代码。我认为我的问题发生在SOAPResponse被转换为对象的地方。任何想法发生在哪里?我试过了代码,但我还没有看到甚至试图发生的地方。 – mcmar 2009-07-29 12:28:17
我重新阅读问题和事实,即它是一个Java Web服务让我记住的东西。
确保您使用最新的WSDLImp和SOAP单元。在导入的设备中查看对RegisterInvokeOptions的调用。第二个参数应该是ioDocument。如果将此更改为ioDefault,会发生什么情况。
我记得有一篇文章提到了Java NetBeans(可能?)Web服务的这个帖子,但还没有尝试过。
- 1. Web服务.NET Framework问题
- 2. Web服务问题
- 3. Web服务问题
- 4. 的SkillSoft Web服务问题
- 5. JAX-WS web服务安全问题
- 6. Web服务和SQL Server 2005
- 7. 在Delphi 2005中使用REST服务
- 8. Delphi 5中的Web服务
- 9. SQL 2005分析服务安装问题
- 10. ColdFusion的Web服务问题
- 11. Web服务RemoteException问题
- 12. 问题的RESTful Web服务
- 13. Web服务我的问题
- 14. Web服务阵列问题
- 15. Asp.Net Web服务问题
- 16. Web服务安全问题
- 17. Spring Web服务问题
- 18. Web服务超时问题
- 19. Web服务配置问题
- 20. Web服务调用问题?
- 21. Web服务连接问题
- 22. RAD 7.5 Web服务问题
- 23. Web服务URL问题
- 24. 问题与Java Web服务
- 25. Web服务nHibernate SessionFactory问题
- 26. Apache CXF Web服务问题
- 27. asp.net Web服务问题
- 28. Web服务调用问题
- 29. PHP Web服务问题
- 30. SQL集成服务Web服务任务问题
由于您使用的是命令行导入器而不是IDE,因此以下是一个方便的参考。 http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devwin32/wsdlimp_xml.html – 2009-07-28 18:10:12