我有一个环境,其中包含许多“服务”,其输入和输出很容易绑定到XML。我希望能够通过SOAP动态公开一个或多个服务。换句话说,用户必须能够将服务A和B组合到Web服务中(并且可选地为操作配置名称等)。
这意味着我需要能够动态生成WSDL或至少部分WSDL(尤其是可以从服务请求的XSD定义),我需要能够动态创建和发布所有使用的新端点一个Provider类(基于上下文,不是什么)将决定您尝试调用哪个服务。它将解组XML,调用服务,编组响应并将其发回。
JAX-WS可以实现吗?我非常希望利用JAX-WS附带的现有功能(尤其是WS- *等)。如果JAX-WS无法实现,还有其他选择吗?
答案 0 :(得分:2)
您的用例实际上很难用JAX-WS实现(甚至可能不可能)。但不要担心,你不是第一个有此要求的人。
想象一下拥有多个需要集成的遗留系统的大公司。然后,他们花了很多钱和时间来实现基于SOAP Web服务的SOA架构。这些服务被组合(编排)以创建业务流程。
示例:业务流程“创建合同”需要执行Web服务A,B和C.
但是如果更改业务流程需要一些代码源更改会发生什么?公司需要有一个开发团队来保持这些流程的最新状态。
为了解决这个问题,创建了 BPEL的动态绑定。此技术允许您根据所请求服务的参数在运行时编写新服务!
简而言之,如果定义了几个“基本Web服务”,然后配置BPEL服务器以在运行时动态组合这些服务,您需要做什么!
请阅读Oracle的this article以获取想法......
在您的情况下应该如何使用BPEL
有了这个,您将拥有一个非常强大的业务流程平台,您可以在将来扩展它以用于更复杂的用例。
希望它有所帮助...
答案 1 :(得分:1)
一种好方法是使用CDM作为有效负载结构。在CDM(公共数据模型)中,您可以定义可以吸收任何XML类型的可扩展模式。
传统XML:
<dataset>
<BillingAddress>
<set>
<po-box >22224<po-box>
<suburb code="2009">Pyrmont</suburb>
<city >Sydney</city>
<country code="AU">Australia</country>
</set>
</BillingAddress>
<OfficeAddress>
<set>
<street >2/73 Union St</street>
<suburb code="2009">Pyrmont</suburb>
<city >Sydney</city>
<country code="AU">Australia</country>
</set>
</OfficeAddress>
</dataset>
通用数据模型XML:
<objects>
<object is="Address">
<set>
<text is="suburb" code="2009">Pyrmont</text>
<text is="city">Sydney</text>
<text is="country" code="AU">Australia</text>
<object is="BillingAddress">
<set>
<text is="po-box.billing">22224<text>
<text is="suburb.billing" code="2009">Pyrmont</text>
<text is="city.billing">Sydney</text>
<text is="country.billing" code="AU">Australia</text>
</set>
</object>
<object is="OfficeAddress">
<set>
<text is="street.office">2/73 Union St<text>
<text is="suburb.office" code="2009">Pyrmont</text>
<text is="city.office">Sydney</text>
<text is="country.office" code="AU">Australia</text>
</set>
</object>
</set>
</object>
</objects>
主服务可以采用CDM并基于XML中的某个标志,它可以将请求路由到适当的Web服务。
这只是我的想法。你需要建立在此之上。