2011-11-14 38 views
4

我只在Activator.start()函數寫了下面的代碼OSGI揭露的「ClassNotFoundException的:org.w3c.dom中***。」錯誤時釋放

public void start(BundleContext bundleContext) throws Exception { 
    Activator.context = bundleContext; 
    Node node = new Node() { 

     @Override 
     public Object setUserData(String arg0, Object arg1, UserDataHandler arg2) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public void setTextContent(String arg0) throws DOMException { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void setPrefix(String arg0) throws DOMException { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void setNodeValue(String arg0) throws DOMException { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public Node replaceChild(Node arg0, Node arg1) throws DOMException { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public Node removeChild(Node arg0) throws DOMException { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public void normalize() { 
      // TODO Auto-generated method stub 
      System.out.println("normalize 方法調用"); 

     } 

     @Override 
     public String lookupPrefix(String arg0) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public String lookupNamespaceURI(String arg0) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public boolean isSupported(String arg0, String arg1) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean isSameNode(Node arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean isEqualNode(Node arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean isDefaultNamespace(String arg0) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public Node insertBefore(Node arg0, Node arg1) throws DOMException { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public boolean hasChildNodes() { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public boolean hasAttributes() { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public Object getUserData(String arg0) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public String getTextContent() throws DOMException { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public Node getPreviousSibling() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public String getPrefix() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public Node getParentNode() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public Document getOwnerDocument() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public String getNodeValue() throws DOMException { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public short getNodeType() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public String getNodeName() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public Node getNextSibling() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public String getNamespaceURI() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public String getLocalName() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public Node getLastChild() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public Node getFirstChild() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public Object getFeature(String arg0, String arg1) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public NodeList getChildNodes() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public String getBaseURI() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public NamedNodeMap getAttributes() { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public short compareDocumentPosition(Node arg0) throws DOMException { 
      // TODO Auto-generated method stub 
      return 0; 
     } 

     @Override 
     public Node cloneNode(boolean arg0) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

     @Override 
     public Node appendChild(Node arg0) throws DOMException { 
      // TODO Auto-generated method stub 
      return null; 
     } 
    }; 
    node.normalize(); 
} 

一切順利的話在Eclipse環境中運行時,但是,當發行版的產品,在日誌中的錯誤時運行:

根異常: java.lang.NoClassDefFoundError:組織/ W3C/DOM /節點

產生的原因:拋出java.lang.ClassNotFoundException:組織。 w3c.dom.Node

任何人都可以給予一定的幫助?

回答

1

請更新您的問題,包括它看起來像org.w3c.dom中的bundle的MANIFEST.MF

沒有隱含在生產提供。檢查Import-Package標題,可能沒有Import-Package: org.w3c.dom

+0

但我在哪裏可以找到org.w3c.dom_version_x_x_x.jar?我無法在eclipse插件/ derectory中找到。 BTW:org.w3c.dom已經包含在jre類路徑中,爲什麼我們要這樣做? –

+0

惟獨Java的*,必須明確導入,如OSGi的包裝 – thobens

+0

org.w3c.dom中的可從JRE,但@thobens指出你需要使用「org.osgi.framework明確導出。 system.packages「或」org.osgi.framework.system.packages.extra「屬性(請參閱google瞭解更多信息)。這允許您使用與JRE中包含的版本不同的版本。 – earcam

7

OSGi默認提供對系統軟件包的訪問,但只允許訪問java。*軟件包,但不包含其他軟件包,如:javax.net,javax.xml,的com.sun

因此,有必要指定任何這種封裝爲OSGi框架導出他們通過系統捆綁讓他們到導入其他bundle訪問。

要做到這一點,你需要設置一個配置屬性和bundle所需的附加包,在啓動OSGi框架之前嘗試將它設置爲系統屬性,以便在第一次啓動時拾取該屬性。

假設你是OSGi的4.2,該屬性將被配置,如:

org.osgi.framework.system.packages.extra=org.w3c.dom 

您可能要檢查Apache Felix Framework Configuration Properties更多的細節,但是此屬性是OSGi規範的一部分,因此應該可用在其他實現方式以及

0

如果使用的是春分,您可以編輯config.ini文件,並添加「org.w3c.dom中的」以org.osgi.framework.system.packages鍵並導入相同的程序包中您的MANIFEST.MF

0

在我的情況下加

org.osgi.framework.bootdelegation=xx...xxx,org.w3c.dom 

解決我的問題。