Omnifaces 1.8.1 WebXML解析异常

时间:2015-01-11 18:33:44

标签: jsf-2 omnifaces

我在尝试调用从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>

1 个答案:

答案 0 :(得分:2)

这是使用的JAXP解析器中的错误。这应该是正常的。 SAP JAXP解析器显然不知道将文本节点识别为文本节点。 getTextContent()即将返回null,例如文档节点和文档类型节点。

使用getFirstChild().getNodeValue()而不是getTextContent()的工作似乎工作正常(并且应该继续在正常的JAXP解析器上正常工作),所以这是implemented并且修复是在今天的1.11 snapshot(和2.1 snapshot用于2.x用户)中提供。