为wso2 api manager创建包含多个第三方库的自定义处理程序

时间:2016-04-25 10:44:07

标签: wso2 wso2-am

我需要创建自定义Handler以包含在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包,包括包中的所有第三个库,以便只有我的自定义处理程序类可以看到它吗?

1 个答案:

答案 0 :(得分:2)

  

是因为某种程度上该类已包含在WSO2 OSGI中   依赖

不,API Manager无法在运行时中找到JAR。您将获得java.lang.NoClassDefFoundError: org/apache/http/conn/util/PublicSuffixMatcherLoader

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

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

<APIM_HOME>/repository/components/plugins