WSO2 PayloadFactory介体不转换参数

时间:2018-12-11 16:25:54

标签: wso2

我无法让PayloadFactory介体将输入参数转换为服务期望的值。

我需要通过查看输入请求并为新参数提供默认值或在WSO2层执行数据类型转换来支持旧版API。出于PoC的目的,我试图在服务需要值时发送输入参数val,但是我看不到输入参数正确到达服务。以下是我正在使用的顺序:

{
  "timestamp": "2018-12-11T15:54:54.627+0000",
  "status": 500,
  "error": "Internal Server Error",
  "message": "could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet",
  "path": "/user/delete"
}

这是我使用SOAPUI发出的Web请求:

<definitions xmlns="http://ws.apache.org/ns/synapse" name="sample1">
    <sequence name="sample1">
        <in>
            <!-- using payloadFactory mediator to transform the request message -->
            <payloadFactory media-type="xml">
                <format>
                    <tem:GetData xmlns:tem="http://localhost/LegacyService/Service1.svc">
                        <tem:value>$1</tem:value>
                    </tem:GetData>
                </format>
                <args>
                    <arg xmlns:tem="http://localhost/LegacyService/Service1.svc" expression="//tem:val"/>
                </args>
            </payloadFactory>
        </in>

        <send/>
    </sequence>
</definitions>

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

从请求中查找值时,请求中的名称空间和有效负载工厂中的名称空间不同。因此,您的表达式正在搜索请求中不存在的元素。

xmlns:tem="http://localhost/LegacyService/Service1.svc"(payloadFactory参数)

vs

xmlns:tem="http://tempuri.org/"(请求消息)

您需要确保参数中的表达式与请求消息匹配

<args>
       <arg xmlns:tem="http://tempuri.org/" expression="//tem:val"/>
</args>