如何在OIC SOAP响应映射器XSLT中移除命名空间?
在Oracle Integration Cloud (OIC) 中移除SOAP响应元素的命名空间
问题场景
你在OIC中构建的集成返回SOAP响应时,OIC会自动为响应元素添加urn:createDocumentNumber命名空间,导致BI Publisher解析失败。当前输出与预期输出的差异如下:
当前响应:
<CreateReserveDocResponse xmlns="urn:createDocumentNumber">อว 660201.1.3.3/25551</CreateReserveDocResponse>
预期响应:
<CreateReserveDocResponse>อว 660201.1.3.3/25551</CreateReserveDocResponse>
解决方案
可以通过调整XSLT转换逻辑,结合OIC的响应配置来彻底移除元素的命名空间,以下是两种可行方案:
方案1:优化XSLT转换逻辑
原XSLT使用<xsl:element>指定空命名空间,但可能因上下文继承或OIC默认处理未生效。改用以下XSLT,确保生成的元素完全脱离命名空间:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> <!-- 移除所有元素的命名空间 --> <xsl:template match="*"> <xsl:element name="{local-name()}"> <xsl:apply-templates select="@* | node()"/> </xsl:element> </xsl:template> <!-- 移除所有属性的命名空间 --> <xsl:template match="@*"> <xsl:attribute name="{local-name()}"> <xsl:value-of select="."/> </xsl:attribute> </xsl:template> <!-- 保留文本、注释等节点 --> <xsl:template match="text() | comment() | processing-instruction()"> <xsl:copy/> </xsl:template> <!-- 生成目标响应结构 --> <xsl:template match="/"> <CreateReserveDocResponse> <xsl:value-of select="$docNum"/> </CreateReserveDocResponse> </xsl:template> </xsl:stylesheet>
方案2:调整OIC集成的响应配置
如果使用SOAP适配器作为响应端点,需确认以下配置:
- 检查集成关联的WSDL,确保响应元素
CreateReserveDocResponse未定义命名空间 - 在OIC的响应映射环节,选择「使用自定义XSLT」并应用上述优化后的XSLT
- 若为同步集成,在响应设置中选择「返回原始XML payload」,避免OIC自动注入命名空间
验证
应用上述方案后,测试集成的响应输出,确认<CreateReserveDocResponse>元素已无xmlns属性,即可解决BI Publisher的解析问题。
内容的提问来源于stack exchange,提问作者Abdullah Qaisar
相关产品推荐
相关产品推荐

