2014-02-18 124 views
1

我知道这个问题已经在这里被问到过,但是他们没有一个正在询问我在找什么。在soapui验证XML对XSD

我想知道如何通过groovy脚本对XSD模式文件验证RESTful服务响应(application/xml)。是的,我的本地磁盘上有xsd文件,但似乎无法理解如何提供响应作为输入以供验证?

我创建了一个示例,但缺少一个关键部分。任何人都可以帮助吗?

import com.eviware.soapui.support.XmlHolder 
import javax.xml.XMLConstants 
import javax.xml.transform.stream.StreamSource 
import javax.xml.validation.* 
// setup validator 
Validator validator; 
def url = 'C:\\Documents and Settings\\schema\\sclBase.xsd' 
log.info url 
URI uri = new URI(url); 
InputStream inp = uri.toURL().openStream(); 
try 
{ 
SchemaFactory factory = 
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
StreamSource entitySs = new StreamSource(inp); 
Schema schema = factory.newSchema(entitySs); 
assert(schema != null); 
validator = schema.newValidator(); 

def response = new XmlHolder(messageExchange.responseContentAsXml) 
log.info response 
validator.validate(new StreamSource(new StringReader(response))) 
} 
finally 
{ 
inp.close(); 
inp = null; 
} 

我在这里得到的错误是“ - >在不透明的部分非法字符索引2:C:\ Documents和Settings \架构\ sclBase.xsd”

回答

2

假设你有REST字符串中的响应称为response

import javax.xml.XMLConstants 
import javax.xml.transform.stream.StreamSource 
import javax.xml.validation.SchemaFactory 

String response = messageExchange.responseContent 

new File('C:\\Documents and Settings\\schema\\sclBase.xsd').withReader { xsd -> 
    SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI) 
       .newSchema(new StreamSource(xsd)) 
       .newValidator() 
       .validate(new StreamSource(new StringReader(response))) 

} 

应该这样做。你在输入流之前关闭了输入流(但你没有说出你得到了什么错误)

+0

但是我们在哪里使用'response'变量?我用这个脚本,它给了我错误'“ - > src-resolve:无法解析名称tns:id到一个(n)'元素声明'组件'' – Amrit

+0

对不起,你的问题真的_”我如何得到响应成一个字符串“_? –

+0

现在你说你得到的错误似乎表明你的'xsd'错误# –