首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将dom文档写入xml文件

无法将dom文档写入xml文件
EN

Stack Overflow用户
提问于 2012-10-02 20:53:04
回答 1查看 2.5K关注 0票数 2

我有一个spring mvc项目,在这个项目中,我上传了xml文件,并尝试通过DOM将其写入到my xml中,但遇到了这个异常。当我尝试在通常的项目中执行相同的过程时,一切都很正常。我不明白为什么会这样..。

代码语言:javascript
复制
    type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)


root cause 

java.lang.NullPointerException
    org.apache.xml.utils.TreeWalker.dispatachChars(TreeWalker.java:303)
    org.apache.xml.utils.TreeWalker.startNode(TreeWalker.java:447)
    org.apache.xml.utils.TreeWalker.traverse(TreeWalker.java:202)
    org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:343)
    com.mycompany.xmlloader.xmlHandler.DOMParser.saveToCatalog(DOMParser.java:147)
    com.mycompany.xmlloader.service.XMLServiceImpl.updateCatalog(XMLServiceImpl.java:48)
    com.mycompany.xmlloader.controller.XMLController.uploadToCatalog(XMLController.java:47)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:601)
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

和代码片段:

代码语言:javascript
复制
TransformerFactory transfac = TransformerFactory.newInstance();
        Transformer trans = transfac.newTransformer();
        trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        trans.setOutputProperty(OutputKeys.INDENT, "yes");

        StreamResult result = new StreamResult(catalogFile.toURI().getPath());
        Source source = new DOMSource(doc);
        trans.transform(source, result);
EN

回答 1

Stack Overflow用户

发布于 2013-06-09 20:24:08

问题的可能原因是Document中的一个Text节点,它的数据设置为null。(有关该问题的讨论,请参阅herehere。)

您可以使用以下代码检查您的Document以查看此诊断是否正确:

代码语言:javascript
复制
public static void checkDoc(Node n) {
  if (n instanceof Text) {
    if (((Text) n).getData() == null) {
      System.err.println("null data!!!!");
    }
  }

  NodeList l = n.getChildNodes();
  for (int i = 0; i < l.getLength(); ++i) {
    checkDoc(l.item(i));
  }
}

Document上调用checkDoc

代码语言:javascript
复制
checkDoc(doc);

如果您看到任何输出,那么您现在就知道NPE的直接原因了。您的问题的解决方案是:不要构建包含空数据的Text节点的Document

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12690645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档