2012-07-03 82 views
0

我需要修复以下用于XML数据注入的代码。响应中的XML数据注入来自Web服务的XML

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder db = factory.newDocumentBuilder(); 
InputSource inStream = new InputSource(); 
inStream.setCharacterStream(new StringReader(xmlFromWebService)); 
Document doc = db.parse(inStream); // reported at this line by a code audit tool 
doc.getDocumentElement().normalize(); 

如何解决?有没有人有任何建议。

+0

你我关心你了。而且,在我的模块中找到并实施解决方案并对其进行测试后,我对每个问题发布了正确的解决方案。我不知道它。 –

+0

嘿你可以给这个解决方案吧!!!!! –

回答

1

我猜测这与你的XML对一个给定的XSD的验证有关,以防止XML数据注入。我建议你这样修改你的代码:

try { 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    factory.setNamespaceAware(true); 
    factory.setValidating(true); 

    factory.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", 
         "http://www.w3.org/2001/XMLSchema"); 
    factory.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", 
         "file:<your_xsd_file>"); 

    DocumentBuilder builder = factory.newDocumentBuilder(); 
    InputSource inStream = new InputSource(); 
    inStream.setCharacterStream(new StringReader(xmlFromWebService)); 
    Document document = builder.parse(inStream); 

} catch (ParserConfigurationException e) { 
    e.printStackTrace(); 
} catch (SAXException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

我希望你能得到提示!

+0

雅我明白了。还做了一些相同的研发。你能告诉我,这个setProperty设置了什么属性?我将setAttribute作为实际名称。它会以同样的方式工作吗?此外,这些属性的价值应该是什么?另外所有的东西是如何完成documentBuilderFactory的工作的? –

+0

@ R.K.R:1. SchemaLanguage&Schema Source(这就是为什么我将第二个属性的值有意地保存为)。 2. setAttribute也可以工作。在我的代码中阅读这两行,并且您可以理解该值的用途。 3.我不太明白你问题的最后部分是什么意思。 – Sujay

+0

我的意思是如何documentBuilderfactory将验证所有的东西xml?我用它做的任何方式都能找到问题的所有解决方案,并且还实施了演示解决方案并获得客户的认可。非常感谢!!!!!! 1 –