2013-09-26 22 views
1

我试图从小时以来解决domparser的问题。我编写了一个简单的应用程序来加载一个xml文件,修改它们并将修改写回去。它工作,直到我切换到Maven项目转换项目。我不确定那是否是问题所在。我无法理解的例外Java-DOM-Parser:Transformer.transform的例外

这里我的代码部分的DOM解析器:

import java.io.File; 
import java.io.IOException; 

import javafx.beans.property.BooleanProperty; 
import javafx.beans.property.SimpleBooleanProperty; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerConfigurationException; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import **.***.Notification.*; 

public class TomcatVM implements ViewModel{ 


Document tomcatDoc; 
Node shutdownPortNode = null; 
Node portNode = null; 

private StringProperty port = new SimpleStringProperty(); 
private StringProperty shutdownPort = new SimpleStringProperty(); 
private BooleanProperty tomcatService = new SimpleBooleanProperty(); 
private String fullTomcatPropPath = new String(); 
private StringProperty path = new SimpleStringProperty(); 


public void init() { 

    NotificationCenter.getDefaultNotificationCenter().addObserverForName(Notification.LOAD_NOTIFICATION.toString(), new NotificationObserver() { 

     @Override 
     public void receivedNotification(final String arg0, final Object... arg1) { 
      // TODO Auto-generated method stub 
      File tomcatXmlFile = new File(getFullTomcatPropPath()); 
      if(tomcatXmlFile != null){ 

       try{ 

        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
        System.out.println("got: "+getFullTomcatPropPath()); 
        System.out.println("path: "+tomcatXmlFile.getPath()); 
        tomcatDoc = dBuilder.parse(tomcatXmlFile); 
        tomcatDoc.getDocumentElement().normalize(); 

        if(tomcatDoc != null){ 

         shutdownPortNode = tomcatDoc.getElementsByTagName("Server").item(0).getAttributes().getNamedItem("port"); 
         portNode = tomcatDoc.getElementsByTagName("Connector").item(0).getAttributes().getNamedItem("port"); 

         //     tomcatShutdownPortTextField.setText(shutdownPortNode.getTextContent()); 
         setPort(portNode.getTextContent()); 
         setShutdownPort(shutdownPortNode.getTextContent()); 

        } 

       }catch(Exception e){ 
        e.printStackTrace(); 
       } 
      } 
     } 
    }); 


    NotificationCenter.getDefaultNotificationCenter().addObserverForName(Notification.SAVE_NOTIFICATION.toString(), new NotificationObserver() { 

     /* 
     * write changes from the interface to the doc file for 
     * the tomcat-xml file and overwrite the old tomcat-xml 
     */ 

     @Override 
     public void receivedNotification(final String arg0, final Object... arg1) { 

      portNode.setTextContent(getPort().toString()); 
      shutdownPortNode.setTextContent(getShutdownPort().toString()); 

      TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
      Transformer transformer; 

      try { 
       transformer = transformerFactory.newTransformer(); 
       DOMSource source = new DOMSource(tomcatDoc); 
       StreamResult result = new StreamResult(new File(getFullTomcatPropPath())); 
       enter code here // ******here is the exception: ******* 
       transformer.transform(source, result); 
      } catch (TransformerConfigurationException e) { 
       e.printStackTrace(); 
      } catch (TransformerException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 


} 



public String getFullTomcatPropPath() { 
    return fullTomcatPropPath; 
} 

public void setFullTomcatPropPath(final String fullTomcatPropPath) { 
    this.fullTomcatPropPath = fullTomcatPropPath; 
    } 

} 

这是我得到的异常:

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown Source) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) 
    at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) 
    at javafx.event.Event.fireEvent(Unknown Source) 
    at javafx.scene.Node.fireEvent(Unknown Source) 
    at javafx.scene.control.Button.fire(Unknown Source) 
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(Unknown Source) 
    at com.sun.javafx.scene.control.skin.SkinBase$4.handle(Unknown Source) 
    at com.sun.javafx.scene.control.skin.SkinBase$4.handle(Unknown Source) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
    at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) 
    at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) 
    at javafx.event.Event.fireEvent(Unknown Source) 
    at javafx.scene.Scene$MouseHandler.process(Unknown Source) 
    at javafx.scene.Scene$MouseHandler.process(Unknown Source) 
    at javafx.scene.Scene$MouseHandler.access$1900(Unknown Source) 
    at javafx.scene.Scene.impl_processMouseEvent(Unknown Source) 
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source) 
    at com.sun.glass.ui.View.handleMouseEvent(Unknown Source) 
    at com.sun.glass.ui.View.notifyMouse(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.access$100(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication$3$1.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.reflect.misc.Trampoline.invoke(Unknown Source) 
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.reflect.misc.MethodUtil.invoke(Unknown Source) 
    ... 53 more 
Caused by: java.lang.AbstractMethodError: org.apache.xerces.dom.DeferredDocumentImpl.getXmlStandalone()Z 
    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(Unknown Source) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown Source) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown Source) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(Unknown Source) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source) 
    at **.*****.***.***.database.DatabaseVM$3.receivedNotification(DatabaseVM.java:238) 

我没加任何依赖到我的pom.xml dom解析器。 SAME CODE在另一个项目中运行,唯一的区别是,我从中得到例外的项目是一个maven项目。如果我注释掉该行,则会在另一个保存其他xml文件的类上得到异常。所以我认为是不是与tomcat的问题? 有没有人有想法? :/

在此先感谢!

回答

2

在没有maven的独立项目中是否包含任何罐子/进口?如果相同的确切代码在那里工作,但不是maven它会导致我相信你有依赖性错误。

尝试加入这个依赖于你的pom.xml:xercesImpl.jar

<dependency> 
    <groupId>xerces</groupId> 
    <artifactId>xercesImpl</artifactId> 
    <version>2.11.0</version> 
</dependency> 
+0

该死的工作:-D!我真的认为我已经尝试了所有可能的依赖关系。你节省了我的一天......第二天;-)非常感谢! –

+0

很高兴听到它的作品! – pinkdevelops

+0

谢谢@pinkdevelops。在我的情况下,这是由于依赖于使用xercesImpl依赖项构建的外部jar。在子项目中添加这个依赖关系 - 修复它! –