#java #osgi #equinox
#java #osgi #равноденствие
Вопрос:
Мое приложение запускает ошибку NoClassDefFoundError, которая ищет org.w3c.dom.Класс узла, когда он работает в автономном режиме поверх Equinox.
Предоставляется ли этот класс фреймворком? В командной строке я запустил команду getprop, и этот класс указан в свойстве org.osgi.framework.system.packages .
Я проверил тег импорта из файла МАНИФЕСТА и все в порядке.
Есть идеи? Что я делаю не так?
Здесь МАНИФЕСТ:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Protocol-sip-ds
Bundle-SymbolicName: es.umu.imsclient.protocol-sip-ds
Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Description: A bundle that implements the Protocol Provider package over SIP.
Import-Package: EDU.oswego.cs.dl.util.concurrent,
es.umu.mvia.imsclient.configuration.event,
es.umu.mvia.imsclient.configuration.service,
es.umu.mvia.imsclient.netaddr.service,
es.umu.mvia.imsclient.service.protocol,
es.umu.mvia.imsclient.service.protocol.event,
es.umu.mvia.imsclient.util,
javax.net.ssl,
javax.xml.transform,
org.osgi.framework,
org.osgi.service.component;version="1.1.0",
org.osgi.service.event,
org.osgi.util.tracker,
org.w3c.dom
Bundle-Vendor: ims-osgi-client
Bundle-ClassPath: .,
lib/JainSipRi1.2.jar,
lib/JainSipApi1.2.jar,
lib/log4j-1.2.15.jar
Service-Component: OSGI-INF/component.xml
Вывод пакета [id]:
osgi> bundle 13
es.umu.imsclient.protocol-sip-ds_1.0.0.qualifier [13]
Id=13, Status=ACTIVE Data Root=C:UsersgsitDesktopoasisconfigurationorg.eclipse.osgibundles13data
Registered Services
{es.umu.mvia.imsclient.service.protocol.ProtocolProviderFactory}= {component.name=protocol-sip-ds, component.id=7, service.id=42}
Services in use:
{org.osgi.service.event.EventAdmin}={component.name=org.eclipse.equinox.event, component.id=11, service.id=41}
{es.umu.mvia.imsclient.configuration.service.ConfigurationService}= {component.name=es.umu.mvia.imsclient.configuration, component.id=0, service.id=35}
{es.umu.mvia.imsclient.netaddr.service.NetworkAddressManagerService}= {component.name=es.umu.mvia.imsclient.netaddr, component.id=6, service.id=36}
No exported packages
Imported packages
EDU.oswego.cs.dl.util.concurrent; version="0.0.0"<Concurrent_1.0.0 [16]>
es.umu.mvia.imsclient.configuration.event; version="0.0.0" <es.umu.imsclient.configuration_1.2.0 [5]>
es.umu.mvia.imsclient.configuration.service; version="0.0.0" <es.umu.imsclient.configuration_1.2.0 [5]>
es.umu.mvia.imsclient.netaddr.service; version="0.0.0" <es.umu.imsclient.netaddr_1.2.0 [11]>
es.umu.mvia.imsclient.service.protocol; version="0.0.0" <es.umu.imsclient.protocol_1.2.0 [12]>
es.umu.mvia.imsclient.service.protocol.event; version="0.0.0"<es.umu.imsclient.protocol_1.2.0 [12]>
es.umu.mvia.imsclient.util; version="0.0.0"<es.umu.imsclient.util_1.2.0 [14]>
javax.net.ssl; version="0.0.0"<org.eclipse.osgi_3.6.2.R36x_v20110210 [0]>
javax.xml.transform; version="0.0.0"<org.eclipse.osgi_3.6.2.R36x_v20110210 [0]>
org.osgi.framework; version="1.5.0"<org.eclipse.osgi_3.6.2.R36x_v20110210 [0]>
org.osgi.service.component; version="1.1.0" <org.eclipse.osgi.services_3.2.100.v20100503 [28]>
org.osgi.service.event; version="1.2.0"<org.eclipse.osgi.services_3.2.100.v20100503 [28]>
org.osgi.util.tracker; version="1.4.2"<org.eclipse.osgi_3.6.2.R36x_v20110210 [0]>
org.w3c.dom; version="0.0.0"<org.eclipse.osgi_3.6.2.R36x_v20110210 [0]>
No fragment bundles
Named class space
es.umu.imsclient.protocol-sip-ds; bundle-version="1.0.0.qualifier"[provided]
No required bundles
И вывод пакета 0 :
...
Exported packages
org.eclipse.osgi.event; version="1.0.0"[exported]
org.eclipse.osgi.framework.console; version="1.1.0"[exported]
org.eclipse.osgi.framework.eventmgr; version="1.2.0"[exported]
org.eclipse.osgi.framework.log; version="1.0.0"[exported]
org.eclipse.osgi.launch; version="1.0.0"[exported]
org.eclipse.osgi.service.datalocation; version="1.3.0"[exported]
org.eclipse.osgi.service.debug; version="1.2.0"[exported]
org.eclipse.osgi.service.environment; version="1.3.0"[exported]
org.eclipse.osgi.service.localization; version="1.1.0"[exported]
org.eclipse.osgi.service.pluginconversion; version="1.0.0"[exported]
org.eclipse.osgi.service.resolver; version="1.4.0"[exported]
org.eclipse.osgi.service.runnable; version="1.1.0"[exported]
org.eclipse.osgi.service.security; version="1.0.0"[exported]
org.eclipse.osgi.service.urlconversion; version="1.0.0"[exported]
org.eclipse.osgi.signedcontent; version="1.0.0"[exported]
org.eclipse.osgi.storagemanager; version="1.0.0"[exported]
org.eclipse.osgi.util; version="1.1.0"[exported]
org.osgi.framework; version="1.5.0"[exported]
org.osgi.framework.launch; version="1.0.0"[exported]
org.osgi.framework.hooks.service; version="1.0.0"[exported]
org.osgi.service.condpermadmin; version="1.1.0"[exported]
org.osgi.service.framework; version="1.0.0"[exported]
org.osgi.service.packageadmin; version="1.2.0"[exported]
org.osgi.service.permissionadmin; version="1.2.0"[exported]
org.osgi.service.startlevel; version="1.1.0"[exported]
org.osgi.service.url; version="1.0.0"[exported]
org.osgi.util.tracker; version="1.4.0"[exported]
org.osgi.util.tracker; version="1.4.2"[exported]
org.eclipse.core.runtime.adaptor; version="0.0.0"[exported]
org.eclipse.core.runtime.internal.adaptor; version="0.0.0"[exported]
org.eclipse.core.runtime.internal.stats; version="0.0.0"[exported]
org.eclipse.osgi.baseadaptor; version="0.0.0"[exported]
org.eclipse.osgi.baseadaptor.bundlefile; version="0.0.0"[exported]
org.eclipse.osgi.baseadaptor.hooks; version="0.0.0"[exported]
org.eclipse.osgi.baseadaptor.loader; version="0.0.0"[exported]
org.eclipse.osgi.framework.adaptor; version="0.0.0"[exported]
org.eclipse.osgi.framework.debug; version="0.0.0"[exported]
org.eclipse.osgi.framework.internal.core; version="0.0.0"[exported]
org.eclipse.osgi.framework.internal.protocol; version="0.0.0"[exported]
org.eclipse.osgi.framework.internal.protocol.bundleentry; version="0.0.0"[exported]
org.eclipse.osgi.framework.internal.protocol.bundleresource; version="0.0.0" [exported]
org.eclipse.osgi.framework.internal.protocol.reference; version="0.0.0"[exported]
org.eclipse.osgi.framework.internal.reliablefile; version="0.0.0"[exported]
org.eclipse.osgi.framework.util; version="0.0.0"[exported]
org.eclipse.osgi.internal.baseadaptor; version="0.0.0"[exported]
org.eclipse.osgi.internal.composite; version="0.0.0"[exported]
org.eclipse.osgi.internal.loader; version="0.0.0"[exported]
org.eclipse.osgi.internal.loader.buddy; version="0.0.0"[exported]
org.eclipse.osgi.internal.module; version="0.0.0"[exported]
org.eclipse.osgi.internal.profile; version="0.0.0"[exported]
org.eclipse.osgi.internal.resolver; version="0.0.0"[exported]
org.eclipse.osgi.internal.serviceregistry; version="0.0.0"[exported]
org.eclipse.osgi.internal.permadmin; version="0.0.0"[exported]
org.eclipse.osgi.internal.provisional.service.security; version="1.0.0"[exported]
org.eclipse.osgi.internal.provisional.verifier; version="0.0.0"[exported]
org.eclipse.osgi.internal.service.security; version="0.0.0"[exported]
org.eclipse.osgi.internal.signedcontent; version="0.0.0"[exported]
org.eclipse.osgi.service.internal.composite; version="0.0.0"[exported]
javax.accessibility; version="0.0.0"[exported]
javax.activation; version="0.0.0"[exported]
javax.activity; version="0.0.0"[exported]
javax.annotation; version="0.0.0"[exported]
javax.annotation.processing; version="0.0.0"[exported]
javax.crypto; version="0.0.0"[exported]
javax.crypto.interfaces; version="0.0.0"[exported]
javax.crypto.spec; version="0.0.0"[exported]
javax.imageio; version="0.0.0"[exported]
javax.imageio.event; version="0.0.0"[exported]
javax.imageio.metadata; version="0.0.0"[exported]
javax.imageio.plugins.bmp; version="0.0.0"[exported]
javax.imageio.plugins.jpeg; version="0.0.0"[exported]
javax.imageio.spi; version="0.0.0"[exported]
javax.imageio.stream; version="0.0.0"[exported]
javax.jws; version="0.0.0"[exported]
javax.jws.soap; version="0.0.0"[exported]
javax.lang.model; version="0.0.0"[exported]
javax.lang.model.element; version="0.0.0"[exported]
javax.lang.model.type; version="0.0.0"[exported]
javax.lang.model.util; version="0.0.0"[exported]
javax.management; version="0.0.0"[exported]
javax.management.loading; version="0.0.0"[exported]
javax.management.modelmbean; version="0.0.0"[exported]
javax.management.monitor; version="0.0.0"[exported]
javax.management.openmbean; version="0.0.0"[exported]
javax.management.relation; version="0.0.0"[exported]
javax.management.remote; version="0.0.0"[exported]
javax.management.remote.rmi; version="0.0.0"[exported]
javax.management.timer; version="0.0.0"[exported]
javax.naming; version="0.0.0"[exported]
javax.naming.directory; version="0.0.0"[exported]
javax.naming.event; version="0.0.0"[exported]
javax.naming.ldap; version="0.0.0"[exported]
javax.naming.spi; version="0.0.0"[exported]
javax.net; version="0.0.0"[exported]
javax.net.ssl; version="0.0.0"[exported]
javax.print; version="0.0.0"[exported]
javax.print.attribute; version="0.0.0"[exported]
javax.print.attribute.standard; version="0.0.0"[exported]
javax.print.event; version="0.0.0"[exported]
javax.rmi; version="0.0.0"[exported]
javax.rmi.CORBA; version="0.0.0"[exported]
javax.rmi.ssl; version="0.0.0"[exported]
javax.script; version="0.0.0"[exported]
javax.security.auth; version="0.0.0"[exported]
javax.security.auth.callback; version="0.0.0"[exported]
javax.security.auth.kerberos; version="0.0.0"[exported]
javax.security.auth.login; version="0.0.0"[exported]
javax.security.auth.spi; version="0.0.0"[exported]
javax.security.auth.x500; version="0.0.0"[exported]
javax.security.cert; version="0.0.0"[exported]
javax.security.sasl; version="0.0.0"[exported]
javax.sound.midi; version="0.0.0"[exported]
javax.sound.midi.spi; version="0.0.0"[exported]
javax.sound.sampled; version="0.0.0"[exported]
javax.sound.sampled.spi; version="0.0.0"[exported]
javax.sql; version="0.0.0"[exported]
javax.sql.rowset; version="0.0.0"[exported]
javax.sql.rowset.serial; version="0.0.0"[exported]
javax.sql.rowset.spi; version="0.0.0"[exported]
javax.swing; version="0.0.0"[exported]
javax.swing.border; version="0.0.0"[exported]
javax.swing.colorchooser; version="0.0.0"[exported]
javax.swing.event; version="0.0.0"[exported]
javax.swing.filechooser; version="0.0.0"[exported]
javax.swing.plaf; version="0.0.0"[exported]
javax.swing.plaf.basic; version="0.0.0"[exported]
javax.swing.plaf.metal; version="0.0.0"[exported]
javax.swing.plaf.multi; version="0.0.0"[exported]
javax.swing.plaf.synth; version="0.0.0"[exported]
javax.swing.table; version="0.0.0"[exported]
javax.swing.text; version="0.0.0"[exported]
javax.swing.text.html; version="0.0.0"[exported]
javax.swing.text.html.parser; version="0.0.0"[exported]
javax.swing.text.rtf; version="0.0.0"[exported]
javax.swing.tree; version="0.0.0"[exported]
javax.swing.undo; version="0.0.0"[exported]
javax.tools; version="0.0.0"[exported]
javax.transaction; version="0.0.0"[exported]
javax.transaction.xa; version="0.0.0"[exported]
javax.xml; version="0.0.0"[exported]
javax.xml.bind; version="0.0.0"[exported]
javax.xml.bind.annotation; version="0.0.0"[exported]
javax.xml.bind.annotation.adapters; version="0.0.0"[exported]
javax.xml.bind.attachment; version="0.0.0"[exported]
javax.xml.bind.helpers; version="0.0.0"[exported]
javax.xml.bind.util; version="0.0.0"[exported]
javax.xml.crypto; version="0.0.0"[exported]
javax.xml.crypto.dom; version="0.0.0"[exported]
javax.xml.crypto.dsig; version="0.0.0"[exported]
javax.xml.crypto.dsig.dom; version="0.0.0"[exported]
javax.xml.crypto.dsig.keyinfo; version="0.0.0"[exported]
javax.xml.crypto.dsig.spec; version="0.0.0"[exported]
javax.xml.datatype; version="0.0.0"[exported]
javax.xml.namespace; version="0.0.0"[exported]
javax.xml.parsers; version="0.0.0"[exported]
javax.xml.soap; version="0.0.0"[exported]
javax.xml.stream; version="0.0.0"[exported]
javax.xml.stream.events; version="0.0.0"[exported]
javax.xml.stream.util; version="0.0.0"[exported]
javax.xml.transform; version="0.0.0"[exported]
javax.xml.transform.dom; version="0.0.0"[exported]
javax.xml.transform.sax; version="0.0.0"[exported]
javax.xml.transform.stax; version="0.0.0"[exported]
javax.xml.transform.stream; version="0.0.0"[exported]
javax.xml.validation; version="0.0.0"[exported]
javax.xml.ws; version="0.0.0"[exported]
javax.xml.ws.handler; version="0.0.0"[exported]
javax.xml.ws.handler.soap; version="0.0.0"[exported]
javax.xml.ws.http; version="0.0.0"[exported]
javax.xml.ws.soap; version="0.0.0"[exported]
javax.xml.ws.spi; version="0.0.0"[exported]
javax.xml.ws.wsaddressing; version="0.0.0"[exported]
javax.xml.xpath; version="0.0.0"[exported]
org.ietf.jgss; version="0.0.0"[exported]
org.omg.CORBA; version="0.0.0"[exported]
org.omg.CORBA_2_3; version="0.0.0"[exported]
org.omg.CORBA_2_3.portable; version="0.0.0"[exported]
org.omg.CORBA.DynAnyPackage; version="0.0.0"[exported]
org.omg.CORBA.ORBPackage; version="0.0.0"[exported]
org.omg.CORBA.portable; version="0.0.0"[exported]
org.omg.CORBA.TypeCodePackage; version="0.0.0"[exported]
org.omg.CosNaming; version="0.0.0"[exported]
org.omg.CosNaming.NamingContextExtPackage; version="0.0.0"[exported]
org.omg.CosNaming.NamingContextPackage; version="0.0.0"[exported]
org.omg.Dynamic; version="0.0.0"[exported]
org.omg.DynamicAny; version="0.0.0"[exported]
org.omg.DynamicAny.DynAnyFactoryPackage; version="0.0.0"[exported]
org.omg.DynamicAny.DynAnyPackage; version="0.0.0"[exported]
org.omg.IOP; version="0.0.0"[exported]
org.omg.IOP.CodecFactoryPackage; version="0.0.0"[exported]
org.omg.IOP.CodecPackage; version="0.0.0"[exported]
org.omg.Messaging; version="0.0.0"[exported]
org.omg.PortableInterceptor; version="0.0.0"[exported]
org.omg.PortableInterceptor.ORBInitInfoPackage; version="0.0.0"[exported]
org.omg.PortableServer; version="0.0.0"[exported]
org.omg.PortableServer.CurrentPackage; version="0.0.0"[exported]
org.omg.PortableServer.POAManagerPackage; version="0.0.0"[exported]
org.omg.PortableServer.POAPackage; version="0.0.0"[exported]
org.omg.PortableServer.portable; version="0.0.0"[exported]
org.omg.PortableServer.ServantLocatorPackage; version="0.0.0"[exported]
org.omg.SendingContext; version="0.0.0"[exported]
org.omg.stub.java.rmi; version="0.0.0"[exported]
org.w3c.dom; version="0.0.0"[exported]
org.w3c.dom.bootstrap; version="0.0.0"[exported]
org.w3c.dom.css; version="0.0.0"[exported]
org.w3c.dom.events; version="0.0.0"[exported]
org.w3c.dom.html; version="0.0.0"[exported]
org.w3c.dom.ls; version="0.0.0"[exported]
org.w3c.dom.ranges; version="0.0.0"[exported]
org.w3c.dom.stylesheets; version="0.0.0"[exported]
org.w3c.dom.traversal; version="0.0.0"[exported]
org.w3c.dom.views; version="0.0.0"[exported]
org.w3c.dom.xpath; version="0.0.0"[exported]
org.xml.sax; version="0.0.0"[exported]
org.xml.sax.ext; version="0.0.0"[exported]
org.xml.sax.helpers; version="0.0.0"[exported]
No imported packages
No fragment bundles
Named class space
org.eclipse.osgi; bundle-version="3.6.2.R36x_v20110210"[provided]
No required bundles
Здесь трассировка стека:
Caused by: java.lang.NoClassDefFoundError: org/w3c/dom/Node
at es.umu.mvia.imsclient.impl.protocol.sip.OperationSetPresenceSipImpl.<init> (OperationSetPresenceSipImpl.java:150)
at es.umu.mvia.imsclient.impl.protocol.sip.ProtocolProviderServiceSipImpl.initialize(ProtocolPr oviderServiceSipImpl.java:951)
at es.umu.mvia.imsclient.impl.protocol.sip.ProtocolProviderFactorySipImpl.loadAccount(ProtocolProviderFactorySipImpl.java:222)
at es.umu.mvia.imsclient.impl.protocol.sip.ProtocolProviderFactorySipImpl.installAccount(ProtocolProviderFactorySipImpl.java:159)
at es.umu.mvia.imsclient.impl.protocol.sip.ProtocolSipDS.installAccount(ProtocolSipDS.java:103)
at es.umu.mvia.imsclient.ims.configuration.impl.IMSConfigurationServiceImpl.newAccount(IMSConfigurationServiceImpl.java:170)
at es.umu.mvia.imsclient.ims.configuration.IMSConfiguration.newAccount(IMSConfiguration.java:78 )
at es.umu.imsclient.shuttle.IMSClientShuttle.activate(IMSClientShuttle.java:33)
... 54 more
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.Node
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:506)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 62 more
Комментарии:
1. В
osgi>
приглашении, пожалуйста, введитеbundle <id>
, где <id> — числовой идентификатор этого пакета, как показано в крайнем левом столбце при вводеss
. Затем, пожалуйста, загляните в раздел «Импортированные пакеты» и вставьте вывод сюда. Я подозреваю, что кто-то, кроме системного пакета, также экспортируетorg.w3c.dom
, и это может быть его неполная копия…2. Теперь вы можете проверить, что вы просили. Я отредактировал вопрос.
3. @amoragon Импорт пакета кажется правильным, т. Е. Он поступает из системного пакета. Единственное, о чем я могу думать дальше, это то, что исключение генерируется каким-то другим пакетом, то есть не тем, детали которого вы указали выше. Возможно ли выполнить отладку именно там, откуда генерируется исключение?
4. Выходные
bundle
данные команд выглядят нормально. Пожалуйста, приложите полнуюNoClassDefFoundError
трассировку стека исключения.5. Итак, является ли класс
es.umu.mvia.imsclient.impl.protocol.sip.OperationSetPresenceSipImpl
членом пакетаes.umu.imsclient.protocol-sip-ds
?
Ответ №1:
Вы также импортировали org.w3c.dom в манифест?
Комментарии:
1. Да, вы можете увидеть приведенный выше МАНИФЕСТ.
Ответ №2:
В командной строке я запустил команду getprop, и этот класс указан в свойстве org.osgi.framework.system.packages .
Вы должны добавить пакет класса (например org.w3c.dom
), а не class ( org.w3c.dom.Node
) в свойство org.osgi.framework.system.packages
or org.osgi.framework.system.packages.extra
.
Другая идея: выполните поиск во всех ваших проектах для org.w3c.dom.Node
использования и убедитесь, что каждый пакет, использующий этот класс, импортирует свой пакет в манифест. Я предполагаю, что вы OperationSetPresenceSipImpl
используете класс из другого пакета, который также необходим org.w3c.dom.Node
. Возможно, сторонняя библиотека также использует Node
класс в другом пакете.
В чем разница между ClassNotFoundException и NoClassDefFoundError?
Комментарии:
1. Я добавил пакет org.w3c.dom в МАНИФЕСТ потребителя, чтобы получить org.w3c.dom. Класс узла. И этот пакет (org.w3c.dom) отображается в списке при запуске getprop . Итак, я полагаю, org.w3c.dom. Узел экспортируется фреймворком, не так ли?
2. Да, он экспортируется. Покажите результаты
bundle 0
иbundle <yourbundleId>
, как также предложил @Neil Bartlett.3. Я искал по всему рабочему пространству, искал
org.w3c.dom.Node
и нашел его еще в 3 пакетах, и импорт, похоже, в порядке, так же, как и этот. Есть ли способ избежать импортаorg.w3c.dom.Node
из фреймворка? Моя идея — экспортироватьorg.w3c.dom
из другого пакета.4. Если вы проверите вывод
bundle
команды для других 3 пакетов, они также показывают, что они хорошо подключены? (например, ` org.w3c.dom; version=»0.0.0″<org.eclipse.osgi_3.6.2.R36x_v20110210 [0]>`)5. Да, они также подключены к
org.eclipse.osgi_3.6.2.R36x_v20110210 [0]