2014-02-18 3 views
1

Я знаю, что этот вопрос задан здесь раньше, но никто из них не спрашивает, что именно я ищу.Проверка XML-кода на XSD в soapui

Я хочу знать, как мы можем проверить ответ службы (приложение/xml) RESTful на файл схемы XSD через строгий скрипт. Да, у меня есть файл 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))) 

} 

Если это сделать. Вы закрывали входной поток перед чтением из него afaict (но вы не говорите, какую ошибку вы получали)

+0

Но где мы используем переменную 'response'? Я использовал этот скрипт, и он дает мне ошибку '' -> src-resolve: Не удается разрешить имя tns: id для компонента (') объявления элемента' ' – Amrit

+0

Извините, ваш вопрос действительно _ «Как получить ответ в строку "_? –

+0

И эта ошибка, о которой вы сейчас говорите, кажется, предполагает, что у вас есть ошибки в вашем 'xsd' –

Смежные вопросы