wso2 - WSO2 Ei 代理服务和 DS
问题描述
如何将 XML 对象有效负载的属性设置为参数 () 以使用 CLOB 调用 Wso2 ds
下面是我调用 WSO2 DS 的有效载荷:
<property name="messageType" scope="axis2" value="application/xml"/>
<property expression="$body/*" name="acclist" scope="default" type="OM"/>
<payloadFactory media-type="xml">
<format>
<Body>
<p_cif>$1</p_cif>
<p_acclist>$2</p_acclist>
</Body>
</format>
<args>
<arg evaluator="xml" expression="$ctx:cif"/>
<arg evaluator="xml" expression="$ctx:acclist"/>
</args>
</payloadFactory>
WSO2 DS 的错误消息:
Default Namespace: http://ws.wso2.org/dataservice
Current Request Name: _post_getacclist
Current Params: {p_acclist=, p_cif=00021118}
Nested Exception:-
DS Fault Message: Error in 'createProcessedPreparedStatement'
DS Code: UNKNOWN_ERROR
Nested Exception:-
java.sql.SQLRecoverableException: IO Error: 0 char of CLOB data cannot be read
我认为输入 Clob 参数(p_acclist)为空或为空,
当我将$ctx:acclist转换为 JSON 时,它设置了参数,但 XML 不起作用
我可以传递整个 $body// 它也可以正确打印,但我需要这个 XML 的内部元素。
Basically i'am calling Data service using Clob(XML object) from Proxy service
解决方案
你的问题是双重的:
- p_acclist 元素不包含任何类型的值,而是更多的 xml。这需要在 CDATA 块中
- 有效负载工厂中的 CDATA 块不会像那样工作,因为配置也是 XML。因此,您的 payloadfactory/proxy 中的 CDATA 块将被忽略。
您可以通过使用 xslt 构建消息来解决此问题,在 XSLT 中您可以添加 CDATA 块,如下所示:
<xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text>
<xsl:copy-of select="*"/>
<xsl:text disable-output-escaping="yes">]]></xsl:text>
您甚至可以像这样将您的财产传递给 xslt:
<xslt key="xlsfilereference">
<property expression="$ctx:acclist" name="acclist">
</property>
</xslt>
然后在 xslt 中使用如下:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="acclist"></xsl:param>
...
<Body>
<p_cif><xsl:value-of select="[path_to_cif_value]"/></p_cif>
<p_acclist>
<xsl:text disable-output-escaping="yes"><![CDATA[</xsl:text>
<xsl:value-of select="$acclist"/>
<xsl:text disable-output-escaping="yes">]]></xsl:text>
</p_acclist>
</Body>
...
</xsl:stylesheet>
在上面的示例中,您可能必须使用 copy-of 而不是 value-of。
推荐阅读
- sd-card - 为什么 File.mkdirs() 创建两个目录而不是一个?
- c# - 将文档与 Xceed Docx 合并后,标题会丢失样式
- java - 需要详细了解“@”符号如何在 google cloud apache 梁代码中使用
- arrays - 获取与字符串匹配的所有数组/映射条目
- c# - 由块组成的 Linq 组
- java - 导入 bsh.This;eclipse中的声明
- android - 需要 Unity3D Gradle 版本 2.10
- wordpress - 登录错误消息显示在 Url - WooCommerce
- php - 为什么当计数器等于三时它不重定向页面?
- angular - Angular 2 - Favicons Webpack 插件在许多文件中注入 html