2016-12-06 14 views
0

以下は、スキーマに対してXML文字列を検証するための最も効率的なJavaソリューションであることを確認します。より効率的なメモリまたはパフォーマンス賢明な他の方法?XSDに対してXMLを検証する

private boolean isXMLValid(String XSDPath, String XML) { 
     final SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
     try { 
      final Schema schema = factory.newSchema(new File(XSDPath)); 
      final Validator validator = schema.newValidator(); 
      validator.validate(new StreamSource(new ByteArrayInputStream(XML.getBytes()))); 
     } catch (IOException | SAXException e) { 
      System.out.println("Exception: " + e.getMessage()); 
      return false; 
     } 
     return true; 
    } 

答えて

1

ほとんどありません。 SchemaFactory(注意:スレッドセーフではない)とSchema(スレッド不変の不変)を再利用することで若干の改善が得られるかもしれませんが、ほとんどの場合です。 String XMLからもっとストリーに変えてStAXを使用すると、メモリの改善が得られるかもしれません。

+0

この検証は、XMLを検証するために別のアプリケーションから呼び出されるREST APIの背後にあるため、よりストリーになるかどうかわかりませんが、アイデアがあれば教えてください。ありがとう! – c12

+1

'ServletRequest'には、[' getInputStream'](http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getInputStream())メソッドがあります。 – lexicore

関連する問題