I need to connect to an AWS S3 bucket to retrieve data from it. I can achieve this by using AWS open-source JARs (aws-java-sdk-core, aws-java-sdk-s3) along with Java code. However, I've noticed that the code only works in my IDE when I delete a few SailPoint JARs from my project.
Actually, I need to run this code through the SailPoint provisioning rule. I'm encountering some errors even after adding the necessary external JARs in the SailPoint installation location. Can someone share their thoughts on this? We were using an out-of-the-box AWS connector, and we need to somehow inject the following source code into the provisioning rules or a standalone rule to retrieve data from the S3 bucket.
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;
String accessKey = "***";
String secretKey = "**";
String region = "***";
String bucketName = "***";
String objectKey = "****";
// TODO Auto-generated method stub
BasicAWSCredentials awsCrds = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(awsCrds)).build();
try {
S3Object s3object = s3Client.getObject(bucketName, objectKey);
if (null != s3object) {
S3ObjectInputStream inputStream = s3object.getObjectContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null)
{
System.out.println("Response line is " + line);
}
inputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}`
Could you share the errors.
A quick simple way would be to package it in a plugin and extend the Base Scheduler Task (not sure if the name is right, but you can find it in docs). Plugins are supposed to have class / jar loading isolation.
Hi Sandeep,
Here its an error, another note is we were executing this via CloudGateway Server(SailPoint->CloudGateway->AWS)
Internal error: 500 Messeage :- "{ExceptionType=java.lang.RuntimeException, LocalizedMessage=sailpoint.connector.ConnectorException: BeanShell script error: bsh.EvalError: Sourced file: inline evaluation of: ``import java.io.BufferedReader; import java.io.IOException; import java.io.In . . . '' : Typed variable declaration : Error in method invocation: Method withCredentials(com.amazonaws.auth.AWSStaticCredentialsProvider) not found in class'com.amazonaws.services.s3.AmazonS3ClientBuilder' : at Line: 21 : in file: inline evaluation of: ``import java.io.BufferedReader; import java.io.IOException; import java.io.In . . . '' : .withCredentials ( new AWSStaticCredentialsProvider ( awsCrds ) ) \n BSF info: ****RuleName**** at line: 0 column: columnNo, StackTrace=[sailpoint.connector.ConnectorProxy$CustomizingIterator.peek(ConnectorProxy.java:1465), sailpoint.connector.ConnectorProxy$CustomizingIterator.hasNext(ConnectorProxy.java:1473), sailpoint.cloud.container.Container.aggregate(Container.java:347), sailpoint.gateway.ContainerIntegration.aggregate(ContainerIntegration.java:68), sailpoint.gateway.CIBBaseServlet.performAggregation(CIBBaseServlet.java:886), sailpoint.gateway.CIBBaseServlet.processGetRequest(CIBBaseServlet.java:556), sailpoint.gateway.CIBBaseServlet.doGet(CIBBaseServlet.java:334), sailpoint.integration.RestServlet.doGet(RestServlet.java:575), javax.servlet.http.HttpServlet.service(HttpServlet.java:529), sailpoint.integration.RestServlet.service(RestServlet.java:123), javax.servlet.http.HttpServlet.service(HttpServlet.java:623), org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199), org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144), org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51), org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168), org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144), org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168), org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90), org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482), org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130), org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93), org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:656), org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74), org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346), org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397), org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63), org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:935), org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1792), org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52), org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1189), org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:658), org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63), java.base/java.lang.Thread.run(Thread.java:840)]}"
Hi @ramireddy ,
Can you make sure you are using the correct API , Download the current version of the API . As per error it seems method does not exist . Do one thing , import same jars in intellij or eclipse whatever IDE you are using , and verify the signature of method etc .
If looks good , then try to call it from standalone rule just to figure the correct methods , inputs etc .
This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.