2010-11-15 38 views

Répondre

1

En fait, je connais la réponse. Mais comme il m'a fallu du temps pour le faire fonctionner, j'ai pensé partager ma solution. C'est une macro webtest. Vous pouvez également utiliser uniquement la séquence si vous aimez ...

<macrodef name="verifySchema" description="Validate the current document against its schema"> 
<sequential> 
    <groovy description="validate schema" > 
     import javax.xml.parsers.ParserConfigurationException 
     import javax.xml.parsers.SAXParser 
     import javax.xml.parsers.SAXParserFactory 

     import java.io.InputStreamReader 


     import org.xml.sax.ErrorHandler 
     import org.xml.sax.InputSource 
     import org.xml.sax.SAXException 
     import org.xml.sax.SAXParseException 
     import org.xml.sax.XMLReader 

     class MyHandler implements org.xml.sax.ErrorHandler { 
      void warning(SAXParseException e) throws SAXException { 
       println 'WARNING: ' + e.getMessage() 
      } 

      void error(SAXParseException e) throws SAXException { 
       println 'ERROR: ' + e.getMessage() 
       throw e 
      } 

      void fatalError(SAXParseException e) throws SAXException { 
       println 'FATAL: ' + e.getMessage() 
       throw e 
      } 
     } 


      def factory = SAXParserFactory.newInstance() 
      factory.setValidating(true) 
      factory.setNamespaceAware(true) 

      def parser = factory.newSAXParser() 
      def reader = parser.getXMLReader() 
      reader.setErrorHandler(new MyHandler()) 
      def response = step.context.currentResponse.webResponse 
      reader.parse(new InputSource(new InputStreamReader(response.contentAsStream,"UTF-8"))) 
    </groovy> 
</sequential> 

Si vous voulez ne pas trop votre test sur les avertissements, ajoutez une instruction throw au gestionnaire en conséquence.