使用Oracle 10中的复杂类型来使用SOAP Web服务WSDL

时间:2011-10-21 16:51:52

标签: web-services oracle soap plsql oracle10g

继2008年9月关于'从Oracle PL / SQL消费Web服务'的this帖子后,我想知道是否有任何新信息?我还在oracle.com上发现question基本上问同样的问题,但没有任何直接答案。

我正在尝试从Oracle PL / SQL函数/存储过程中使用服务。该服务包含一个包含6个参数的方法,其中5个是自定义类型。我可以为SOAP_API找到的所有示例都假设使用简单类型的int或string,例如。

我们目前没有内部ESB来从Oracle使用SOAP Web服务,因此我们处理XML复杂类型的能力是不存在的。我将SOAP_API用于简单类型(示例herehere)但是一旦我们进入更复杂的类型,我们真的没有简单的选择吗?我会花一些时间来解构WSDL并手动创建类型,如果我认为它会起作用但是我怀疑和犹豫要花费时间做这个,当我不相信它无论如何都会工作。也许SOAP_API太有限了?除了SOAP_API和UTL_DBWS之外还有另一种选择,它看起来非常复杂并且受到类似的限制吗?

感谢任何方向!

1 个答案:

答案 0 :(得分:1)

@McArthey,我没有运气让utl_dbws工作。虽然我最初开始使用soap_API,但我发现只需使用utl_http并编写自己的软件包来完成工作就可以更轻松地完成工作。

我可以证明可以使用复杂的类型,我在开始时广泛使用了这个link

作为最糟糕的情况,您可以按照文章中的列出并按照自己的方式进行操作 - 作为概念验证(例如手动编写肥皂调用代码:

<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <GetCityForecastByZIP xmlns="http://ws.cdyne.com/WeatherWS/">
      <ZIP>' || l_zip || '</ZIP>
    </GetCityForecastByZIP>
  </soap12:Body>
</soap12:Envelope>';