启动 OSGi 模块 httpclient-osgi-4.5.3.jar 时出现 Liferay SAXException
Posted
技术标签:
【中文标题】启动 OSGi 模块 httpclient-osgi-4.5.3.jar 时出现 Liferay SAXException【英文标题】:Liferay SAXException when starting OSGi module httpclient-osgi-4.5.3.jar 【发布时间】:2018-01-04 02:14:13 【问题描述】:在 Liferay 7 (DXP sp4) 中,我需要安装这些 OSGi 模块:
https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient-osgi/4.5.3https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore-osgi/4.4.6
所以,我下载了它们,将httpcore-osgi-4.4.6.jar
放入deploy/
,它成功启动,如在 Gogo Shell 中所见。然后我将httpclient-osgi-4.5.3.jar
放入deploy/
,然后……
ERROR [fileinstall-/home/nico/liferay/osgi/modules][org_eclipse_equinox_metatype:97] Unable to parse metadata XML at "bundleentry://540.fwk517213600/OSGI-INF/metatype/metatype.properties" for bundle ID "540" with symbolic name "org.apache.httpcomponents.httpclient".
org.xml.sax.SAXException: Fatal Error: URI=null Line=1: Content is not allowed in prolog.
at org.eclipse.equinox.metatype.impl.DataParser$MyErrorHandler.fatalError(DataParser.java:856)
我不知道这个 metatype.properties
文件是什么,也不知道 Equinox 为何尝试将其解析为 XML。
这个 JAR 不是标准的 OSGi 模块吗? 或者 Liferay 是否需要某种不同的 OSGi 模块? 是我的配置有问题吗? (新安装) 我应该忽略这个错误吗?
最令人难以置信的是模块仍然启动:
INFO [fileinstall-/home/nico/liferay/osgi/modules][BundleStartStopLogger:35] STARTED org.apache.httpcomponents.httpclient_4.5.3 [540]
【问题讨论】:
有几个关于这个错误的报告,例如***.com/questions/5138696/… 和 ***.com/questions/3030903/…。这对这个下载的组件没有帮助,但似乎提出有关包装的问题似乎是合理的。在部署过程中没有发生任何特定于 Liferay 的事情,正如您在堆栈跟踪中看到的那样,它是由 equinox 部署的。 @OlafKock:我在issues.apache.org/jira/browse/HTTPCLIENT-1862 提交了一个问题,感谢您的反馈! @OlafKock:该问题已以Won't fix
关闭,他们认为问题出在 OSGi 容器或 Apache Felix maven-bundle-plugin 上。
我知道这是一个旧的了,我们收到了这个错误信息。如果您更新 liferay 7.2,您可以使用具有本地 http 客户端的 JDK11。
在 Equinox 项目 bugs.eclipse.org/bugs/show_bug.cgi?id=551228987654326@ 开票
【参考方案1】:
问题似乎根源于MetaTypeProviderImpl.java:91。该类正在加载所有 (*) 元数据文件并将它们作为 XML 读取。
【讨论】:
以上是关于启动 OSGi 模块 httpclient-osgi-4.5.3.jar 时出现 Liferay SAXException的主要内容,如果未能解决你的问题,请参考以下文章
如何将特定的 java 模块嵌入到 OSGi 包中?甚至可能吗?
OSGi 捆绑包未启动:缺少要求 osgi.wiring.package; > &(osgi.wiring.package=org.apache.felix.dm)