首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAX-WS:动态提供程序

JAX-WS:动态提供程序
EN

Stack Overflow用户
提问于 2012-07-12 17:10:26
回答 2查看 694关注 0票数 3

我有一个托管大量“服务”的环境,这些“服务”的输入和输出可以很容易地绑定到XML。我希望能够通过SOAP动态公开一个或多个服务。换句话说,用户必须能够将服务A和B组合到一个for服务中(并且可以选择配置操作的名称等)。

这意味着我需要能够动态地生成WSDL或至少部分WSDL(特别是可以从服务请求的XSD定义),并且我需要能够动态地创建和发布新的端点,这些端点都使用一个Provider类,这个类(基于上下文和其他内容)将确定您正在尝试调用哪个服务。它将解组XML,调用服务,编组响应并将其发回。

使用JAX-WS可以做到这一点吗?我非常希望利用JAX-WS提供的现有特性(特别是WS-*等)。如果JAX-WS不能做到这一点,还有其他选择吗?

EN

回答 2

Stack Overflow用户

发布于 2012-07-16 04:06:36

您的用例实际上很难使用JAX-WS实现(甚至可能是不可能的)。但是不用担心,你并不是第一个有这个要求的人。

想象一下,一家大公司有几个需要集成的遗留系统。然后,他们花费了大量的金钱和时间来实现基于SOAP web服务的SOA体系结构。这些服务被组合(orchestred)以创建业务流程。

示例:业务流程'Create A contract‘需要执行web服务A、B和C。

但是,如果更改业务流程需要一些代码源代码更改,会发生什么?该公司需要有一个开发团队,使这些流程保持最新。

为了解决这个问题,BPEL的动态绑定应运而生。这项技术允许您在运行时根据所请求服务的参数组合新服务!

简而言之,如果您定义了几个“基本web服务”,然后配置一个BPEL服务器在运行时动态组合这些服务,那么您需要做的就是!

请阅读来自Oracle的this article以获得一个想法...

在这里查看JBoss BPEL user guide

在的情况下使用应该做些什么

BPEL

  • 为你的每个非SOAP服务创建soap web服务(让我们称之为“基本services'.

  • Create引擎”,以编排“基本web服务客户端”的组合/组合,这些客户端能够在运行时(如果需要,根据每个请求)使用端点来组合/组合“基本web服务”。注意:这不需要对BPEL引擎configuration进行更改

有了这一点,您将拥有一个非常强大的平台来进行编排,您可以在将来扩展到更复杂的用例。

希望这能帮上忙。

票数 2
EN

Stack Overflow用户

发布于 2012-07-17 16:14:56

一个不错的方法是使用CDM作为有效负载结构。在CDM (公共数据模型)中,您可以定义可以吸收任何XML类型的可扩展模式。

传统的XML:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
<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服务。

这只是我的想法。您需要在此基础上进行构建。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11448496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档