[英]Conflict library when deploy custom mediator in WSO2 ESB
I used WSO2 EI 6.4.0. 我使用了WSO2 EI 6.4.0。 I need to write a custom mediator used an external jar, called JAVA_SDK_VXP-2.0.3.jar (com.vpcp.services package).
我需要编写一个使用外部JAR的自定义调解器,称为JAVA_SDK_VXP-2.0.3.jar(com.vpcp.services程序包)。
package com.quangnam.example;
import org.apache.synapse.MessageContext;
import org.apache.synapse.mediators.AbstractMediator;
import com.vpcp.services.AgencyServiceImp;
import com.vpcp.services.model.GetAgenciesResult;
public class AgenciesListMediator extends AbstractMediator {
public boolean mediate(MessageContext context) {
getAgenciesList(context);
return true;
}
private void getAgenciesList(MessageContext context) {
AgencyServiceImp agencyService = new AgencyServiceImp();
String jsonHeader = "{}";
GetAgenciesResult getAgenciesResult = agencyService.getAgenciesList(jsonHeader);
context.setProperty("agenciesResult", getAgenciesResult.getAgencies());
}
}
The JAVA_SDK_VXP-2.0.3.jar needs to call httpclient-4.5.6.jar. JAVA_SDK_VXP-2.0.3.jar需要调用httpclient-4.5.6.jar。 I have a jar as httpclient_4.3.6.wso2v2.jar in {EI-HOME}/wso2/components/plugins.
我在{EI-HOME} / wso2 / components / plugins中有一个名为httpclient_4.3.6.wso2v2.jar的jar。 This jar comes with WSO2 EI.
该罐子随附WSO2 EI。
I deployed custom mediator and copy httpclient-4.5.6.jar, JAVA_SDK_VXP-2.0.3.jar to {EI-HOME}/lib folder. 我部署了自定义中介程序,并将httpclient-4.5.6.jar和JAVA_SDK_VXP-2.0.3.jar复制到{EI-HOME} / lib文件夹中。 Everything is OK, but when I called the API used the custom mediator, there is an exception:
一切正常,但是当我使用自定义介体调用API时,有一个例外:
java.lang.NoSuchMethodError: org.apache.http.impl.conn.PoolingHttpClientConnectionManager.setValidateAfterInactivity(I)V
at com.vpcp.services.HttpClientFactory.getHttpsClient(HttpClientFactory.java:180)
at com.vpcp.services.HttpConnection.sendPost(HttpConnection.java:91)
at com.vpcp.services.HttpConnection.execute(HttpConnection.java:272)
at com.vpcp.services.VnptService.execute(VnptService.java:110)
at com.vpcp.services.AgencyServiceImp.getAgenciesList(AgencyServiceImp.java:37)
at com.quangnam.example.AgenciesListMediator.getAgenciesList(AgenciesListMediator.java:24)
at com.quangnam.example.AgenciesListMediator.mediate(AgenciesListMediator.java:16)
at org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:94)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:108)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:70)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:158)
at org.apache.synapse.rest.Resource.process(Resource.java:364)
at org.apache.synapse.rest.API.process(API.java:399)
at org.apache.synapse.rest.RESTRequestHandler.apiProcess(RESTRequestHandler.java:135)
at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:113)
at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:71)
at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:303)
at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:92)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:337)
at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:158)
at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
I started EI server with -DosgiConsole. 我使用-DosgiConsole启动了EI服务器。 As the result, I think the JAVA_SDK_VXP-2.0.3.jar called httpclient_4.3.6.wso2v2 not httpclient-4.5.6.jar, so there is no method setValidateAfterInactivity()
结果,我认为名为httpclient_4.3.6.wso2v2的JAVA_SDK_VXP-2.0.3.jar不是httpclient-4.5.6.jar,因此没有方法setValidateAfterInactivity()
osgi> packages org.apache.http.impl.conn
org.apache.http.impl.conn; version="4.3.6.wso2v2"<httpclient_4.3.6.wso2v2 [78]>
JAVA_SDK_VXP_2.0.3_1.0.0 [4] imports
google-http-client_1.20.0.wso2v1 [68] imports
solr_5.2.1.wso2v1 [598] imports
spring.framework_3.2.9.wso2v1 [600] imports
tomcat_7.0.85.wso2v1 [612] imports
org.apache.http.impl.conn; version="0.0.0"<httpclient_4.2.5.wso2v1_1.0.0 [79]>
org.apache.http.impl.conn; version="0.0.0"<httpclient_4.5.6_1.0.0 [80]>
org.apache.http.impl.conn; version="0.0.0"<httpclient_osgi_4.5.6_1.0.0 [81]>
I go to the {EI-HOME}/dropins folder to edit bundle of my external libraries. 我转到{EI-HOME} / dropins文件夹来编辑我的外部库包。
Edit MANIFEST.MF of httpclient_4.5.6_1.0.0.jar to 将httpclient_4.5.6_1.0.0.jar的MANIFEST.MF编辑为
Manifest-Version: 1.0
Bundle-SymbolicName: httpclient_4.5.6
Export-Package: org.apache.http.auth,org.apache.http.cookie,org.apache
.http.cookie.params,org.apache.http.client,org.apache.http.client.met
hods,org.apache.http.client.params,org.apache.http.client.utils,org.a
pache.http.client.protocol,org.apache.http.conn,org.apache.http.conn.
routing,org.apache.http.conn.params,org.apache.http.conn.socket,org.a
pache.http.conn.ssl,org.apache.http.impl.auth,org.apache.http.impl.co
okie,org.apache.http.impl.client,org.apache.http.impl.execchain,org.a
pache.http.impl.conn;version="4.5.6",org.apache.http.client.config,org.apache.http.cl
ient.entity,org.apache.http.conn.util,org.apache.http.impl.conn.tsccm
,org.apache.http.conn.scheme,org.apache.http.auth.params
Bundle-Name: httpclient_4.5.6
Bundle-Version: 1.0.0
Bundle-ClassPath: .,httpclient-4.5.6.jar
Bundle-ManifestVersion: 2
DynamicImport-Package: *
Edit MANIFEST.MF of JAVA_SDK_VXP_2.0.3_1.0.0.jar to 将JAVA_SDK_VXP_2.0.3_1.0.0.jar的MANIFEST.MF编辑为
Manifest-Version: 1.0
Bundle-SymbolicName: JAVA_SDK_VXP_2.0.3
Export-Package: com.vpcp.services,com.vpcp.services.exception,com.vpcp
.services.model,com.vpcp.services.request,com.vpcp.services.utils
Bundle-Name: JAVA_SDK_VXP_2.0.3
Bundle-Version: 1.0.0
Bundle-ClassPath: .,JAVA_SDK_VXP-2.0.3.jar
Bundle-ManifestVersion: 2
Import-Package: org.apache.http.impl.conn;version="4.5.6"
DynamicImport-Package: *
Result: 结果:
osgi> update 80
osgi> update 4
osgi> packages org.apache.http.impl.conn
org.apache.http.impl.conn; version="4.3.6.wso2v2"<httpclient_4.3.6.wso2v2 [78]>
google-http-client_1.20.0.wso2v1 [68] imports
solr_5.2.1.wso2v1 [598] imports
spring.framework_3.2.9.wso2v1 [600] imports
tomcat_7.0.85.wso2v1 [612] imports
org.apache.http.impl.conn; version="0.0.0"<httpclient_4.2.5.wso2v1_1.0.0 [79]>
org.apache.http.impl.conn; version="4.5.6"<httpclient_4.5.6_1.0.0 [80]>
JAVA_SDK_VXP_2.0.3_1.0.0 [4] imports
org.apache.http.impl.conn; version="0.0.0"<httpclient_osgi_4.5.6_1.0.0 [81]>
But nothing has changed. 但是什么都没有改变。 Please help me.
请帮我。
UPDATE UPDATE
I resolved it. 我解决了 After editing MANIFEST.MF, from {EI-HOME}/lib, I deleted httpclient-4.5.6.jar, JAVA_SDK_VXP-2.0.3.jar and restart EI server.
在从{EI-HOME} / lib编辑MANIFEST.MF之后,我删除了httpclient-4.5.6.jar,JAVA_SDK_VXP-2.0.3.jar并重新启动EI服务器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.