开发者

XML Reader wants ProhibitDTD to be false but it is!

Here is the code Stream stream = request.InputStream;

String xsd = // Path to file

XmlReaderSettings settings = new XmlReaderSettings();
if (xsd.Length != 0 && File.Exists(xsd))
{
    settings.ProhibitDtd = false;
    settings.Schemas.Add("", xsd);
    settings.ValidationType = ValidationType.Schema;

}
else
{
    throw new cXMLException("XSD file not found", ResponseStatus.InternalServerError);
}

using (XmlReader reader = XmlReader.Create(stream, settings))
{
    XmlDocument doc = new XmlDocument();

    // Attempt to validate the XML document
    try
    {
        doc.Load(reader);
    }
    catch (XmlSchemaValidationException e)
    {
        StringBuilder sb = new StringBuilder("Invalid cXML document. Reason: ");
        sb.Append(e.Message);
        String message = sb.ToString();
        throw new cXMLException(message, ResponseStatus.BadRequest);
    }

    return new cXMLBasicResponse("Everything OK", ResponseStatus.OK);
}

For some reason it keeps asking me to set "ProhibitDtd" to be false. But as you can see I already have开发者_JAVA技巧! Below is the exception

System.Xml.XmlException: For security reasons DTD is prohibited in this XML document. To enable DTD processing set the ProhibitDtd property on XmlReaderSettings to false and pass the settings into XmlReader.Create method.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res, String arg)
   at System.Xml.XmlTextReaderImpl.ParseDoctypeDecl()
   at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.Schema.Parser.StartParsing(XmlReader reader, String targetNamespace)
   at System.Xml.Schema.Parser.Parse(XmlReader reader, String targetNamespace)
   at System.Xml.Schema.XmlSchemaSet.ParseSchema(String targetNamespace, XmlReader reader)
   at System.Xml.Schema.XmlSchemaSet.Add(String targetNamespace, String schemaUri)
   at cXML.ResponseFactory.requestReader(HttpRequest request)

Any thoughts would be greatly appreciated.


I made a mistake, I was passing it a DTD (not an XSD) and confusing the whole thing.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜