наличие триггеров пакетов XMLRP C -client и XMLRP C -server в среде OSGi использует нарушение ограничения из-за разделения пакетов - PullRequest
1 голос
/ 05 февраля 2020

У меня есть пара сред 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 предназначен для исправления расщепленных пакетов, но я не могу найти столько информации об этом, потому что общий консенсус - «не разбивать пакеты».

Как мне исправить эту проблему с помощью сплит-пакета?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...