Oracle插入XML参数未在Mule中验证

Oracle插入XML参数未在Mule中验证,mule,dataweave,Mule,Dataweave,我在OracleXMLTYPE列中有一条insert语句。当我在Oracle中运行它时,它工作得很好。但如果我把同样的东西放在Mule insert中,它就不起作用了 我的XML是 '<DRIVEResponse><Loan><Condition ActionStep="parties. &amp;lt;A href=''ABC.com/abc/''"/> </Loan> </DRIVEResponse>

我在OracleXMLTYPE列中有一条insert语句。当我在Oracle中运行它时,它工作得很好。但如果我把同样的东西放在Mule insert中,它就不起作用了

我的XML是

'<DRIVEResponse><Loan><Condition ActionStep="parties. &amp;lt;A href=''ABC.com/abc/''"/> 
 </Loan>
 </DRIVEResponse>'
(第2行第88列):

查询文本来自一个java类。同样的查询文本正在发送到一个spring引导服务,并且插入正在那里进行。但在mule中,我得到了如图所示的错误。如果我在SQLDeveloper中运行此查询,它将运行并插入记录

Update:-使用硬编码XML的insert语句工作正常。 但如果我将其放在一个转换中,并将该变量带到查询中,它就会失败。即使我与硬编码的值完全匹配,但若我将其放入变量中,它将失败

硬编码-工作良好

insert into xmlpkg.BLT_DV_REQ_RESP(ID, REQUEST_XML) values (
      xmlpkg.SEQ_DV_REQ_RESP.nextval, 
'<Condition  Code= "parties. &amp;lt;A 
 href=''h''&amp;gt;h/&amp;lt;/A&amp;gt;"></Condition>' )
插入xmlpkg.BLT_DV_REQ_RESP(ID,REQUEST_XML)值(
xmlpkg.SEQ_DV_REQ_RESP.nextval,
'' )
从变量失败中吸取教训 下面的代码在我的转换中

 %dw 2.0
 output text/plain
 ---
 "'"++( '<Condition  Code= "parties. &amp;lt;A 
 href=\'\'h\'\'&amp;gt;h/preventfraud/&amp;lt;/A&amp;gt;"></Condition>' )  as 
 String ++ "'"
%dw 2.0
输出文本/纯文本
---
“'”+(“”)as
字符串++“'”

响应XML的字符串转义错误。您正在尝试将XML文档作为字符串表达式放入DataWeave中。但是,在
href=
之后,引号不平衡和/或转义错误。我不确定原始XML文档是什么。如果这是手动的,最好让DataWeave自动且正确地转义它,例如使用
write(xmlPayload,“application/xml”)之类的东西作为字符串

例如:

        <ee:transform doc:name="Mock result from a request" doc:id="723fdd83-fcce-4bff-8a24-065609b235b0" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/xml
---
{
    book: {
            name: "Robin Hood"
    }   
}]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <ee:transform doc:name="Do some transform" doc:id="aaca98c2-1f76-476f-8ab3-030061e46472" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
payload.book mapObject (title: $) ]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <ee:transform doc:name="Prepare arguments for db operation" doc:id="261e8437-d7b5-4a8e-b781-5790ea5f9f40" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
{
    'RESPONSE_XML' : write(payload, "application/xml") ,
    'SUCCESS_FLAG' : "Y"
}
]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <logger level="INFO" doc:name="Logger" doc:id="a90fca6e-5fd3-4aaa-963c-0f06376e4076" message="output #[payload]"/>


请阅读并提供理解问题和如何再现所需的所有详细信息。例如,数据库或Mule应用程序的所有细节都没有。在Oracle上运行时,这意味着什么?显示的JSON是什么?这与问题有关吗?它也应该是文本。请使用文本而不是图像作为文本。有关原因的详细信息,请参阅。更新了我的问题。“我得到的错误如图所示”-错误消息在哪里?添加了我在StudioPlease中看到的错误。请在Mule中添加数据库操作。@aled-->尽管XML的引号看起来不平衡,但XML仍然有效(如果您选中此处-->)。假设这个XML是从外部服务返回的,这个响应我们打算在一些转换之后将它传递给数据库中的存储过程。我们如何做到这一点?请让我知道你对此的想法。我添加了一个模拟值的示例,只是为了展示这个方法。您可以使用变量而不是有效负载。XML本身可能格式良好。问题在于,它使用的字符与DataWeave用于分隔字符串的字符相同。这是两者在同一表达式中的组合导致了错误。我认为你所说的在这里是有意义的。我用硬编码的XML更新了我的问题。当我硬编码XML时,它成功插入。如果我在转换中生成该字符串,并在insert语句中引用该变量,则会失败。尝试在两种语言之间进行双重转义很难,并且会使结果难以读取,但这并非不可能。示例:
read(“,“application/xml”)
。我认为这是不值得的努力,最好让DataWeave这样做,生成它或从文件中读取,而不是硬编码。我使用read()确认DataWeave可以解析它。
 %dw 2.0
 output text/plain
 ---
 "'"++( '<Condition  Code= "parties. &amp;lt;A 
 href=\'\'h\'\'&amp;gt;h/preventfraud/&amp;lt;/A&amp;gt;"></Condition>' )  as 
 String ++ "'"
        <ee:transform doc:name="Mock result from a request" doc:id="723fdd83-fcce-4bff-8a24-065609b235b0" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/xml
---
{
    book: {
            name: "Robin Hood"
    }   
}]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <ee:transform doc:name="Do some transform" doc:id="aaca98c2-1f76-476f-8ab3-030061e46472" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
payload.book mapObject (title: $) ]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <ee:transform doc:name="Prepare arguments for db operation" doc:id="261e8437-d7b5-4a8e-b781-5790ea5f9f40" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
{
    'RESPONSE_XML' : write(payload, "application/xml") ,
    'SUCCESS_FLAG' : "Y"
}
]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <logger level="INFO" doc:name="Logger" doc:id="a90fca6e-5fd3-4aaa-963c-0f06376e4076" message="output #[payload]"/>