OSGI公开了"ClassNotFoundException:org.w3c.dom.***".释放时出错 [英] OSGI expose An "ClassNotFoundException: org.w3c.dom.***" Error when release
问题描述
我只在Activator.start()函数中编写了以下代码
I only wrote the following codes in Activator.start() function
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环境中运行时一切正常,但是,在发布产品时,运行时日志中出现错误:
Everything goes well when run in eclipse environment, but, when release the product, ERRORS in log when runs:
根异常: java.lang.NoClassDefFoundError:org/w3c/dom/Node
Root exception: java.lang.NoClassDefFoundError: org/w3c/dom/Node
原因:java.lang.ClassNotFoundException:org.w3c.dom.Node
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.Node
任何人都可以提供帮助吗?
Anyone can give some help?
推荐答案
OSGi允许访问系统软件包,但默认情况下仅访问java.*软件包,这不包括其他软件包,例如:javax.net,javax.xml,com.太阳
OSGi gives access to system packages but only java.* packages by default, this does not include other packages like: javax.net , javax.xml , com.sun
因此,有必要为OSGi框架指定任何这样的软件包,以通过系统捆绑包导出它们,从而使导入它们的其他捆绑包可以访问它们.
Thus it is necessary to specify any of such packages for OSGi framework to export them through the system bundle making them accessible to other bundles that import them.
为此,您需要使用捆绑软件所需的其他软件包来设置配置属性,请在启动OSGi框架之前尝试将其设置为系统属性,以使OSGi框架在其首次启动时就使用该属性.
To do that you need to set a configuration property with the additional packages required by your bundles, try setting it as a system property before starting the OSGi framework such that it picks up this property when it first starts.
假设您使用的是OSGi 4.2,则该属性的配置应如下:
Assuming you are on OSGi 4.2, that property would be configured like:
org.osgi.framework.system.packages.extra=org.w3c.dom
您可能要检查 Apache Felix Framework配置属性以获得更多详细信息,尽管此属性是OSGi规范的一部分,因此也应在其他实现中可用
You may want to check the Apache Felix Framework Configuration Properties for more details, though this property is part of the OSGi spec and thus should be available in other implementations as well
这篇关于OSGI公开了"ClassNotFoundException:org.w3c.dom.***".释放时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!