我在尝试调用从java.lang.NullPointerException:
返回的对象的方法java.lang.String.trim()
时得到org.w3c.dom.Node.getTextContent()
。
当我使用
时List<String> welcomeFiles = WebXml.INSTANCE.getWelcomeFiles();
来自ManagedBean,如下所示:
@ManagedBean
@RequestScoped
public class LogoffControl implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* log4j logger
*/
protected static final Logger LOGGER = LogFactory
.getLogger(LogoffControl.class);
public String logoff() {
List<String> welcomeFiles = WebXml.INSTANCE.getWelcomeFiles();
try {
Faces.redirect(welcomeFiles.get(0));
} catch (IOException e) {
LOGGER.error("Redirect Failed: " + e.getMessage());
}
Faces.invalidateSession();
return "";
}
}
我收到NullPointerException
,说我的web.xml中可能有拼写错误。我调试了它,我看到WebXML.java第414行中xpath执行的结果成功了,我将它放到第418行的循环中
welcomeFiles.add(welcomeFileList.item(i).getTextContent().trim());
在调试器welcomeFileList.item(i)
中评估为<welcome-file>index.jsp</welcome-file>
,但调用welcomeFileList.item(i).getTextContent()
会导致null。我无法弄明白......我错过了什么?
在日志中:
Jan 11, 2015 1:36:37 PM org.omnifaces.config.WebXml init
SEVERE: WebXml failed to initialize. Perhaps your web.xml contains a typo?
java.lang.NullPointerException: while trying to invoke the method java.lang.String.trim() of an object returned from org.w3c.dom.Node.getTextContent()
at org.omnifaces.config.WebXml.parseWelcomeFiles(WebXml.java:418
Oracle JSF 2.1.26,Omnifaces 1.8.1,servlet 2.5,sapjvm6.1(Java6),位于SAPNetweaver 7.4服务器上。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>tablemaint-web</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
....
</webapp>
答案 0 :(得分:2)
这是使用的JAXP解析器中的错误。这应该是正常的。 SAP JAXP解析器显然不知道将文本节点识别为文本节点。 getTextContent()
即将返回null
,例如文档节点和文档类型节点。
使用getFirstChild().getNodeValue()
而不是getTextContent()
的工作似乎工作正常(并且应该继续在正常的JAXP解析器上正常工作),所以这是implemented并且修复是在今天的1.11 snapshot(和2.1 snapshot用于2.x用户)中提供。