2016-12-06 103 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

仅针对某些情况,此验证位于REST API的后面,将由另一个应用程序调用以验证其XML,因此我不确定是否可以获得更多流畅性,但是如果您有任何想法,请告诉我。谢谢! – c12

+1

'ServletRequest'有一个['getInputStream'](http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getInputStream())方法。 – lexicore