Wso2 ESB - 带有少量参数的Payloadfactory

时间:2016-08-09 17:38:17

标签: wso2 wso2esb

我知道如何使用Payloadfactory介体列出所有输入参数,但我的后端服务有许多输入参数(120个输入参数)。我想使用PayloadFactory Mediator只更改少量输入参数而不在payloadfactory参数中列出其他元素。

后端服务的示例输入xml:

<p:echoStringArrays xmlns:p="http://echo.services.core.carbon.wso2.org">
     <!--0 or more occurrences-->
     <a>teststr1</a>
     <!--0 or more occurrences-->
     <b>teststr2</b>
     <!--0 to 1 occurrence-->
      <c>1</c>
  </p:echoStringArrays>

我的payloadfactory是(更改'a'元素并自动传递其他119个元素而不列出它们)

  <inSequence>
     <payloadFactory media-type="xml">
        <format>
           <p:echoStringArrays xmlns:p="http://echo.services.core.carbon.wso2.org"><!--0 or more occurrences--><a xmlns="">test</a>
           </p:echoStringArrays>
        </format>
        <args/>
     </payloadFactory>
  </inSequence>
  <outSequence>
     <send/>
  </outSequence>
  <endpoint>
     <address uri="http://desktop-iofs8c5:8280/services/echo"/>
  </endpoint>

当我调用我的代理服务时,会发生以下错误:

<soapenv:Fault xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Code>
    <soapenv:Value>soapenv:Receiver</soapenv:Value>
 </soapenv:Code>
 <soapenv:Reason>
    <soapenv:Text xml:lang="en-US">unknown</soapenv:Text>
 </soapenv:Reason>
 <soapenv:Detail/>
</soapenv:Fault>

提前致谢

2 个答案:

答案 0 :(得分:0)

以下示例应符合此要求。如果您需要创建具有不同数量的输入参数的有效负载工厂,则需要有选择地执行此操作。

// Define your Vertex class
case class Vertex(lat: Float, long: Float)

// Define your polygon class
case class Polygon(vertices: List[Vertex])

val lines = sc.textFile("polygon_file_path")

// RDD of (id, polygon) pair
// RDD[(String, Polygon)]
val polygonsWithId = lines
  .map(l => {
    val (id :: polyStr :: Nil) = l.drop(1).dropRight(1).split('^').toList
    val polyVerticesStr = polyStr.split('(').apply(1)
    val polyVertices = polyVerticesStr.split(',')
      .toList
      .map(s => s.split(' '))
      .map(a => Vertex(a(0).toFloat, a(1).toFloat))
    val polygon = Polygon(polyVertices)

    (id, polygon)
  })

答案 1 :(得分:0)

谢谢simar!

我使用了rich mediator来修改现有的有效负载。

溶液:

<property name="test" value="test" scope="default" type="STRING"/>
     <enrich>
        <source type="property" clone="true" property="test"/>
        <target xpath="//a"/>
     </enrich>