You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OUAF服务脚本raw类型Schema节点在IWS响应中不显示的问题

解决IWS中Raw类型节点不输出的问题

问题根源

你碰到的核心问题是IWS对type="raw"节点的处理逻辑特殊:move操作只是把DOM对象引用赋值给了节点,但Raw节点要求输入的是XML字符串而非DOM对象,所以日志能看到内部有值,但响应序列化时无法识别DOM引用,导致节点不输出。

具体解决步骤

方案1:转XML字符串后直接赋值

放弃move方法,先把捕获到的myXml DOM节点转换成XML字符串,再用setElementValue直接赋值给rawNode:

// 把DOM节点转为XML字符串
def xmlWriter = new StringWriter()
def transformer = javax.xml.transform.TransformerFactory.newInstance().newTransformer()
transformer.transform(new javax.xml.transform.dom.DOMSource(myXml), new javax.xml.transform.stream.StreamResult(xmlWriter))
def rawXmlStr = xmlWriter.toString()

// 给rawNode设置字符串值
setElementValue("parm/output[last()]/childList[last()]/grandChildList[last()]/rawNode", rawXmlStr)

方案2:调整Schema结构避免嵌套冲突

如果嵌套列表里的rawNode始终无法输出,尝试把rawNode移到列表外的独立group中,修改后的Schema如下:

<parm>
  <output type="group">
    <childList type="list">
      <grandChildList type="list">
        <node1/>
        <node2/>
      </grandChildList>
    </childList>
    <!-- 新增独立group存放raw节点 -->
    <rawContentGroup type="group">
      <rawNode type="raw"/>
    </rawContentGroup>
  </output>
</parm>

再用方案1的代码把XML字符串赋值到新路径parm/output[last()]/rawContentGroup/rawNode,避免列表嵌套导致的序列化异常。

方案3:简化DOM转字符串(环境支持时)

如果你的运行环境支持DOM节点的outerHTML属性,可以直接获取字符串:

def rawXmlStr = myXml.outerHTML
setElementValue("parm/output[last()]/childList[last()]/grandChildList[last()]/rawNode", rawXmlStr)

关键提醒

  • Raw节点只认XML字符串,不能直接传DOM对象,这是move操作无效的核心原因。
  • 把Raw节点放在嵌套列表里容易触发序列化冲突,尽量放在非列表的group下。
  • 移到group类型节点时的栈溢出,是因为DOM对象存在循环引用,转成字符串后就能彻底避免。

内容的提问来源于stack exchange,提问作者karmachameleon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 07:37:37