我的应用程序正在尝试解析XML,并抛出以下异常,
在文档的元素内容中找到了无效的XML字符(Unicode:0x52)。
我100%确定XML是有效的。但我仍然不知道为什么我会得到这个例外。
关于可能导致此异常的原因的任何想法?
我用来读取xml文件的代码是:
String policyFile = filename;
try {
String overRide = System.getProperty("TEST_POLICY_FILE");
if (overRide != null) {
policyFile = overRide;
}
// URL urlToPolicyFile = new URL(policyFile);
// InputStream is = urlToPolicyFile.openStream();
//InputStream is = getClass().getClassLoader().getResourceAsStream(policyFile);
// get XML Parser instance
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringComments(true);
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setEntityResolver(VacEntityResolver.getInstance());
InputSource inputSource = new InputSource(policyFile);
// parse input file
Document policyDocument = builder.parse(inputSource);
Builder policyBuilder = new Builder();
// load decl-policies file into cache
visitDeclarativePolicies(policyDocument, policyBuilder);
m_myPolicyCache = policyBuilder.getPolicyCache();
} catch (SAXException e) {
throw new InvalidPolicyFileException(policyFile);
} catch (ParserConfigurationException e) {
throw new InvalidPolicyFileException(policyFile);
} catch (IOException e) {
throw new InvalidPolicyFileException(policyFile);
}
这一行,
Document policyDocument = builder.parse(inputSource);
是抛出错误的那个
关于这个问题的一个有趣的事实是,它只发生在生产环境中。同样的Xml文件既不会在我的开发环境中也不会在测试环境中产生任何问题。很抱歉没有共享文件。这是一个文件,我不应该分享。但是相同的输入文件在我的Dev环境中没有产生任何问题。
这个问题对我来说似乎很奇怪,因为它为字符0x52抛出异常,即'R'。
答案 0 :(得分:0)
通常最好提供更多输入(例如发布仍然显示该行为的输入的最小化版本),但是从你给出的内容开始,可能会出现小写r与大写R(这会让你认为这是有效的,但严格的语法检查会将其标记为无效)
[编辑以下问题信息]
开发/生产差异的嫌疑人是操作系统的差异。你的机器是Unix和Production Windows还是其他方式?在这些情况下,操作系统创建和读取文件的方式可能会影响您获得的内容,并且解析可能会有所不同。
答案 1 :(得分:0)
Unicode:0x52是大写字母R.我不确定为什么会出现此错误。你能否发布你想要执行的代码或者抛出这个错误的数据样本?
http://www.utf8-zeichentabelle.de/unicode-utf8-table.pl?names=-&utf8=0x
答案 2 :(得分:0)
我能想到“R”将成为无效字符的唯一情况是紧跟“高代理人”。但是,不要让我们猜测,你需要向我们提供更多信息。
根据我的经验,我会说“100%确定”你的XML是有效的,当你的解析器告诉你它不是时,并不是解决问题的最佳起点。