简体   繁体   English

在WSO2 ESB中部署自定义介体时的冲突库

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM