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

使用ReadyAPI验证XML响应Schema时遇GroovyRuntimeError求助

ReadyAPI XML Schema验证错误修复:Could not find named-arg compatible constructor

错误根源

第28行的核心问题是:你传入StringReader的response是XmlHolder对象,而StringReader的构造函数只接受字符串类型或无参初始化,无法直接处理XmlHolder实例,导致构造函数匹配失败。

修复后的完整代码

import javax.xml.XMLConstants
import javax.xml.transform.stream.StreamSource
import javax.xml.validation.SchemaFactory
import com.eviware.soapui.support.XmlHolder
import java.io.StringReader

// 加载Schema文件路径
def xsdSchema = "/schema/v2_0/qm.xsd"
log.info xsdSchema.toString()

// 获取接口响应的XmlHolder实例
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def responseHolder = groovyUtils.getXmlHolder( 'Get Test Case Result#ResponseAsXML' )
// 打印实际XML内容方便调试
log.info responseHolder.getXml()

// 初始化Schema验证对象
def factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
def schema = factory.newSchema(new StreamSource(xsdSchema))
def validator = schema.newValidator()
log.info factory.toString()
log.info schema.toString()
log.info validator.toString()

// 执行XML与Schema的验证
try {
    validator.validate(new StreamSource(new StringReader(responseHolder.getXml())))
    log.info("XML Schema验证通过")
} catch (Exception validationError) {
    log.error("XML Schema验证失败: " + validationError.getMessage())
    assert false : "接口响应不符合Schema规范,错误信息:${validationError.getMessage()}"
}

关键修改点说明

  1. 获取实际XML字符串:将直接传入XmlHolder对象改为调用getXml()方法,获取到真正的XML文本内容,才能被StringReader正确处理。
  2. 修正验证逻辑:validator.validate()方法没有返回值,验证失败时会抛出SAXException,因此改用try-catch块捕获异常,更准确地处理验证结果,避免无效的assert == null判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:20:34