使用Web服务从XML文档获取数据时遭遇NullPointerException求助
解决XML解析中的NullPointerException问题
嘿,我来帮你搞定这个空指针异常的问题!从你提供的代码和异常信息来看,问题出在doc.getDoctype().getTextContent()这一行——doc.getDoctype()返回了null,你直接调用它的getTextContent()方法,自然就触发了NullPointerException。
为什么会出现这个问题?
当你解析的XML文档中没有DOCTYPE声明时,Document.getDoctype()方法就会返回null。而你的代码没有做任何判空处理,直接调用后续方法,就会抛出异常。另外,我注意到你代码里创建了InputSource对象但没有实际使用,这部分属于冗余代码,不过暂时不是导致NPE的原因。
解决方案
1. 先判空再调用方法(最直接解决NPE)
修改代码,先检查getDoctype()的返回值是否为null,再执行后续操作:
String name = "Nsss"; String resulturl = "http://ssss/res/get?sid=" + name; DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); // 你之前创建的InputSource没用到,这里可以删掉或者按需使用 Document doc = db.parse(resulturl); // 新增判空逻辑 if (doc.getDoctype() != null) { System.out.println("sssssssssssssssssssssssssssssssssssssssssssssssssss" + doc.getDoctype().getTextContent()); } else { System.out.println("注意:解析的XML文档没有DOCTYPE声明"); }
2. 确认Web服务返回的XML结构
你可以先通过浏览器或者curl工具访问resulturl对应的地址,查看返回的XML是否真的包含DOCTYPE声明。如果服务返回的XML本身就没有DOCTYPE,那getDoctype()返回null是正常的,这时候你可能需要调整逻辑,不要依赖DOCTYPE的内容。
3. 清理冗余代码
你代码里创建了InputSource is但完全没用到,这部分可以直接删除,避免代码混乱。如果你的需求是解析字符串形式的XML才需要用到InputSource,那你需要调整代码逻辑,把XML字符串传入InputSource再解析,而不是直接解析URL。
内容的提问来源于stack exchange,提问作者siva
相关产品推荐
相关产品推荐

