【问题标题】:Oracle OSB cdata passed to reqest envelopeOracle OSB cdata 传递到请求信封
【发布时间】:2019-09-06 12:52:43
【问题描述】:

我必须将一些 xml 结构传递到 cdata,它被插入到 soap:Envelope 结构中。现在我有一些函数可以生成 xml 结构:

declare function local:getRequest($bd as element(fml:FML32)) as element (request)
{
<request>
    <requestAttributes>
    ...
    </requestAttributes>
</request>
};  

当我尝试序列化这些数据时

<soapenv:Body>
<Request>
    <requestId>{data(...)}</requestId>
    <templateList>
        <template>
            <type>{data(...)}</type>
    <data>
        { fn-bea:serialize(fn:concat('<![CDATA[',fn-bea:serialize(local:getRequest($body)),']]>'))} 
    </data>
     </template>
    </templateList>
</Request>
</soapenv:Body>

结果(目标服务中可见的数据)如下:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Header/>
    <soapenv:Body>
        <Request>
            <requestId>...</requestId>
            <templateList>
                <template>
                    <type>...</type>
                    <data>
                        &lt;![CDATA[&lt;tns:request&gt;&lt;requestAttributes&gt;...&lt;/requestAttributes&gt;&lt;/request&gt;]]&gt;
                    </data>
                </template>
            </templateList>
        </Request>
    </soapenv:Body>
</Envelope>

有没有可能得到这样的结果:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Header/>
    <soapenv:Body>
        <Request>
            <requestId>...</requestId>
            <templateList>
                <template>
                    <type>...</type>
                    <data>
                        <![CDATA[<tns:request><requestAttributes>...</requestAttributes></request>]]>
                    </data>
                </template>
            </templateList>
        </Request>
    </soapenv:Body>
</Envelope> 

如何替换(使用 xuery)转义字符 andlt;和和gt;到 ?

【问题讨论】:

  • fn-bea:serialize 转义特殊字符。您是否尝试过不序列化它?即,只是&lt;data&gt;{fn:concat('&lt;![CDATA[',local:getRequest($body),']]&gt;')}&lt;/data&gt;
  • 结果几乎一样。如果没有序列化,我只有来自请求元素的数据:<![CDATA[...]]>
  • 你成功了吗?

标签: oracle soap xquery cdata osb


【解决方案1】:

显然,自从 11.1.1.3 中的编辑器现在自动设置 CDATA 定义以来,OSB 中的 XPath 表达式编辑器已经更新。

试试:

{fn-bea:serialize(local:getRequest($body))}

参考Jan Van Zoggel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多