我对 osgi 和 bndtools 相当陌生,并从 bndtools教程开始
本教程运行良好,然后我尝试使用我自己的测试项目来实现接口,在实现中,我试图使用org.simpleframework将 xml 文件反序列化为 java 类
我得到以下 classnotfound 异常。另外,我确实包含了包(有问题的类是其中的一部分)作为我正在运行的包中的私有包的一部分
java.lang.ClassNotFoundException:java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 的 packagename.classname。 net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at org. simpleframework.xml.strategy.Loader.load(Loader.java:50) at org.simpleframework.xml.strategy.TreeStrategy.readValue(TreeStrategy.java:163) at org.simpleframework.xml.strategy.TreeStrategy.read(TreeStrategy. java:102) 在 org.simpleframework.xml.core.Source.getOverride(Source.java:370) 在 org.simpleframework.xml.core.Factory.getConversion(Factory.java:207) 在 org.simpleframework.xml.core.ObjectFactory.getInstance(ObjectFactory.java:63) 在 org.simpleframework.xml.core.Composite 的 org.simpleframework.xml.core.Factory.getOverride(Factory.java:139) .read(Composite.java:141) 在 org.simpleframework.xml.core.Composite.readVariable(Composite.java:687) 在 org.simpleframework.xml.core.Composite.readInstance(Composite.java:635) 在 org. simpleframework.xml.core.Composite.readUnion(Composite.java:610) at org.simpleframework.xml.core.Composite.readElement(Composite.java:593) at org.simpleframework.xml.core.Composite.readElements(Composite. java:506) 在 org.simpleframework.xml.core.Composite.readSection(Composite.java:388) 在 org.simpleframework.xml.core.Composite.read(Composite.java:367) 在 org.simpleframework.xml.core .Composite.read(Composite.java:234) 在 org.simpleframework.xml.core.Composite.read(Composite.java:202) 在 org.simpleframework.xml.core.Composite.read(Composite.java:150) 在 org.simpleframework.xml.core.Traverser .read(Traverser.java:92) at org.simpleframework.xml.core.CompositeList.populate(CompositeList.java:175) at org.simpleframework.xml.core.CompositeList.read(CompositeList.java:148) at org. simpleframework.xml.core.Composite.readVariable(Composite.java:682) at org.simpleframework.xml.core.Composite.readInstance(Composite.java:635) at org.simpleframework.xml.core.Composite.readUnion(Composite. java:610) 在 org.simpleframework.xml.core.Composite.readElement(Composite.java:593) 在 org.simpleframework.xml.core.Composite.readElements(Composite.java:506) 在 org.simpleframework.xml.core .Composite.readSection(Composite.java:388)在 org.simpleframework.xml.core.Composite.readDefault(Composite.java:262) 在 org.simpleframework.xml.core.Composite .read(Composite.java:232) 在 org.simpleframework.xml.core.Composite.read(Composite.java:202) 在 org.simpleframework.xml.core.Composite.read(Composite.java:150) 在 org. simpleframework.xml.core.Composite.readVariable(Composite.java:687) at org.simpleframework.xml.core.Composite.readInstance(Composite.java:635) at org.simpleframework.xml.core.Composite.readUnion(Composite. java:610) 在 org.simpleframework.xml.core.Composite.readElement(Composite.java:593) 在 org.simpleframework.xml.core.Composite.readElements(Composite.java:506) 在 org.simpleframework.xml.core .Composite.readSection(Composite.java:388)在 org.simpleframework.xml.core.Composite.readDefault(Composite.java:262) 在 org.simpleframework.xml.core.Composite .read(Composite.java:232) 在 org.simpleframework.xml.core.Composite.read(Composite.java:202) 在 org.simpleframework.xml.core.Composite.read(Composite.java:150) 在 org. simpleframework.xml.core.Traverser.read(Traverser.java:92) at org.simpleframework.xml.core.CompositeList.populate(CompositeList.java:175) at org.simpleframework.xml.core.CompositeList.read(CompositeList. java:148) 在 org.simpleframework.xml.core.Composite.readVariable(Composite.java:682) 在 org.simpleframework.xml.core.Composite.readInstance(Composite.java:635) 在 org.simpleframework.xml.core .Composite.readUnion(Composite.java:610) 在 org。simpleframework.xml.core.Composite.readElement(Composite.java:593) at org.simpleframework.xml.core.Composite.readElements(Composite.java:506) at org.simpleframework.xml.core.Composite.readSection(Composite. java:388) 在 org.simpleframework.xml.core.Composite.read(Composite.java:367) 在 org.simpleframework.xml.core.Composite.readDefault(Composite.java:262) 在 org.simpleframework.xml.core .Composite.read(Composite.java:232) 在 org.simpleframework.xml.core.Composite.read(Composite.java:202) 在 org.simpleframework.xml.core.Composite.read(Composite.java:150) 在org.simpleframework.xml.core.Traverser.read(Traverser.java:92) 在 org.simpleframework.xml.core.Persister.read(Persister.java:632) 在 org.simpleframework.xml.core.Persister.read( Persister.java:613) 在 org.simpleframework.xml.core.Persister。在 org.simpleframework.xml.core.Persister.read(Persister.java:528) 在 org.simpleframework.read(Persister.java:550) 在 org.simpleframework.xml.core.Persister.read(Persister.java:550) 读取(Persister.java:591) .xml.core.Persister.read(Persister.java:433) 在 com.mlsm.implementation.MLSMImpl.parseMLSM(MLSMImpl.java:150) 在 com.mlsm.implementation.MLSMImpl.executeInternal(MLSMImpl.java:84) 在com.mlsm.implementation.MLSMImpl.parseAndExecute(MLSMImpl.java:182) 在 com.mlsm.implementation.MLSMImpl.start(MLSMImpl.java:65) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect。 NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.felix.dependencymanager.ServiceImpl.invoke(ServiceImpl.java:484) 在 org.apache.felix.dependencymanager.ServiceImpl.access$000(ServiceImpl.java:44) 在 org.apache.felix 的 org.apache.felix.dependencymanager.ServiceImpl.activateService(ServiceImpl.java:441)。 dependencymanager.ServiceImpl$3.run(ServiceImpl.java:125) at org.apache.felix.dependencymanager.SerialExecutor$1.run(SerialExecutor.java:47) at org.apache.felix.dependencymanager.SerialExecutor.scheduleNext(SerialExecutor.java: 84) 在 org.apache.felix.dependencymanager.SerialExecutor.execute(SerialExecutor.java:68) 在 org.apache.felix.dependencymanager.ServiceImpl.calculateStateChanges(ServiceImpl.java:147) 在 org.apache.felix.dependencymanager.ServiceImpl .start(ServiceImpl.java:257) 在 org.apache.felix.dependencymanager.DependencyManager.add(DependencyManager.java:56) 在 com.mlsm.implementation。Activator.init(Activator.java:24) 在 org.apache.felix.dependencymanager.DependencyActivatorBase.start(DependencyActivatorBase.java:76) 在 org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)在 org.apache.felix.framework.Felix.activateBundle(Felix.java:2152) 在 org.apache.felix.framework.Felix.startBundle(Felix.java:2070) 在 org.apache.felix.framework.BundleImpl.start (BundleImpl.java:976) 在 aQute.launcher.Launcher.update(Launcher.java:422) 在 aQute.launcher.Launcher.activate(Launcher.java:346) 在 aQute.launcher.Launcher.run(Launcher.java: 235)在aQute.launcher.Launcher.main(Launcher.java:92)SecureAction.startActivator(SecureAction.java:645) at org.apache.felix.framework.Felix.activateBundle(Felix.java:2152) at org.apache.felix.framework.Felix.startBundle(Felix.java:2070) at org .apache.felix.framework.BundleImpl.start(BundleImpl.java:976) 在 aQute.launcher.Launcher.update(Launcher.java:422) 在 aQute.launcher.Launcher.activate(Launcher.java:346)。 launcher.Launcher.run(Launcher.java:235) 在 aQute.launcher.Launcher.main(Launcher.java:92)SecureAction.startActivator(SecureAction.java:645) at org.apache.felix.framework.Felix.activateBundle(Felix.java:2152) at org.apache.felix.framework.Felix.startBundle(Felix.java:2070) at org .apache.felix.framework.BundleImpl.start(BundleImpl.java:976) 在 aQute.launcher.Launcher.update(Launcher.java:422) 在 aQute.launcher.Launcher.activate(Launcher.java:346)。 launcher.Launcher.run(Launcher.java:235) 在 aQute.launcher.Launcher.main(Launcher.java:92)第346章)在aQute.launcher.Launcher.run(Launcher.java:235)第346章)在aQute.launcher.Launcher.run(Launcher.java:235)
这就是在 service start() 中所做的
public void start() {
Serializer serializer = new Persister();
File result = new File(filePath);
serializer.read(<ClassToSerializeTo>.class, result);
}
还有一点需要注意的是,这段代码在 osgi 框架之外也能正常工作。让我知道更多信息是否有助于调试问题。
我也读了这篇文章,但仍然对手头的问题感到困惑。
编辑:所以我发现只有当 xml 有一个看起来像这样的元素时才会发生这种情况
<TestElement class="PackageName.Classname">
有任何想法吗?
谢谢