【问题标题】:Oracle Service Bus 12c: Element /definitions/documentation rewritten in effective WSDL of a proxy serviceOracle Service Bus 12c:用代理服务的有效 WSDL 重写元素 /definitions/documentation
【发布时间】:2016-09-07 15:38:25
【问题描述】:

我们将代理服务的一个版本存储在 WSDL 文档中 -- 到元素 /definitions/documentation 中:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:tns="http://mynamespace.cz/1.0" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
name="MyService" targetNamespace="ttp://mynamespace.cz/1.0">
  <wsdl:documentation>
    <version>2.0</version>
  </wsdl:documentation>

我可以将服务部署到服务总线 12c (12.2.1) 并且服务运行良好。当我从服务总线控制台(所谓的资源 WSDL)显示 WSDL 时,WSDL 符合我的预期并包括:

<wsdl:documentation>
  <version>2.0</version>
</wsdl:documentation>

但是,如果我通过 URL 获得有效的 WSDL(由服务总线从资源 WSDL 创建): http://myserver:port/sbresource?PROXY/MyService/MyService

元素文档被覆盖:

<WL5G3N0:documentation>
        2.0
</WL5G3N0:documentation>

元素版本完全丢失,但它的内容仍然存在。

您能否告知发生这种情况的原因以及是否有任何解决方法?我们需要保留元素“version”,以便解析器能够检索服务版本。

我的目标是为服务消费者提供一个易于使用的解决方案,即使用单个 WSDL 作为信息源,并让 WSDL 尽可能简单以便被 XPath 解析。

【问题讨论】:

  • 你试过给&lt;version&gt;添加命名空间吗?
  • 是的,我尝试添加命名空间,但该元素也消失了。当我添加一个属性时,它也会被删除。只有元素的文本内容保留在有效的 WSDL 中。
  • 当然 CDATA 是一种解决方法,但我更喜欢使用单个 XML 文档并通过简单的 XPath 寻址来访问 /definitions/documentation 的子元素。

标签: wsdl oracle-service-bus


【解决方案1】:

我认为 OSB 在生成有效的 WSDL 时会走捷径,文档元素中的任何内容都会得到data()'d。

作为替代方案,如果您 accessed the design-time WSDL 是有效 WSDL 的基础,这会有所帮助吗?

例如http://host:port/sbresource?WSDL/project_path/wsdl_name

【讨论】:

  • Resource WSDL 包含版本元素,但不包含有效 WSDL 中存在的其他信息(端点地址等)。使用两个 WSDL 对消费者来说太复杂了,还要记住资源/有效 WSDL 几乎是 Oracle SB 特有的东西,对于“只需要 WSDL 来完成工作”的人来说很难理解。
  • 我想最可靠的方法是将版本作为 fixed 元素包含在 WSDL 中,或者作为可以从某种“状态”操作返回的变量。
猜你喜欢
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 2015-09-18
  • 2018-01-23
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
相关资源
最近更新 更多