wso2 / product-ei

An open source, a high-performance hybrid integration platform that allows developers quick integration with any application, data, or system.
https://wso2.com/integration/
Apache License 2.0
375 stars 280 forks source link

How to remove / override old plugin libraries shipped with WSO2 EI? #4899

Closed TomasTokaMrazek closed 3 weeks ago

TomasTokaMrazek commented 4 years ago

Version: 6.4.0

Problem:

I'm running a newest version of MongoDB (4.2). WSO2 is shipped with org.mongodb.mongo-java-driver_3.4.1.jar in <PRODUCT_HOME/wso2/components/plugins – this is probably used in DSS service configured for Mongo. Unfortunately this driver does not support insertOne operation and according to documentation, mongo-java-driver is going to be deprecated in favor of mongodb-driver-sync.

Since I cannot use DSS service, I'm writing custom mediator for managing Mongo operations with the new java library. The issue is, that the classes are not found. It doesn't matter, if I put the jar in any of the following directories, exception is always thrown. I suspect that it's due to some bundle naming collision?

java.lang.NoClassDefFoundError: com/mongodb/MongoClientSettings
        at cz.styrax.MongoService.init(MongoService.java:19)
        at cz.styrax.MongoMediator.process(MongoMediator.java:68)
        at cz.styrax.MongoMediator.mediate(MongoMediator.java:48)
        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.config.xml.AnonymousListMediator.mediate(AnonymousListMediator.java:37)
        at org.apache.synapse.config.xml.SwitchCase.mediate(SwitchCase.java:69)
        at org.apache.synapse.mediators.filters.SwitchMediator.mediate(SwitchMediator.java:134)
        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.template.TemplateMediator.mediate(TemplateMediator.java:104)
        at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:148)
        at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:84)
        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.template.TemplateMediator.mediate(TemplateMediator.java:104)
        at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:148)
        at org.apache.synapse.mediators.template.InvokeMediator.mediate(InvokeMediator.java:84)
        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.mediators.base.SequenceMediator.mediate(SequenceMediator.java:214)
        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:351)
        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.processEntityEnclosingRequest(ServerWorker.java:383)
        at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:151)
        at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: Class Not found : com.mongodb.MongoClientSettings
        at org.apache.axis2.deployment.DeploymentClassLoader.findClass(DeploymentClassLoader.java:95)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at org.apache.axis2.deployment.DeploymentClassLoader.loadClass(DeploymentClassLoader.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 41 more
SanzarRehman commented 7 months ago

found any solution ?

TomasTokaMrazek commented 7 months ago

Yeah, write any custom extensions (mediators) fully OSGi compatible. Majority of third-party libraries are OSGi bundles, and the ones that aren't needs to be wrapped in OSGi bundle.