【问题标题】:Using JBoss ESB, how do I get multiple objects out of smooks and use them as params to an ejb?使用 JBoss ESB,我如何从 smooks 中获取多个对象并将它们用作 ejb 的参数?
【发布时间】:2012-06-29 09:34:04
【问题描述】:

这是我的 jboss-esb.xml 文件的一部分:

<action name="HotelAvailRq_To_HotelAvailRequest" class="org.jboss.soa.esb.smooks.SmooksAction">
  <property name="smooksConfig" 
            value="requestConverters/HotelAvailRq_To_HotelAvailRequest.xml" />
  <property name="resultType" 
           value="JAVA" />
  <!-- <property name="javaResultBeanId" value="hotel" /> --> 
  <!-- <property name="set-payload-location" value="map" /> -->                 
  <property name="mappedContextObjects" 
            value="hotel,dateRange" />
  <property name="reportPath"
    value="C:\Documents and Settings\barrowj\esb-workspace\esb\smooks-in-report.html" />
</action>
<action name="print-result" class="org.jboss.soa.esb.actions.SystemPrintln" >
  <property name="message" value="Read" />
  <property name="printfull" value="true" />
</action>
<action name="availabilityCall" 
        class="org.jboss.soa.esb.actions.EJBProcessor">
  <property name="ejb3" value="true" />
  <property name="jndi-name" value="HotelBooking/remote" />
  <property name="initial-context-factory" 
            value="org.jnp.interfaces.NamingContextFactory" />
  <property name="provider-url" value="jnp://localhost:1099" />
  <property name="method" value="availability" />                   
  <property name="ejb-params">
    <arg0 type="model.domain.Hotel">map.hotel</arg0>
    <arg1 type="model.domain.value_objects.DateRange">body.map.dateRange</arg1>
    <arg2 type="model.domain.value_objects.RoomRequest">roomRequest</arg2>
    <arg3 type="model.domain.RatePlanList">ratePlanList</arg3>
    <arg4 type="model.domain.AmenityList">amenityList</arg4>
    <arg5 type="model.domain.types.Money">minimumRate</arg5>
    <arg6 type="model.domain.types.Money">maximumRate</arg6>
    <arg7 type="model.domain.Partner">partner</arg7>
  </property>
</action>

smooks 调用返回

body: [ objects: 
  {org.jboss.soa.esb.message.defaultEntry=
    { dateRange=DateRange [  thru=2010-03-24, from=2010-03-23], 
      roomRequest=RoomRequest [list=[GuestInfo [count=1, age=null]], numberOfRooms=1],
      PTIME=null, 
      guestInfo=GuestInfo [count=1, age=null], 
      PUUID=null, 
      partner=Partner [partnerId=bukuser], 
      hotel=Hotel [id=61044, name=null, chainCode=BW, roomTypes=[], maxStay=P30D, bookings=[], ratePlans=[]], 
      guestInfoList=[GuestInfo [count=1, age=null]]}, 
    SmooksExecutionContext={}} ]

所以,我需要将 dateRange、roomRequest、guestInfo 和其他 EJB 参数映射到 EJB 调用。有没有办法做到这一点?

文档表明您可以,但没有说明如何从 XML 中的上下文映射中获取映射值。

【问题讨论】:

    标签: java jboss esb smooks


    【解决方案1】:

    所以问题原来是 smooks 动作和 ejb 动作之间的交互。 Smooks 返回一个东西的哈希图。它将散列图放在 ESB 的 message.body 中。这又是一个哈希图。

    ejb 操作正在寻找 message.getBody().get("name"),而它应该寻找 message.getBody().get("smooksResults").get("name")。没有办法告诉 ejb 操作去那里查看。

    唯一的解决方案是更改 EJB 操作,以便它可以查看 smooks 结果哈希映射。

    【讨论】:

      猜你喜欢
      • 2017-02-15
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 2020-09-18
      • 2021-07-31
      • 1970-01-01
      相关资源
      最近更新 更多