Get groov’in with your iFlows – groovy scripting with Eclipse for CPI
Today, I’m going to make your life as integration developer a whole lot easier. Whenever there’s a complex transformation requirement, for instance combining rows from an excel sheet into one object by a common identifier, Scripting is a great way to tackle the issue. SAP offers two flavors of scripting – JavaScript and Groovy.
The only downside is that the SAP Cloud Platform Integration WebUI does development environment. So, basically, it is like developing whilst blindfolded and then hoping for the best during deployment and runtime. As an integration developer you want a little more than syntax highlighting. You at least want to have syntax checks, code completion and the ability to test messages easily without deploying entire iFlows and executing them.
Fortunately, there are some clever people at the SAP community, who can show us how to setup a development environment for those CPI scripts.
I am going to build upon their amazing work and equip you with a custom iFlow and a Postman request that allows you to “hunt” for the Java-Libraries residing on your own Cloud Platform Integration tenant. You will need them to be able to execute your groovy script from eclipse.
Find out how my custom iFlow finds java libraries on your CPI tenant on Vadim’s amazing blog post.
Also, Eng Swee produced a fantastic write up on how to start your first functional tests with a groovy script.
Ready to groove?
So let’s say you’ve installed Eclipse Neon, the groovy plugin and added Eng Swee’s initial scripts for message processing and running the test. Then, you notice that the project produces errors due to missing dependencies. This is what we need to fix.
Have a look at my slightly adapted demo structure below, which I am going to refer to from hereon.
Message processing script “src/com/convista/groovydemo/Script1.groovy”:
package com.convista.groovydemo
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
def Message processData(Message message) {
//Body
def body = message.getBody();
message.setBody(body + "Body is modified");
//Headers
def map = message.getHeaders();
def value = map.get("oldHeader");
message.setHeader("oldHeader", value + "modified");
message.setHeader("newHeader", "newHeader");
//Properties
map = message.getProperties();
value = map.get("oldProperty");
message.setProperty("oldProperty", value + "modified");
message.setProperty("newProperty", "newProperty");
return message;
}
Note: If you run into encoding problems, for example, with messages, created by the csv converter, consider adding the java.lang.String class to your get-method (e.g. message.getBody(java.lang.String)).
And the script “Tester.groovy” that executes the actual test. This piece simulates the message passed by the CPI framework so to say.
package com.equalize.groovy.testing
import com.sap.gateway.ip.core.customdev.processor.MessageImpl
import com.sap.gateway.ip.core.customdev.util.Message
// Load Groovy Script
GroovyShell shell = new GroovyShell()
def script = shell.parse(new File("src/com/convista/groovydemo/Script1.groovy"))
// Initialize message with body, header and property
Message msg = new MessageImpl()
msg.setBody(new String("Hello Groovy World"))
msg.setHeader("oldHeader", "MyGroovyHeader")
msg.setProperty("oldProperty", "MyGroovyProperty")
// Execute script
script.processData(msg)
// Display results of script in console
println("Body:\r\n" + msg.getBody())
def displayMaps = { String mapName, Map map ->
println mapName
map.each { key, value -> println( key + " = " + value) }
}
displayMaps("Headers:", msg.getHeaders())
displayMaps("Properties:", msg.getProperties())
The blogs, mentioned above, walk you through the dependency problem with SAP’s standard class “Message” and explains, in detail, how to solve it.
So: “What are we doing here then?”
Vadim and Eng Swee left you with a very cumbersome approach to retrieve the java libraries. I’d like to show you a much more integrated way of doing this without comprising Eng Swee’s goal of teaching a man to fish instead of simply giving him a fish to eat, so he has the skills to feed himself going forward.
What else do you get?
Vadim’s and Eng Swee’s approach involves executing your incomplete groovy project, identifying an error relating to a missing dependency in eclipse, and using that missing class name on an additional groovy script, which you need to deploy on CPI to download the corresponding java library from your tenant. Once you have the java library file you can add it to your class path and re-execute your project to find the next missing class. For this next one you need to alter the groovy script on the iFlow and re-deploy.
Ugh, that is quite a lot of work, because you currently need to download ten java library files to get a complete set and the deployment times of the iFlow can take several minutes. It can easily take 20 minutes to complete them. So that is why I decided to develop an iFlow, which can do all of this in one go. You can download it here.
To achieve what I wanted I needed the ability to pass the java class name dynamically without hard coding it on a groovy script. That way we can circumvent the re-deployment process. So, to achieve that, I use an https connector that allows the forwarding of the HTTP query string parameters. SAP is running the Apache Camel server for that reason. You can read more about this here.
A couple of weeks ago my colleague Dominic Beckbauer gave you an introduction on how to use Postman for testing your iFlows. You are going to need that knowledge now.
As you can see the URL for my iFlow https endpoint requires the following pattern:
/external/trigger?lib=<java class name>
The yellow part is required for the Camel server, the blue part addresses the https endpoint of the iFlow and the red part is the name of the query string variable, which can be accessed on the iFlow later on. Check it out below:
You can access the query string parameters by reading the header “CamelHttpQuery”. I decided to parse it by applying a substring to actually get the value of the parameter (lib=some.java.class.name).
I feed the result into Vadim’s script logic that utilizes the Java API to lookup the jar file, which contains the class name. The result is then base64 encoded and added as a string attachment to an iFlow message.
For the convenience of the developer I added the jar file name including its version as the title of the attachment.
Finally you need to copy the base64 encoded string and create a jar file from it. I decided to do this by running another groovy script once more. As preparation you need to copy the encoded string into a text file and put it on the libs folder of my demo project. You can also download it from my GitHub repository. The script is called Base64Decoder.groovy. Add the jar file to your project’s build path, try to run the groovy script “Tester” once again and start the process of “hunting” for more missing jar files again.
Once you are done “hunting” for all the SAP jar files and added all of them to your build path, you can finally execute tests with your groovy scripts:
That wasn’t too hard, was it?
Eng Swee Yeoh suggests you take the testing approach even further. If you want to delve further into Test Driven Development with your groovy scripts take a look here.
Before concluding, I would like to emphasize the power of creating message logs (with attachments) with groovy scripts. In our case we used it to output the content of the jar files from the CPI tenant. But, of course, possible use cases for custom logging are only limited by your imagination and implementation needs.
Final Words
So I’ve introduced you to the setup procedure and told you where to find instructions on how to setup your groovy development environment in eclipse to get started with groovy scripting for your CPI iFlows. I also showed you how to download the required java libraries more easily and quicker than my SAP community colleagues Vadim and Eng Swee suggest.
Next time I am going to combine the topics of our blogs, which we posted so far and talk about end-to-end testing of your iFlows. So stay tuned for more.
As always feel free to leave comments and ask lots of follow up questions.
Thanks
Martin
Hi Martin
Nice to see your blog expanding on Vadim Klimov and my ideas (but does the title really have to be in all UPPER CASE??)
It's good to know that you understood our intention of just highlighting the fundamental concepts, and then leaving the rest to the imagination of developers like yourself. IMHO, to appreciate automation, one needs to have experienced how things are done "the hard way" 😉
A few comments on your approach:-
1) You can further bypass the Base64 encoding/decoding steps by setting the byte content of the file into the message body. With this you can use the "Send and Download" feature in Postman to directly retrieve the binary contents of the JAR files. If you want the filename, you can additionally store it back in the HTTP header of the response.
2) While MPL attachments are indeed useful - take note that SAP have repeatedly cautioned against using it unnecessarily - see here and here.
Regards
Eng Swee
Hi Eng Swee,
Thanks for your input. I drafted the blog in a different place where the styling of titles need to be "shouting" ;-). When I copied from there I forgot about the styling. So thanks for pointing that out.
Good point to enhance the base64 encoding step by moving it also into the message. I was simply itching to do some groovy instead.
Kind regards
Martin
Hello Martin,
Very nice blog – thank you for sharing it with the community in a detailed way, clear and easy to follow every step you walk through, as well as it presents a good example of technique applied in action and its practical utilization and usability.
I agree with Eng Swee Yeoh in part that our posts were not intended to provide a ready to run packaged solution, as only imagination and creativity of the developer being put into context of a specific use case / requirement, will be boundary of practical usage of the described techniques – Eng Swee provided reference examples on technique as a core, so that it can be wrapped and bundled into a specific case and tailored to specific needs. This brings us to a variety of options on how to:
In certain cases, it was also driven by non-technical factors – such as legal / end user license agreement – cases, where it might have been considered as violation of EULA articles, techniques were described in very high level and agnostic way (note disclaimer that I put at the beginning of several blogs – it was actually put for this specific reason).
Regarding the script, to protect it from issues caused by incorrect URL constructed by the consumer of the flow, the check against query parameter name might become handy, so that class name retrieved from the expected query parameter. This is to avoid situation if somebody will enter URL with multiple parameters for some reason, where they shouldn’t have done so, and the script will get executed with some multi-parameter query.
The above logic assumes the required query parameter name is ‘lib’, but obviously it can be replaced with any other reasonable query parameter name of your choice (I have chosen ‘lib’ to follow URL you passed in the request and captured in Postman screenshot).
Regards,
Vadim
Hi Vadim,
Thanks a lot for your thorough comment. You guys made it easy to build upon your great research to bundle something usable. Furthermore your thoughts on the topic really allowed a deep insight of the workings of the groovy related topics and how the cpi messages can be manipulated.
Your suggestion for enhancing the example script will increase the robustness. So I will give it another look. But there is always something that can be added, isn't there? 😉
Kind regards
Martin
That's very true, Martin - I agree, there shall be a certain point, when the one makes full stop and releases findings to community, otherwise enhancements, tweaks, introduction of extra features and functionality might go forever, and will finally quite significantly deviate from the original scope, and even distract from the main subject. And all other ideas can be put in new blogs or blog series - so keep on exploring, developing and sharing your thoughts and findings, those are valuable inputs and appreciated efforts!
Regards,
Vadim
Hi Martin,
It's a very nice blog – thank you for sharing it with us in such a detailed way to follow each step along the process.
1/ However, I still encounter some small issues. When I try to retrieve
This causes an error: URI is not hierarchical.
When I look further into this issue, the jar location is not correctly specified.
As it should return a path which would look like this: /usr/sap/ljs/plugins/...jar
It actually returns: jar:bundle://627.0:0/!/
When I request the location with a script of Vadim Klimov (many thanks as well for the great blog), the following response is returned.
Fully qualified class name: com.sap.gateway.ip.core.customdev.util.Message
JAR file containing class file: jar:bundle://627.0:0/!/
Has there been a change of location or has the security changed?
2/ Is it a possibility to provide a groovy example project with all the jars included?
The possibility to develop groovy in an editor opens a whole lot of possibilities.
Kind regards,
Illya Kuys
Hi Illya,
It is indeed possible that the library structure changed. SAP is updating CPI frequently. I would advice to check with Vadim Klimov on this matter, since he investigated with most detail.
In case this issue is a deal breaker I will publish the last working version I have.
Kind regards
Martin
Hi Martin, hi Illya,
I have now tested the script for identification of path to JAR file - and it worked for me when being run in CPI. Although these are internals and not publicly exposed CPI APIs, they rely on Java APIs such as Reflection API, and it is unlikely to be something that can get changed easily, as it is one of ground level APIs in JVM.
Is it possible for you to provide full code of the script (or part of that script that queries class path) to check if there can be any difference in what has been executed by you and me?
I used the following one:
Regarding a project to run scripts locally. Eng Swee Yeoh has written a blog about this where he described steps that can be followed to get it set. It will require at least dependency resolved for external library with class Message, but you might need additional dependencies to be resolved in case some other functionality will be used in the script. Although it is possible to use older versions of that library, I would suggest regularly downloading current versions of required libraries from CPI and refreshing project dependencies for them to keep them up to date and aligned with those used at runtime by CPI tenant.
Regards,
Vadim
Thanks a lot Vadim Klimov for the comment!
Kind regards
Martin
/http/amba/cpifilesystemdownload///usr/sap/ljs//webapps/ROOT.war works for me in year 2021
It contains:
AS4.monitor-1.4.3.jar
camel.iflow.simulation.invoker-1.60.1.jar
camel.iflow.simulation.models-1.60.1.jar
com.amazon.ion.java-1.5.1.jar
com.fasterxml.aalto-xml-1.2.2.jar
com.fasterxml.jackson.core.jackson-annotations-2.11.3.jar
com.fasterxml.jackson.core.jackson-core-2.11.3.jar
com.fasterxml.jackson.core.jackson-databind-2.11.3.jar
com.fasterxml.jackson.dataformat.jackson-dataformat-ion-2.11.3.jar
com.fasterxml.jackson.dataformat.jackson-dataformat-smile-2.11.3.jar
com.fasterxml.jackson.dataformat.jackson-dataformat-xml-2.11.3.jar
com.fasterxml.jackson.datatype.jackson-datatype-jdk8-2.11.3.jar
com.fasterxml.jackson.datatype.jackson-datatype-jsr310-2.11.3.jar
com.fasterxml.jackson.jaxrs.jackson-jaxrs-base-2.11.3.jar
com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider-2.11.3.jar
com.fasterxml.jackson.module.jackson-module-jaxb-annotations-2.11.3.jar
com.fasterxml.jackson.module.jackson-module-parameter-names-2.11.3.jar
com.github.luben.zstd-jni-1.4.5.12.jar
com.google.gson-1.7.0.jar
com.google.guava-28.1.0.sap-02.jar
com.google.guava.failureaccess-1.0.1.jar
com.jcraft.jsch-0.1.55.sap-01.jar
com.sap.common.apis-5.24.0.jar
com.sap.core.jpaas.crypto.api.jce-1.2.0.jar
com.sap.core.jpaas.crypto.iaik.cms-1.6.0.jar
com.sap.core.messaging.admin.client-1.37.1.jar
com.sap.core.messaging.client-1.37.1.jar
com.sap.core.messaging.client.commons-1.37.1.jar
com.sap.core.messaging.client.comp.status-1.37.1.jar
com.sap.core.messaging.client.spi-1.37.1.jar
com.sap.core.messaging.commons-1.37.1.jar
com.sap.core.messaging.spi-1.37.1.jar
com.sap.core.messaging.util.http-1.37.1.jar
com.sap.core.messaging.util.rest-1.37.1.jar
com.sap.cpi.cil-3.1.4.jar
com.sap.db.jdbc-2.6.28.fbc60bae0c06f69fb20cccf50ab57dbeb3964a88.jar
com.sap.esb.application.fsn.message-1.31.0.jar
com.sap.esb.application.services.api-1.62.0.jar
com.sap.esb.application.services.classpath.url.handler-1.62.0.jar
com.sap.esb.application.services.database.properties-1.62.0.jar
com.sap.esb.application.services.database.properties.impl-1.62.0.jar
com.sap.esb.application.services.datastore-1.62.0.jar
com.sap.esb.application.services.datastore.impl-1.62.0.jar
com.sap.esb.application.services.encryption.api-1.62.0.jar
com.sap.esb.application.services.heartbeat-1.62.0.jar
com.sap.esb.application.services.heartbeat.impl-1.62.0.jar
com.sap.esb.application.services.idmap.api-1.62.0.jar
com.sap.esb.application.services.idmap.impl-1.62.0.jar
com.sap.esb.application.services.message.storage.api-1.62.0.jar
com.sap.esb.application.services.message.storage.impl-1.62.0.jar
com.sap.esb.application.services.netty.handler-1.62.0.jar
com.sap.esb.camel.addons.camel.aggregation.strategies-1.60.1.jar
com.sap.esb.camel.addons.camel.csvtoxml.converter-1.60.1.jar
com.sap.esb.camel.addons.camel.error.component-1.60.1.jar
com.sap.esb.camel.addons.camel.iflow.simulation.datastore-1.60.1.jar
com.sap.esb.camel.addons.camel.iflow.simulation.messageflow-1.60.1.jar
com.sap.esb.camel.addons.camel.xmltocsv.converter-1.60.1.jar
com.sap.esb.camel.addons.connectivity.provider.impl-1.60.1.jar
com.sap.esb.camel.addons.connectivity.provider.neo.impl-1.60.1.jar
com.sap.esb.camel.addons.connectivity.service.neo-1.60.1.jar
com.sap.esb.camel.addons.connectivity.service.principal.propagator.neo-1.60.1.jar
com.sap.esb.camel.addons.oauth.cache.handler-1.60.1.jar
com.sap.esb.camel.addons.oauth.token.handler-1.60.1.jar
com.sap.esb.camel.core.camel.aggregate-1.90.1.jar
com.sap.esb.camel.core.camel.aggregation.repository-1.90.1.jar
com.sap.esb.camel.core.camel.attachment.component-1.90.1.jar
com.sap.esb.camel.core.camel.datastore.component-1.90.1.jar
com.sap.esb.camel.core.camel.eip.splitter-1.90.1.jar
com.sap.esb.camel.core.camel.idmap.component-1.90.1.jar
com.sap.esb.camel.core.camel.jdbc.idempotency.management-1.90.1.jar
com.sap.esb.camel.core.camel.jdbc.idempotency.reorg-1.90.1.jar
com.sap.esb.camel.core.camel.message.storage.component-1.90.1.jar
com.sap.esb.camel.core.camel.msgdigest.component-1.90.1.jar
com.sap.esb.camel.core.camel.saxon.converter-1.90.1.jar
com.sap.esb.camel.core.camel.saxon.extensions-1.90.1.jar
com.sap.esb.camel.core.camel.size.converter-1.90.1.jar
com.sap.esb.camel.core.camel.size.limiter-1.90.1.jar
com.sap.esb.camel.core.camel.util-1.90.1.jar
com.sap.esb.camel.core.camel.xmljson-1.90.1.jar
com.sap.esb.camel.core.cloud.connector.socket-1.90.1.jar
com.sap.esb.camel.core.endpoint.configurator.api-1.90.1.jar
com.sap.esb.camel.core.endpoint.configurator.mail-1.90.1.jar
com.sap.esb.camel.core.event.polling.strategy-1.90.1.jar
com.sap.esb.camel.core.header.filter.strategy-1.90.1.jar
com.sap.esb.camel.core.idempotent.repository-1.90.1.jar
com.sap.esb.camel.core.idempotent.repository.management-1.90.1.jar
com.sap.esb.camel.core.it.xmljson-1.90.1.jar
com.sap.esb.camel.core.jdbc.idempotency.repository-1.90.1.jar
com.sap.esb.camel.core.lock.polling.strategy-1.90.1.jar
com.sap.esb.camel.core.mpl.access.api-1.90.1.jar
com.sap.esb.camel.core.quartz-1.90.1.jar
com.sap.esb.camel.core.xml.modification-1.90.1.jar
com.sap.esb.camel.esr.mapping.camel.xi.mapping-1.38.0.jar
com.sap.esb.camel.esr.mapping.camel.xi.mapping.component.check-1.38.0.jar
com.sap.esb.camel.esr.mapping.camel.xi.opmapping.fault-1.38.0.jar
com.sap.esb.camel.ftp.endpoint.configurator.api-1.41.0.jar
com.sap.esb.camel.ftp.endpoint.configurator.sftp-1.41.0.jar
com.sap.esb.camel.ftp.file.filter.glob-1.41.0.jar
com.sap.esb.camel.ftp.sap.ftp.component-1.41.0.jar
com.sap.esb.camel.ftp.sap.sftp.component-1.41.0.jar
com.sap.esb.camel.ftp.socks.proxy-1.41.0.jar
com.sap.esb.camel.http.ahc.configurer-2.15.0.jar
com.sap.esb.camel.http.ahc.configurer.impl-2.15.0.jar
com.sap.esb.camel.http.cookie.policy-2.15.0.jar
com.sap.esb.camel.quartz.camel.route.policy-1.26.0.jar
com.sap.esb.camel.security.authentication.header-1.67.0.jar
com.sap.esb.camel.security.camel.security.cms-1.67.0.jar
com.sap.esb.camel.security.camel.security.cms.impl-1.67.0.jar
com.sap.esb.camel.security.camel.security.cms.smime-1.67.0.jar
com.sap.esb.camel.security.camel.security.crypto-1.67.0.jar
com.sap.esb.camel.security.camel.security.crypto.impl-1.67.0.jar
com.sap.esb.camel.security.camel.security.pgp-1.67.0.jar
com.sap.esb.camel.security.camel.security.pgp.impl-1.67.0.jar
com.sap.esb.camel.security.camel.security.xmlsecurity-1.67.0.jar
com.sap.esb.camel.security.camel.security.xmlsecurity.impl-1.67.0.jar
com.sap.esb.camel.security.encryption.dataformat-1.67.0.jar
com.sap.esb.camel.webservice.endpoint.configurer-1.35.0.jar
com.sap.esb.camel.webservice.xi.mpl.status.component-1.35.0.jar
com.sap.esb.camel.webservice.xi.packaging-1.35.0.jar
com.sap.esb.messaging.camel.endpoint.configurator.amqp-1.55.0.jar
com.sap.esb.messaging.camel.endpoint.configurator.kafka-1.55.0.jar
com.sap.esb.messaging.camel.jms.util-1.55.0.jar
com.sap.esb.messaging.camel.retry-1.55.0.jar
com.sap.esb.messaging.qpid.connection.factory-1.55.0.jar
com.sap.esb.messaging.solace.connection.factory-1.55.0.jar
com.sap.esb.messaging.solace.connection.factory.neo-1.55.0.jar
com.sap.esb.monitoring.audit.log-1.107.0.jar
com.sap.esb.monitoring.camel.ahc.monitor-1.107.0.jar
com.sap.esb.monitoring.camel.core.monitor-1.107.0.jar
com.sap.esb.monitoring.camel.cxf.monitor-1.107.0.jar
com.sap.esb.monitoring.camel.ftp.monitor-1.107.0.jar
com.sap.esb.monitoring.camel.mail.monitor-1.107.0.jar
com.sap.esb.monitoring.camel.quartz.monitor-1.107.0.jar
com.sap.esb.monitoring.camel.security.monitor-1.107.0.jar
com.sap.esb.monitoring.component.command-1.107.0.jar
com.sap.esb.monitoring.cxf.monitor-1.107.0.jar
com.sap.esb.monitoring.cxf.runtime.feature-1.107.0.jar
com.sap.esb.monitoring.data.encryption.monitor-1.107.0.jar
com.sap.esb.monitoring.data.store.monitor-1.107.0.jar
com.sap.esb.monitoring.delete.tmp.folder-1.107.0.jar
com.sap.esb.monitoring.id.map.monitor-1.107.0.jar
com.sap.esb.monitoring.idempotent.management.monitor-1.107.0.jar
com.sap.esb.monitoring.iflow.state.monitor-1.107.0.jar
com.sap.esb.monitoring.jdbc.driver.state.monitor-1.107.0.jar
com.sap.esb.monitoring.jms.monitor-1.107.0.jar
com.sap.esb.monitoring.keystore.monitor-1.107.0.jar
com.sap.esb.monitoring.mbean.dummies.worker-1.107.0.jar
com.sap.esb.monitoring.message.storage.monitor-1.107.0.jar
com.sap.esb.monitoring.messages-1.107.0.jar
com.sap.esb.monitoring.messages.adapter-1.107.0.jar
com.sap.esb.monitoring.mpl.extension.ahc-1.107.0.jar
com.sap.esb.monitoring.mpl.extension.cxf-1.107.0.jar
com.sap.esb.monitoring.mpl.extension.file-1.107.0.jar
com.sap.esb.monitoring.mpl.extension.kafka-1.107.0.jar
com.sap.esb.monitoring.nodeinfo.impl-1.107.0.jar
com.sap.esb.monitoring.pgp.monitor-1.107.0.jar
com.sap.esb.monitoring.restart.iflow-1.107.0.jar
com.sap.esb.monitoring.secure.parameter.impl-1.107.0.jar
com.sap.esb.pd.api-1.50.0.jar
com.sap.esb.pd.capability-1.50.0.jar
com.sap.esb.pd.commons-1.50.0.jar
com.sap.esb.pd.monitor-1.50.0.jar
com.sap.esb.pd.read-1.50.0.jar
com.sap.esb.pd.rt-1.50.0.jar
com.sap.esb.pd.rt.api-1.50.0.jar
com.sap.esb.pd.rt.neo-1.50.0.jar
com.sap.esb.security-1.59.0.jar
com.sap.esb.security.cloud.authentication-1.33.0.jar
com.sap.esb.security.db.encryption-1.59.0.jar
com.sap.esb.security.db.encryption.lib-1.59.0.jar
com.sap.esb.security.gogo.commands-1.59.0.jar
com.sap.esb.security.hci.cxf.filter.registration.karaf-1.33.0.jar
com.sap.esb.security.iaik.pgp-1.59.0.jar
com.sap.esb.security.impl-1.59.0.jar
com.sap.esb.security.oauth.client-1.59.0.jar
com.sap.esb.security.oauth.token.access-1.59.0.jar
com.sap.esb.security.oauth.token.access.base-1.59.0.jar
com.sap.esb.security.oauth.token.access.impl-1.59.0.jar
com.sap.esb.security.oauth.token.update.impl-1.33.0.jar
com.sap.esb.security.oauth.types-1.59.0.jar
com.sap.esb.security.oauth.util-1.59.0.jar
com.sap.esb.security.pgp-1.59.0.jar
com.sap.esb.security.pgp.impl-1.59.0.jar
com.sap.esb.security.ssh.key.util-1.59.0.jar
com.sap.esb.webservice.authorization.supplier-1.68.0.jar
com.sap.esb.webservice.cxf.interceptor-1.68.0.jar
com.sap.esb.webservice.cxf.interceptor.neo-1.68.0.jar
com.sap.esb.webservice.cxf.interceptor.store-1.68.0.jar
com.sap.esb.webservice.cxf.xi.core-1.68.0.jar
com.sap.esb.webservice.jmx.management-1.68.0.jar
com.sap.esb.webservice.mpl.access.api-1.68.0.jar
com.sap.esb.webservice.security.crypto-1.68.0.jar
com.sap.esb.xi.mapping.api-1.22.0.jar
com.sap.esb.xi.mapping.rt-1.22.0.jar
com.sap.gateway.core.ip.component.odata4.odata4-5.24.0.jar
com.sap.gw.rt.camel.components.gwodc-5.24.0.jar
com.sap.gw.rt.camel.components.hciodc-5.24.0.jar
com.sap.gw.rt.core.api-5.24.0.jar
com.sap.gw.rt.core.bep-5.24.0.jar
com.sap.gw.rt.core.ip.ipcore-5.24.0.jar
com.sap.gw.rt.core.ip.runtime-5.24.0.jar
com.sap.gw.rt.core.runtime-5.24.0.jar
com.sap.gw.rt.hci.components.gwcoreip.web-5.24.0.jar
com.sap.gw.rt.hci.components.service.messages-5.24.0.jar
com.sap.gw.rt.hci.components.service.state.monitor-5.24.0.jar
com.sap.gw.rt.ip.commons.camel-commons-5.24.0.jar
com.sap.gw.rt.ip.commons.camel-converter-5.24.0.jar
com.sap.gw.rt.ip.commons.camel-gw-msg-translator-5.24.0.jar
com.sap.gw.rt.ip.commons.camel-odata-5.24.0.jar
com.sap.gw.rt.ip.commons.odata4-api-5.24.0.jar
com.sap.gw.rt.ip.commons.tenant-config-5.24.0.jar
com.sap.gw.rt.odata-response-handler-5.24.0.jar
com.sap.gw.rt.service.url-5.24.0.jar
com.sap.it.adk.capability-1.35.0.jar
com.sap.it.asdk.cloud.authentication-1.61.0.jar
com.sap.it.asdk.com.sap.it.api.asdk-1.61.0.jar
com.sap.it.asdk.com.sap.it.api.asdk.datastore.impl-1.61.0.jar
com.sap.it.asdk.com.sap.it.api.asdk.keystore.impl-1.61.0.jar
com.sap.it.asdk.com.sap.it.api.asdk.securestore.impl-1.61.0.jar
com.sap.it.asdk.com.sap.it.api.cloud.connector.impl-1.61.0.jar
com.sap.it.asdk.com.sap.it.api.external.keystore.impl-1.61.0.jar
com.sap.it.asdk.com.sap.it.api.external.securestore.impl-1.61.0.jar
com.sap.it.asdk.com.sap.it.api.idempotent.repository.impl-1.61.0.jar
com.sap.it.asdk.com.sap.it.api.number.range.impl-1.61.0.jar
com.sap.it.asdk.web.extender-1.61.0.jar
com.sap.it.base.constants-1.28.0.jar
com.sap.it.capability.amqp-1.105.0.jar
com.sap.it.capability.ariba-1.105.0.jar
com.sap.it.capability.as2-1.105.0.jar
com.sap.it.capability.core-1.105.0.jar
com.sap.it.capability.core.neo-1.105.0.jar
com.sap.it.capability.elster-1.105.0.jar
com.sap.it.capability.http-1.105.0.jar
com.sap.it.capability.https-1.105.0.jar
com.sap.it.capability.idoc-1.105.0.jar
com.sap.it.capability.jms-1.105.0.jar
com.sap.it.capability.kafka-1.105.0.jar
com.sap.it.capability.ldap-1.105.0.jar
com.sap.it.capability.mail-1.105.0.jar
com.sap.it.capability.odata-1.105.0.jar
com.sap.it.capability.odata-sender-1.105.0.jar
com.sap.it.capability.odata4-1.105.0.jar
com.sap.it.capability.odc-1.105.0.jar
com.sap.it.capability.sfsf-1.105.0.jar
com.sap.it.capability.sftp-1.105.0.jar
com.sap.it.capability.soap-component-1.105.0.jar
com.sap.it.capability.xi-1.105.0.jar
com.sap.it.capability.xml-validator-1.105.0.jar
com.sap.it.commons-1.81.0.jar
com.sap.it.commons.cache-1.81.0.jar
com.sap.it.commons.cache.osgi-1.81.0.jar
com.sap.it.commons.com.sap.it.commons.connectivity.principal.propagation-1.81.0.jar
com.sap.it.commons.com.sap.it.commons.connectivity.provider.api-1.81.0.jar
com.sap.it.commons.com.sap.it.commons.oauth.cache.manager-1.81.0.jar
com.sap.it.commons.command-1.81.0.jar
com.sap.it.commons.command.osgi-1.81.0.jar
com.sap.it.commons.command.osgi.basicserver-1.81.0.jar
com.sap.it.commons.config-1.78.0.jar
com.sap.it.commons.config.model-1.78.0.jar
com.sap.it.commons.config.types-1.78.0.jar
com.sap.it.commons.http.util-1.81.0.jar
com.sap.it.commons.json.util-1.81.0.jar
com.sap.it.commons.logging.slf4j-1.81.0.jar
com.sap.it.commons.odata2.annotations-1.78.0.jar
com.sap.it.commons.thread.annotation-1.81.0.jar
com.sap.it.commons.validation-1.81.0.jar
com.sap.it.config.commons-1.50.0.jar
com.sap.it.config.monitor-1.50.0.jar
com.sap.it.config.read.impl-1.50.0.jar
com.sap.it.config.read.persistent.impl-1.50.0.jar
com.sap.it.config.types.impl-1.50.0.jar
com.sap.it.elster.component-1.10.0.jar
com.sap.it.elster.monitor-1.10.0.jar
com.sap.it.eric.wrapper.api-33.4.4.0.jar
com.sap.it.eric.wrapper.lib-33.4.4.0.jar
com.sap.it.eric.wrapper.linux.x86_64-33.4.4.0.jar
com.sap.it.iflow.model-2.84.4.jar
com.sap.it.iflow.saxonee-3.26.0.jar
com.sap.it.jms_1.1_fragment-3.26.0.jar
com.sap.it.km.api.event-1.10.0.jar
com.sap.it.nm-2.87.0.jar
com.sap.it.nm.commands-2.87.0.jar
com.sap.it.nm.commands.profile-2.87.0.jar
com.sap.it.nm.component-2.87.0.jar
com.sap.it.nm.concurrent-2.87.0.jar
com.sap.it.nm.core.agent-2.85.1.jar
com.sap.it.nm.core.agent.logmsg-2.85.1.jar
com.sap.it.nm.core.commands.support-2.85.1.jar
com.sap.it.nm.core.concurrent-2.85.1.jar
com.sap.it.nm.core.deploy-2.85.1.jar
com.sap.it.nm.core.deploy.logmsg-2.85.1.jar
com.sap.it.nm.core.event.support-2.85.1.jar
com.sap.it.nm.core.fndt.cmd.handler-2.85.1.jar
com.sap.it.nm.core.fndt.diag-2.85.1.jar
com.sap.it.nm.core.fndt.metrics-2.85.1.jar
com.sap.it.nm.core.fsm-2.85.1.jar
com.sap.it.nm.core.init-2.85.1.jar
com.sap.it.nm.core.init-config-2.85.1.jar
com.sap.it.nm.core.init-logmsg-2.85.1.jar
com.sap.it.nm.core.init.db-2.85.1.jar
com.sap.it.nm.core.jdk.http-2.85.1.jar
com.sap.it.nm.core.logmsg-2.85.1.jar
com.sap.it.nm.core.monitor.deadlock-2.85.1.jar
com.sap.it.nm.core.public.lock.manager-2.85.1.jar
com.sap.it.nm.core.public.lock.store.access-2.85.1.jar
com.sap.it.nm.core.store.access-2.85.1.jar
com.sap.it.nm.core.store.ddl-2.85.1.jar
com.sap.it.nm.core.store.fs-2.85.1.jar
com.sap.it.nm.core.store.jdbc-2.85.1.jar
com.sap.it.nm.core.store.logmsg-2.85.1.jar
com.sap.it.nm.core.talk2-2.85.1.jar
com.sap.it.nm.core.talk2.jms-2.85.1.jar
com.sap.it.nm.core.talk2.logmsg-2.85.1.jar
com.sap.it.nm.core.talk2.util-2.85.1.jar
com.sap.it.nm.core.util-2.85.1.jar
com.sap.it.nm.core.util.osgi-2.85.1.jar
com.sap.it.nm.http-2.87.0.jar
com.sap.it.nm.plaf.neo.audit-2.84.1.jar
com.sap.it.nm.plaf.neo.commons-2.84.1.jar
com.sap.it.nm.plaf.neo.commons.lm-2.84.1.jar
com.sap.it.nm.plaf.neo.deploy-2.84.1.jar
com.sap.it.nm.plaf.neo.diag-2.84.1.jar
com.sap.it.nm.plaf.neo.diag.logmsg-2.84.1.jar
com.sap.it.nm.plaf.neo.init-2.84.1.jar
com.sap.it.nm.plaf.neo.init.db-2.84.1.jar
com.sap.it.nm.plaf.neo.shell.karaf-2.84.1.jar
com.sap.it.nm.plaf.neo.talk2-2.84.1.jar
com.sap.it.nm.plaf.neo.types-2.84.1.jar
com.sap.it.nm.shared-2.87.0.jar
com.sap.it.nm.spi-2.84.0.jar
com.sap.it.nm.spi.commands-2.84.0.jar
com.sap.it.nm.spi.http-2.84.0.jar
com.sap.it.nm.spi.metrics-2.84.0.jar
com.sap.it.nm.spi.talk-2.84.0.jar
com.sap.it.nm.spi.talk2-2.84.0.jar
com.sap.it.nm.spi.types-2.84.0.jar
com.sap.it.nm.spi.types.entity-2.84.0.jar
com.sap.it.nm.spi.types.http-2.84.0.jar
com.sap.it.nm.spi.types.talk-2.84.0.jar
com.sap.it.nm.spi.util-2.84.0.jar
com.sap.it.nm.talk-2.87.0.jar
com.sap.it.nm.talk.types-2.87.0.jar
com.sap.it.nm.types-2.87.0.jar
com.sap.it.nm.types.profile-2.87.0.jar
com.sap.it.node.stack.profile-5.27.13.jar
com.sap.it.op-1.25.0.jar
com.sap.it.op.agent-2.84.4.jar
com.sap.it.op.agent.api-2.84.4.jar
com.sap.it.op.agent.archiving-2.84.4.jar
com.sap.it.op.agent.collector.camel-2.84.4.jar
com.sap.it.op.agent.collector.cxf-2.84.4.jar
com.sap.it.op.agent.commands-1.80.0.jar
com.sap.it.op.agent.component.check-2.84.4.jar
com.sap.it.op.agent.ed.notifier.db-2.84.4.jar
com.sap.it.op.agent.ed.plugins.camel-2.84.4.jar
com.sap.it.op.agent.handler-2.84.4.jar
com.sap.it.op.agent.logging-2.84.4.jar
com.sap.it.op.agent.mpl-2.84.4.jar
com.sap.it.op.agent.mpl.camel-2.84.4.jar
com.sap.it.op.agent.mpl.factory.impl-2.84.4.jar
com.sap.it.op.agent.mpl.hystrix-2.84.4.jar
com.sap.it.op.agent.mpl.impl-2.84.4.jar
com.sap.it.op.agent.spi-2.84.4.jar
com.sap.it.op.agent.trace-2.84.4.jar
com.sap.it.op.agent.trace.cxf.impl-2.84.4.jar
com.sap.it.op.alert-2.84.4.jar
com.sap.it.op.cfglog-2.84.4.jar
com.sap.it.op.cfglog.osgi-2.84.4.jar
com.sap.it.op.component.access.osgi-1.25.0.jar
com.sap.it.op.component.check-1.25.0.jar
com.sap.it.op.data-2.84.4.jar
com.sap.it.op.data.tools-2.84.4.jar
com.sap.it.op.ed.impl-2.84.4.jar
com.sap.it.op.ed.subscribe.api-2.84.4.jar
com.sap.it.op.jpahelper-2.84.4.jar
com.sap.it.op.jutils-2.84.4.jar
com.sap.it.op.mpl-2.84.4.jar
com.sap.it.op.persistence.component.check-2.84.4.jar
com.sap.it.op.security-1.80.0.jar
com.sap.it.public.adapter.api-2.25.0.jar
com.sap.it.public.api-2.25.0.jar
com.sap.it.public.generic.api-2.25.0.jar
com.sap.it.public.spi-2.25.0.jar
com.sap.it.quartz.monitoring-2.3.0.jar
com.sap.it.quartz.runtime-persistence-2.3.0.jar
com.sap.it.rt.adapter.facebook.component-1.5.1.jar
com.sap.it.rt.adapter.https.http.component-1.63.0.jar
com.sap.it.rt.adapter.https.http.monitoring-1.63.0.jar
com.sap.it.rt.adapter.jdbc.component-1.19.0.jar
com.sap.it.rt.adapter.jdbc.ds.artifact.handler-1.19.0.jar
com.sap.it.rt.adapter.jdbc.ds.artifact.reader-1.19.0.jar
com.sap.it.rt.adapter.jdbc.ds.manager-1.19.0.jar
com.sap.it.rt.adapter.jdbc.monitoring-1.19.0.jar
com.sap.it.rt.adapter.ldap-component-1.70.0.jar
com.sap.it.rt.adapter.ldap-monitoring-1.70.0.jar
com.sap.it.rt.adapter.ldap.neo.url.resolver-1.70.0.jar
com.sap.it.rt.adapter.odata.auth-1.70.0.jar
com.sap.it.rt.adapter.odata.auth.facade-1.70.0.jar
com.sap.it.rt.adapter.odc-monitoring-1.70.0.jar
com.sap.it.rt.adapter.odc.auth-1.70.0.jar
com.sap.it.rt.adapter.openconnector.s-1.13.1.jar
com.sap.it.rt.adapter.processdirect.component-1.14.0.jar
com.sap.it.rt.adapter.rfc.capabilities-1.20.0.jar
com.sap.it.rt.adapter.rfc.component-1.20.0.jar
com.sap.it.rt.adapter.rfc.monitoring-1.20.0.jar
com.sap.it.rt.adapter.secure.instances.provider.impl-1.70.0.jar
com.sap.it.rt.adapter.sfsf.sf-cachehandler-1.54.0.jar
com.sap.it.rt.adapter.sfsf.sf-component-1.54.0.jar
com.sap.it.rt.adapter.sfsf.sf-core-1.54.0.jar
com.sap.it.rt.adapter.sfsf.sf-language-1.54.0.jar
com.sap.it.rt.adapter.sfsf.sf-monitoring-1.54.0.jar
com.sap.it.rt.adapter.sfsf.sf-persistence-1.54.0.jar
com.sap.it.rt.adapter.sfsf.sf-persistence.impl-1.54.0.jar
com.sap.it.rt.adapter.sfsf.sf-restclient-1.54.0.jar
com.sap.it.rt.adapter.sfsf.sf-wsclient-1.54.0.jar
com.sap.it.rt.adapter.twitter.component-1.6.0.jar
com.sap.it.rt.components.b2b.ariba.component-2.27.2.jar
com.sap.it.rt.components.b2b.ariba.monitoring-2.27.2.jar
com.sap.it.rt.components.b2b.as2.component-2.27.2.jar
com.sap.it.rt.components.b2b.as2.monitoring-2.27.2.jar
com.sap.it.rt.components.b2b.as2.registry-2.27.2.jar
com.sap.it.rt.components.b2b.as4.adapter-2.27.2.jar
com.sap.it.rt.components.b2b.edi.core-2.27.2.jar
com.sap.it.rt.components.b2b.edi.edifact-2.27.2.jar
com.sap.it.rt.components.b2b.edi.iflmap.capabilities-2.27.2.jar
com.sap.it.rt.components.b2b.edi.x12-2.27.2.jar
com.sap.it.rt.components.b2b.esb.b2b.commons-2.27.2.jar
com.sap.it.rt.components.b2b.metering.event.delegator-2.27.2.jar
com.sap.it.rt.components.b2b.nr.capabilities-2.27.2.jar
com.sap.it.rt.components.b2b.nr.processor-2.27.2.jar
com.sap.it.rt.components.b2b.xml.validator-2.27.2.jar
com.sap.it.rt.rfc.extensions.rfc.library-1.23.0.jar
com.sap.it.rt.rfc.extensions.rfc.utils-1.23.0.jar
com.sap.it.rt.utils.logging-1.20.0.jar
com.sap.it.rt.utils.oAuth-1.20.0.jar
com.sap.it.rt.utils.validation-1.20.0.jar
com.sap.it.saxonee-9.9.1.6-sap-01.jar
com.sap.it.script.artifact.state-2.13.0.jar
com.sap.it.script.com.sap.groovy.engine-2.13.0.jar
com.sap.it.script.com.sap.groovy.script.engine-2.13.0.jar
com.sap.it.script.com.sap.rhino.engine-2.13.0.jar
com.sap.it.script.custom-development-2.13.0.jar
com.sap.it.script.script.artifact.compilation.provider-2.13.0.jar
com.sap.it.script.script.artifact.osgi-2.13.0.jar
com.sap.it.script.script.engine.api-2.13.0.jar
com.sap.it.spc.iflow.step.test.commands-1.72.0.jar
com.sap.it.spc.iflow.step.test.commands.handler-1.72.0.jar
com.sap.it.util.thread-2.49.0.jar
com.sap.it.util.thread.osgi-2.49.0.jar
com.sap.it.wrappers.olingo.odata2.annotation.processor.core.wrapper-3.26.0.jar
com.sap.it.wrappers.olingo.odata2.core.wrapper-3.26.0.jar
com.sap.it.wrappers.opensaml.wrapper-3.26.0.jar
com.sap.it.wrappers.org.json.wrapper-3.26.0.jar
com.sap.messaging.clientfactory.hcp-1.10.0.jar
com.sap.messaging.clientfactory.jms-1.10.0.jar
com.sap.messaging.clientfactory.solace-1.10.0.jar
com.sap.messaging.clientfactory.spi-1.10.0.jar
com.sap.messaging.clientfactory.spi.jms-1.10.0.jar
com.sap.org.apache.camel.xmlsecurity-1.67.0.jar
com.sap.platform.lib.virus.scanner-1.13.0.jar
com.sap.platform.lib.virus.scanner.impl-1.13.0.jar
com.sap.security.core.server.csi-1.0.8.jar
com.sap.security.nw.vsi-2.8.2.sap-01.jar
com.sap.sod.camel.idocsoap.monitor-1.30.0.jar
com.sap.sod.utils.idoc-1.30.0.jar
com.solacesystems.sol-jms-10.12.1.jar
com.sun.jna-5.7.0.jar
com.typesafe.netty.reactive-streams-2.0.3.jar
com.zaxxer.HikariCP-3.4.5.jar
content.txt
deploy.json
eclipselink.ext-2.85.1.jar
Facebook.monitor-1.5.1.jar
hystrix-osgi-1.4.18.jar
io.netty.buffer-4.1.63.Final.jar
io.netty.codec-4.1.63.Final.jar
io.netty.codec-http-4.1.63.Final.jar
io.netty.codec-socks-4.1.63.Final.jar
io.netty.common-4.1.63.Final.jar
io.netty.handler-4.1.63.Final.jar
io.netty.handler-proxy-4.1.63.Final.jar
io.netty.resolver-4.1.63.Final.jar
io.netty.transport-4.1.63.Final.jar
io.netty.transport-native-epoll-4.1.63.Final.jar
io.netty.transport-native-kqueue-4.1.63.Final.jar
io.netty.transport-native-unix-common-4.1.63.Final.jar
javax.ws.rs-api-2.1.99.b01.jar
JDBC.monitor-1.3.0.jar
joda-time-2.10.1.jar
liquibase.frag-2.85.1.jar
lz4-java-1.7.1.jar
odata-monitoring-1.70.0.jar
olingo-odata2-annotation-processor-api-3.0.0.sap-17.jar
olingo-odata2-api-3.0.0.sap-17.jar
olingo-odata2-api-annotation-3.0.0.sap-17.jar
OpenConnectors.monitor-1.0.0.jar
org.antlr.antlr4-runtime-4.7.2.jar
org.apache.activemq.activemq-client-5.16.1.sap-03.jar
org.apache.activemq.activemq-jms-pool-5.16.1.jar
org.apache.activemq.activemq-pool-5.16.1.jar
org.apache.camel.camel-ahc-2.24.2.sap-21.jar
org.apache.camel.camel-amqp-2.24.2.jar
org.apache.camel.camel-base64-2.24.2.jar
org.apache.camel.camel-blueprint-2.24.2.sap-21.jar
org.apache.camel.camel-core-2.24.2.sap-21.jar
org.apache.camel.camel-core-osgi-2.24.2.jar
org.apache.camel.camel-csv-2.24.2.jar
org.apache.camel.camel-cxf-2.24.2.sap-21.jar
org.apache.camel.camel-cxf-transport-2.24.2.jar
org.apache.camel.camel-facebook-2.24.2.jar
org.apache.camel.camel-ftp-2.24.2.sap-21.jar
org.apache.camel.camel-http-common-2.24.2.sap-21.jar
org.apache.camel.camel-jms-2.24.2.sap-21.jar
org.apache.camel.camel-kafka-2.24.2.sap-21.jar
org.apache.camel.camel-mail-2.24.2.sap-21.jar
org.apache.camel.camel-netty4-2.24.2.sap-21.jar
org.apache.camel.camel-quartz-2.24.2.jar
org.apache.camel.camel-quartz2-2.24.2.jar
org.apache.camel.camel-saxon-2.24.2.jar
org.apache.camel.camel-servlet-2.24.2.sap-21.jar
org.apache.camel.camel-spring-2.24.2.jar
org.apache.camel.camel-spring-ldap-2.24.2.jar
org.apache.camel.camel-sql-2.24.2.jar
org.apache.camel.camel-tarfile-2.24.2.sap-21.jar
org.apache.camel.camel-twitter-2.24.2.jar
org.apache.camel.camel-zipfile-2.24.2.jar
org.apache.commons.collections-3.2.2.jar
org.apache.commons.commons-beanutils-1.9.4.jar
org.apache.commons.commons-compress-1.21.0.jar
org.apache.commons.commons-pool2-2.9.0.jar
org.apache.commons.csv-1.6.0.jar
org.apache.commons.lang3-3.9.0.jar
org.apache.commons.net-3.6.0.jar
org.apache.commons.pool-1.6.0.jar
org.apache.cxf.cxf-core-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-bindings-soap-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-bindings-xml-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-databinding-jaxb-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-features-logging-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-frontend-jaxrs-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-frontend-jaxws-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-frontend-simple-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-management-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-rs-client-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-rs-extension-providers-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-rs-extension-search-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-rs-service-description-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-security-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-security-saml-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-transports-http-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-ws-addr-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-ws-policy-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-ws-rm-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-ws-security-3.2.11.sap-03.jar
org.apache.cxf.cxf-rt-wsdl-3.2.11.sap-03.jar
org.apache.felix.scr.compat-1.0.4.jar
org.apache.geronimo.specs.geronimo-j2ee-management_1.1_spec-1.0.1.jar
org.apache.geronimo.specs.geronimo-jms_2.0_spec-1.0.0.alpha-2.jar
org.apache.neethi-3.1.1.jar
org.apache.olingo.odata-client-api-4.7.1.sap-18.jar
org.apache.olingo.odata-client-core-4.7.1.sap-18.jar
org.apache.olingo.odata-commons-api-4.7.1.sap-18.jar
org.apache.olingo.odata-commons-core-4.7.1.sap-18.jar
org.apache.qpid.jms.client-0.59.0.jar
org.apache.qpid.proton-j-0.33.8.jar
org.apache.santuario.xmlsec-2.1.4.jar
org.apache.servicemix.bundles.c3p0-0.9.5.4_1.jar
org.apache.servicemix.bundles.facebook4j-2.4.12.1.jar
org.apache.servicemix.bundles.jzlib-1.0.7.2.jar
org.apache.servicemix.bundles.kafka-clients-2.7.0.1.jar
org.apache.servicemix.bundles.quartz-1.8.6.1.jar
org.apache.servicemix.bundles.spring-batch-infrastructure-4.1.2.RELEASE_1.jar
org.apache.servicemix.bundles.spring-beans-5.3.8.1.jar
org.apache.servicemix.bundles.spring-context-5.3.8.1.jar
org.apache.servicemix.bundles.spring-core-5.3.8.1.jar
org.apache.servicemix.bundles.spring-expression-5.3.8.1.jar
org.apache.servicemix.bundles.spring-jdbc-5.3.8.1.jar
org.apache.servicemix.bundles.spring-jms-5.3.8.1.jar
org.apache.servicemix.bundles.spring-ldap-2.3.2.RELEASE_2.jar
org.apache.servicemix.bundles.spring-tx-5.3.8.1.jar
org.apache.servicemix.bundles.twitter4j-4.0.7.1.jar
org.apache.servicemix.bundles.wsdl4j-1.6.3.1.jar
org.apache.servicemix.bundles.xmlresolver-1.2.0.5.jar
org.apache.ws.xmlschema.core-2.2.4.jar
org.apache.wss4j.wss4j-bindings-2.2.4.jar
org.apache.wss4j.wss4j-policy-2.2.4.jar
org.apache.wss4j.wss4j-ws-security-common-2.2.4.jar
org.apache.wss4j.wss4j-ws-security-dom-2.2.4.jar
org.apache.wss4j.wss4j-ws-security-policy-stax-2.2.4.jar
org.apache.wss4j.wss4j-ws-security-stax-2.2.4.jar
org.asynchttpclient.async-http-client-2.7.0.sap-04.jar
org.asynchttpclient.async-http-client-netty-utils-2.7.0.sap-04.jar
org.codehaus.jettison.jettison-1.4.0.jar
org.fusesource.hawtbuf.hawtbuf-1.11.0.jar
org.liquibase.osgi-3.6.2.sap-01.jar
org.postgresql.jdbc-42.2.14.jar
org.quartz-scheduler.quartz-2.3.2.sap-02.jar
org.reactivestreams.reactive-streams-1.0.2.jar
org.springframework.data.core-1.13.12.RELEASE.jar
org.xerial.snappy.snappy-java-1.1.8.1.jar
ProcessDirect.monitor-1.1.3.jar
scc.proxy-1.60.1.jar
Twitter.monitor-1.1.1.jar
Hi Vadim Klimov, Hi Martin Pankraz ,
I am also facing similar issue mentioned by Illya Kuys
I am using below code(copied from Vadim post)
Error :
javax.script.ScriptException: java.lang.Exception: java.lang.IllegalArgumentException: URI is not hierarchical@ line 46 in script2.groovy, cause: java.lang.IllegalArgumentException: URI is not hierarchical
and
I get class path as "JAR file containing class file: jar:bundle://518.0:0/!/ " when i execute the code for accessing classpath.
I suspect, due to restricted authorization i am not able to access the class path .
Could you please have a look.
Thanks in advance.
Best begards,
Naveen
Hello Naveen,
This observed behavior is a consequence of the way how an OSGi container that is now used by CPI – Apache Karaf – stores data of deployed bundles. In contrast to an earlier directory layout where all JAR files were located in a single directory, Karaf caches deployed bundles in their own sub-directories. For example, an output that you got – jar:bundle://518.0:0/!/ – suggests that the required file can be found in a version 0.0 of a bundle with ID 518. With this in mind, as well as considering standard structure of Karaf directories, we can modify the script so that it retrieves corresponding bundle file:
Note an enhanced middle part of the script code snippet: after we get location of the source of the given class, we decompose it into bundle ID and version, and make use of them when constructing a full path to the required bundle file.
Regards,
Vadim
Hello Vadim,
I tried with the modify script shared above and I am facing "FileNotFoundException". Can you please help.
Regards,
Quddus.
Hello Quddus,
Since a location of deployed bundles changed - and to allow further dynamic determination of their current location, after a bundle ID (bundleId) has been identified in the code snippet above, you can use OSGi Framework API to find a location of that bundle. Example is below:
(also ensure that you add org.osgi.framework.BundleContext and org.osgi.framework.FrameworkUtil to imports section of a script)
After the location of a bundle has been identified, you shall be able to access file content by its location.
Regards,
Vadim
Hi Vadim,
Where can we add this piece of code in the previous script (September 2019)?
Would you mind updating that one please?
Being able to test the scripts in eclipse would be great, but I have been fighting with this for a while now (downloading the required jars) and I'm feeling I won't be able to solve it by myself.
Thanks in advance!
This works for downloading a war that contains most of the "problematic" classes, so devs can prepare the Groovy Scripting Testing Environment locally.
Vadim's script was beauuuuuutiful, and I have messed it up with some workarounds, just to get it working again.
It wont work for all missing classes, but it does work, as stated before, for the "problematic ones". For the other ones, Google will do.
I have also added some comments to the code and two new features:
Example:
GET --> https://xxxxxx/http/external/trigger?lib=com.sap.it.api.msg.ExchangePropertyProvider
Regards,
Mikel
If you are trying to get the CPI JAR files in 2023, then use the below groovy script inside your IFlow and you might need to download some extra libraries if you are setting this up in IntelliJ IDEA.
Note: I have mentioned the version name as I have downloaded this at the time of setup, You can also download the latest JAR files.
The below script is a modification of code written by Mikel Maeso Zelaya
Regards,
Dwipayan Gupta
Hi Martin, Vadim,
I was trying to set up the Groovy project to test my scripts. I added the required JARs as mentioned. But I got the following error when executing the tester.groovy script. I am not able to find the class org.osgi.framework.FrameworkUtil, seems like I am missing something. Can you please advise how I can fix the issue?
Thanks Ravikanth
Update:
I did add library org.osgi.core-4.2.0.jar (found through google) and fixed the error. I could successfully run the script now. But I still feel this step is not needed and something amiss in my set up. Please let me know if I have to set up the groovy environment differently. Thanks
Hi Ravikanth,
I am on a different S-User now, so I don't messages here anymore. I am trying to replicate this on my CloudFoundry environment just now. So I think given the time that has passed there are probably some changes on the SAP side. You should be fine with your current setup. Especially if you can execute Message locally.
KR
Martin
Thanks Martin