【问题标题】:Creating custom handler that include several third party library for wso2 api manager为 wso2 api manager 创建包含多个第三方库的自定义处理程序
【发布时间】:2016-04-25 10:44:07
【问题描述】:

我需要创建自定义处理程序以包含在 WSO2 api 管理器中(我使用版本 1.10.0)。我的自定义处理程序依赖于 org.apache.httpcomponents.httpasyncclient-4.1 包中的 org.apache.http.impl.nio.client.CloseableHttpAsyncClient 类。此依赖还包括一些第三方库,例如 org.apache.httpcomponents.httpclient-4.4.1。

根据这条指令https://docs.wso2.com/display/AM1100/Writing+Custom+Handlers,jar 需要放在 /repository/components/lib 中。所以我把我的自定义处理程序 jar 和它的所有依赖 jar 文件放在一起。

但是当我重新启动 wso2am 时,我得到了一些类未找到异常。

titlement.internal.SchemaBuilder}
TID: [-1234] [] [2016-04-25 17:14:28,659] FATAL {org.wso2.carbon.mediation.initializer.ServiceBusInitializer} -  Failed to initialize ESB due to a fatal error {org.wso2.carbon.mediation.initializer.ServiceBusInitializer}
java.lang.NoClassDefFoundError: org/apache/http/conn/util/PublicSuffixMatcherLoader
       at org.apache.http.impl.nio.client.HttpAsyncClientBuilder.build(HttpAsyncClientBuilder.java:642)
       at id.co.telkom.dds.oam.wso2am.handler.api.client.BillingAPIClient.<init>(BillingAPIClient.java:28)
       at id.co.telkom.dds.oam.wso2am.handler.BillingHandler.<init>(BillingHandler.java:26)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
       at java.lang.Class.newInstance(Class.java:442)
       at org.apache.synapse.config.xml.rest.APIFactory.defineHandler(APIFactory.java:130)
       at org.apache.synapse.config.xml.rest.APIFactory.createAPI(APIFactory.java:101)

是因为不知何故该类已经包含在 WSO2 OSGI 依赖项中吗?

创建包含多个第三方库的附加 jar 文件的推荐方法是什么,以便可以安全地包含在 wso2 api 管理器中而不会出现版本冲突问题。我应该创建一个 OSGI 包,在包中包含所有第三个库,以便只有我的自定义处理程序类可以看到它吗?

【问题讨论】:

    标签: wso2 wso2-am


    【解决方案1】:

    是因为不知何故该类已包含在 WSO2 OSGI 中 依赖?

    不,API Manager 在运行时找不到 JAR。你得到java.lang.NoClassDefFoundError: org/apache/http/conn/util/PublicSuffixMatcherLoader

    您需要将该自定义处理程序的所有依赖项 JAR 添加到 &lt;APIM_HOME&gt;/repository/components/lib 目录。

    此外,您可以在以下目录中检查系统中现有的 JAR

    <APIM_HOME>/repository/components/plugins
    

    【讨论】:

    • 实际上,我已经将我所有的依赖 jar 包含到了该文件夹中。这就是为什么我感到困惑。我的想法是,我的自定义处理程序所依赖的第三方库是已包含在 wso2 中的第三方库的较新版本,因此当 wso2 看到我的第三方库时,它忽略了它,从我的第三方库不可用。有没有可能出现这种情况?
    • 是的,这是可能的。
    • 如果是这个原因,那我该怎么解决呢?我还没有了解 osgi,但将它作为 osgi 帮助创建它吗?
    猜你喜欢
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多