У меня есть пара сред Karag OSGi, которые имеют двустороннюю связь, используя Apache XMLRP C. Раньше они работали с Apache -XMLRP C 2.0.1, но я обновляю его до Apache XMLRP C 3.1.3, который использует совершенно другую архитектуру с отдельным xmlrp c -client, xmlrp c -сервер и xmrp c -общей банок. Поскольку я использую OSGi, мне нужно использовать Apache Servicemix Bundles для xmlrp c -client и xmrp c -server, которые генерируются с интегрированным кодом xmrp c. и вот где моя проблема: OSGi выдает мне ошибки во время запуска о разделенных пакетах:
Error starting bundle 109: Uses constraint violation. Unable to resolve resource lib.util.xmlrpc [lib.util.xmlrpc [109](R 109.11)] because it is exposed to package 'org.apache.xmlrpc.common' from resources org.apache.servicemix.bundles.xmlrpc-client [org.apache.servicemix.bundles.xmlrpc-client [120](R 120.0)] and org.apache.servicemix.bundles.xmlrpc-server [org.apache.servicemix.bundles.xmlrpc-server [119](R 119.0)] via two dependency chains.
Chain 1:
lib.util.xmlrpc [lib.util.xmlrpc [109](R 109.11)]
import: (&(osgi.wiring.package=org.apache.xmlrpc.common)(version>=3.1.0)(!(version>=4.0.0)))
|
export: osgi.wiring.package: org.apache.xmlrpc.common
org.apache.servicemix.bundles.xmlrpc-client [org.apache.servicemix.bundles.xmlrpc-client [120](R 120.0)]
Chain 2:
lib.util.xmlrpc [lib.util.xmlrpc [109](R 109.11)]
import: (&(osgi.wiring.package=org.apache.xmlrpc.server)(version>=3.1.0)(!(version>=4.0.0)))
|
export: osgi.wiring.package: org.apache.xmlrpc.server; uses:=org.apache.xmlrpc.common
export: osgi.wiring.package=org.apache.xmlrpc.common
org.apache.servicemix.bundles.xmlrpc-server [org.apache.servicemix.bundles.xmlrpc-server [119](R 119.0)] Unresolved requirements: [[lib.util.xmlrpc [109](R 109.11)] osgi.wiring.package; (&(osgi.wiring.package=org.apache.xmlrpc.server)(version>=3.1.0)(!(version>=4.0.0)))]
at org.apache.karaf.shell.support.MultiException.throwIf(MultiException.java:61)
at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:69)[36:org.apache.karaf.bundle.core:4.0.7]
at org.apache.karaf.bundle.command.BundlesCommand.execute(BundlesCommand.java:54)[36:org.apache.karaf.bundle.core:4.0.7]
at org.apache.karaf.shell.impl.action.command.ActionCommand.execute(ActionCommand.java:83)[56:org.apache.karaf.shell.core:4.0.7]
at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:67)[56:org.apache.karaf.shell.core:4.0.7]
at org.apache.karaf.shell.impl.console.osgi.secured.SecuredCommand.execute(SecuredCommand.java:87)[56:org.apache.karaf.shell.core:4.0.7]
at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:480)[56:org.apache.karaf.shell.core:4.0.7]
at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:406)[56:org.apache.karaf.shell.core:4.0.7]
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)[56:org.apache.karaf.shell.core:4.0.7]
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:182)[56:org.apache.karaf.shell.core:4.0.7]
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:119)[56:org.apache.karaf.shell.core:4.0.7]
at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:94)[56:org.apache.karaf.shell.core:4.0.7]
at org.apache.karaf.shell.impl.console.ConsoleSessionImpl.run(ConsoleSessionImpl.java:274)[56:org.apache.karaf.shell.core:4.0.7]
at java.lang.Thread.run(Thread.java:748)[:1.8.0_172]
Caused by: java.lang.Exception: Error starting bundle 109: Uses constraint violation. Unable to resolve resource lib.util.xmlrpc [lib.util.xmlrpc [109](R 109.11)] because it is exposed to package 'org.apache.xmlrpc.common' from resources org.apache.servicemix.bundles.xmlrpc-client [org.apache.servicemix.bundles.xmlrpc-client [120](R 120.0)] and org.apache.servicemix.bundles.xmlrpc-server [org.apache.servicemix.bundles.xmlrpc-server [119](R 119.0)] via two dependency chains.
Chain 1:
lib.util.xmlrpc [lib.util.xmlrpc [109](R 109.11)]
import: (&(osgi.wiring.package=org.apache.xmlrpc.common)(version>=3.1.0)(!(version>=4.0.0)))
|
export: osgi.wiring.package: org.apache.xmlrpc.common
org.apache.servicemix.bundles.xmlrpc-client [org.apache.servicemix.bundles.xmlrpc-client [120](R 120.0)]
Chain 2:
lib.util.xmlrpc [lib.util.xmlrpc [109](R 109.11)]
import: (&(osgi.wiring.package=org.apache.xmlrpc.server)(version>=3.1.0)(!(version>=4.0.0)))
|
export: osgi.wiring.package: org.apache.xmlrpc.server; uses:=org.apache.xmlrpc.common
export: osgi.wiring.package=org.apache.xmlrpc.common
org.apache.servicemix.bundles.xmlrpc-server [org.apache.servicemix.bundles.xmlrpc-server [119](R 119.0)] Unresolved requirements: [[lib.util.xmlrpc [109](R 109.11)] osgi.wiring.package; (&(osgi.wiring.package=org.apache.xmlrpc.server)(version>=3.1.0)(!(version>=4.0.0)))]
at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:66)[36:org.apache.karaf.bundle.core:4.0.7]
... 12 more
Caused by: org.osgi.framework.BundleException: Uses constraint violation. Unable to resolve resource lib.util.xmlrpc [lib.util.xmlrpc [109](R 109.11)] because it is exposed to package 'org.apache.xmlrpc.common' from resources org.apache.servicemix.bundles.xmlrpc-client [org.apache.servicemix.bundles.xmlrpc-client [120](R 120.0)] and org.apache.servicemix.bundles.xmlrpc-server [org.apache.servicemix.bundles.xmlrpc-server [119](R 119.0)] via two dependency chains.
Chain 1:
lib.util.xmlrpc [lib.util.xmlrpc [109](R 109.11)]
import: (&(osgi.wiring.package=org.apache.xmlrpc.common)(version>=3.1.0)(!(version>=4.0.0)))
|
export: osgi.wiring.package: org.apache.xmlrpc.common
org.apache.servicemix.bundles.xmlrpc-client [org.apache.servicemix.bundles.xmlrpc-client [120](R 120.0)]
Chain 2:
lib.util.xmlrpc [lib.util.xmlrpc [109](R 109.11)]
import: (&(osgi.wiring.package=org.apache.xmlrpc.server)(version>=3.1.0)(!(version>=4.0.0)))
|
export: osgi.wiring.package: org.apache.xmlrpc.server; uses:=org.apache.xmlrpc.common
export: osgi.wiring.package=org.apache.xmlrpc.common
org.apache.servicemix.bundles.xmlrpc-server [org.apache.servicemix.bundles.xmlrpc-server [119](R 119.0)] Unresolved requirements: [[lib.util.xmlrpc [109](R 109.11)] osgi.wiring.package; (&(osgi.wiring.package=org.apache.xmlrpc.server)(version>=3.1.0)(!(version>=4.0.0)))]
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4111)[org.apache.felix.framework-5.4.0.jar:]
at org.apache.felix.framework.Felix.startBundle(Felix.java:2117)[org.apache.felix.framework-5.4.0.jar:]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:998)[org.apache.felix.framework-5.4.0.jar:]
at org.apache.karaf.bundle.command.Start.executeOnBundle(Start.java:38)[36:org.apache.karaf.bundle.core:4.0.7]
at org.apache.karaf.bundle.command.BundlesCommand.doExecute(BundlesCommand.java:64)[36:org.apache.karaf.bundle.core:4.0.7]
... 12 more
Это мой файл bnd_xml_rpc_bundle.bnd:
Bundle-SymbolicName: lib.util.xmlrpc
Bundle-Name: LIB XML-RPC bundle
Bundle-Version: 7.0.0
Private-Package: lib.util.xmlrpc
Export-Package: lib.util.xmlrpc
Import-Package: lib.util.logging,\
lib.util.helpers,\
lib.util.exceptions,\
org.apache.commons.codec.*,\
org.apache.commons.httpclient.*,\
javax.*;resolution:=optional,\
com.sun.*;resolution:=optional,\
*
DynamicImport-Package: product.*
Я пытался добавить ниже для файла bnd:
Require-Bundle: org. apache .servicemix.bundles.xmlrp c -server, \ org. apache .servicemix.bundles.xmlrp c - client
Однако, единственный эффект, который это имело, это то, что OSGi жалуется на другой пакет, который разделен. У меня были ошибки в базовом пакете org. apache .xmlrp c, в org. apache .xmlrp c .common (как указано выше) и в org. apache .xmlrp c .util.
Я не уверен, как это исправить. Согласно ресурсам, которые я нашел, оператор Require-Bundle предназначен для исправления расщепленных пакетов, но я не могу найти столько информации об этом, потому что общий консенсус - «не разбивать пакеты».
Как мне исправить эту проблему с помощью сплит-пакета?