使用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()}" }
关键修改点说明
- 获取实际XML字符串:将直接传入
XmlHolder对象改为调用getXml()方法,获取到真正的XML文本内容,才能被StringReader正确处理。 - 修正验证逻辑:
validator.validate()方法没有返回值,验证失败时会抛出SAXException,因此改用try-catch块捕获异常,更准确地处理验证结果,避免无效的assert == null判断。
内容的提问来源于stack exchange,提问作者Michael Rowe
相关产品推荐
相关产品推荐

