我正在将Mule应用程序从3.9.5转换到4.4.1。我试图将json响应从http请求写入oracle表中的clob列,并得到一个错误。
无法从类型为'class java.util.linkedhashmap'的值创建闭锁
我试图引入如下所示的数据编织转换,但仍然收到上述相同的错误。任何帮助都将不胜感激。
<http:request method="GET" config-ref="HTTP_Request_Configuration" path="${http.path}/{report_id}" doc:name="Request" doc:id="e596773f-d948-47fb-9cee-c23cf1a4dfdc" >
<http:headers ><![CDATA[#[output application/java
---
{
"Authorization" : "Bearer " ++ vars.accessToken,
"Accept" : "application/json"
}]]]></http:headers>
<http:uri-params ><![CDATA[#[output application/java
---
{
"report_id" : vars.expenseReportID
}]]]></http:uri-params>
</http:request>
<ee:transform doc:name="Transform Message" doc:id="5d6cc3d7-0236-499a-9f93-1a2b2f331ae8">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/java
---
payload] ]></ee:set-payload>
</ee:message>
</ee:transform>
<db:insert doc:name="DB_Insert" doc:id="09010c0a-7a89-4d9c-926f-eaf7ac36b9da" config-ref="Database_Config">
<db:sql>INSERT INTO stg_clientesalesforce (id_carga, contenido_json)
VALUES (:id_carga, :contenido_json)</db:sql>
<db:input-parameters><![CDATA[# [{"id_carga" : 12,
"contenido_json": payload}]] ]></db:input-parameters>
</db:insert>发布于 2022-06-06 03:59:28
CLOB只是一个非常大的字符串(字符、大对象),所以您只需要将负载作为字符串。您可以为此使用write函数。
payload write "application/json"
发布于 2022-06-05 23:24:47
它不是JSON,因为应用程序将响应从HTTP请求转换为转换组件中的Java对象。从显示实际类的错误消息(class java.util.linkedhashmap,一个HashMap)中也可以清楚地看到这一点。完全移除转换可能足以使其工作。
更新:我忽略了实际上导致错误的转换是<db:input-parameters>内部将有效负载转换为参数的转换。见@Harshank Bansal回答,而不是这个答案。
https://stackoverflow.com/questions/72511548
复制相似问题