on 03-27-2020 9:18 AM
Dear Experts,
When I tried to call Remote Function Module on S/4 HANA using SAP Cloud SDK for Java, following exception occurs.
java.lang.ClassNotFoundException: com.sap.conn.jco.JCoException
The application is deployed on SAP Cloud Platform CF application run time.
Does anybody know how to deal with this issue?
The code is as following.
package com.sap.cloud.sdk;
import com.google.gson.Gson;
import com.sap.cloud.sdk.cloudplatform.connectivity.*;
import com.sap.cloud.sdk.s4hana.connectivity.exception.RequestExecutionException;
import com.sap.cloud.sdk.s4hana.connectivity.rfc.RfmRequest;
import com.sap.cloud.sdk.s4hana.connectivity.rfc.RfmRequestResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/bapi")
public class BapiServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(BapiServlet.class);
private static final Destination destinationRfc =
DestinationAccessor.getDestination("Erp1809rfc");
@Override
protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
throws IOException {
logger.info("Start get method: " + request.getRequestURI());
Iterable names = destinationRfc.getPropertyNames();
logger.info(new Gson().toJson(names));
try {
final RfmRequestResult rfmTest = new RfmRequest("RFCPING")
.execute(destinationRfc);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(rfmTest));
} catch (RequestExecutionException e) {
e.printStackTrace();
}
}
}
The log is as following.
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT [CONTAINER] a].[localhost].[/].[com.sap.cloud.sdk.BapiServlet] SEVERE Servlet.service() for servlet [com.sap.cloud.sdk.BapiServlet] in context with path [] threw exception
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT com.sap.cloud.sdk.cloudplatform.exception.ShouldNotHappenException: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: javax.servlet.ServletException: Servlet execution threw an exception
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.cloudplatform.servlet.RequestAccessorFilter.doFilter(RequestAccessorFilter.java:74)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpCachingHeaderFilter.doFilter(HttpCachingHeaderFilter.java:83)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.cloudplatform.security.servlet.HttpSecurityHeadersFilter.doFilter(HttpSecurityHeadersFilter.java:41)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.filters.RestCsrfPreventionFilter.doFilter(RestCsrfPreventionFilter.java:116)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.cloudfoundry.router.ClientCertificateMapper.doFilter(ClientCertificateMapper.java:79)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:747)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at java.lang.Thread.run(Thread.java:748)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT Caused by: com.sap.cloud.sdk.cloudplatform.thread.exception.ThreadContextExecutionException: javax.servlet.ServletException: Servlet execution threw an exception
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.execute(AbstractThreadContextExecutor.java:325)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.cloudplatform.servlet.RequestAccessorFilter.doFilter(RequestAccessorFilter.java:71)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT ... 32 more
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT Caused by: javax.servlet.ServletException: Servlet execution threw an exception
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:238)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.cloudplatform.servlet.RequestAccessorFilter.lambda$doFilter$1(RequestAccessorFilter.java:71)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.lambda$execute$0(AbstractThreadContextExecutor.java:317)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.cloudplatform.thread.ThreadContextCallable.call(ThreadContextCallable.java:247)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.cloudplatform.thread.AbstractThreadContextExecutor.execute(AbstractThreadContextExecutor.java:319)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT ... 33 more
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT Caused by: java.lang.NoClassDefFoundError: com/sap/conn/jco/JCoException
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.s4hana.connectivity.rfc.RfmTransactionFactory.createJCoTransaction(RfmTransactionFactory.java:32)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.s4hana.connectivity.rfc.AbstractTransactionFactory.createTransaction(AbstractTransactionFactory.java:39)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.s4hana.connectivity.rfc.RemoteFunctionRequestExecutor.execute(RemoteFunctionRequestExecutor.java:41)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.s4hana.connectivity.rfc.RfmRequest.execute(RfmRequest.java:102)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at com.sap.cloud.sdk.BapiServlet.doGet(BapiServlet.java:47)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT ... 41 more
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT Caused by: java.lang.ClassNotFoundException: com.sap.conn.jco.JCoException
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
2020-03-27T17:40:00.72+0900 [APP/PROC/WEB/0] OUT ... 49 more
Regards,
Yohei
Hi all,
Finally I've solved the issue.
The cause is that my cf cli was old(ver 6.37) and had a following bug.
https://github.com/cloudfoundry/cli/issues/1367
"cf push" ignores manifest.yml, so my app didn't use sap_java_buildpack.
Finally I summed up the steps into "How to call function modules using SAP Cloud SDK for Java".
Regards,
Yohei
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Kavitha-san,
Thank you for helpful advises.
I use the sap_java_buildpack and don't use spring-boot.
Today or tomorrow, I'm going to check ivan.mirisola's proposal.
Regards,
Yohei
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Kavitha-san,
Here is my manifest.yml and other files.
https://github.com/YoheiFukuhara/cloud-sdk-test/blob/master/manifest.yml
Regards,
Yohei
Hi Yohei,
Apologies for the delay in getting back to you. We couldn't find any issues with your manifest.yml file. As the issue doesn't seem to be Cloud SDK related, I would suggest you to raise this issue with the Java connector team.You may contact them here or raise a BCP incident under the component BC-MID-CON-JCO.
Regards,
Kavitha
Hi, Kavitha-san,
Here is my POM.xml of "application" directory.
<?xml version='1.0' encoding='utf-8'?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">;
<modelVersion>4.0.0</modelVersion>
<name>cloud-sdk-test - Application</name>
<description>cloud-sdk-test - Application</description>
<artifactId>cloud-sdk-test-application</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<parent>
<groupId>com.sap.cloud.sdk</groupId>
<artifactId>cloud-sdk-test</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<exclusions>
<exclusion>
<groupId>org.checkerframework</groupId>
<artifactId>checker-qual</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.sap.cloud.sdk.cloudplatform</groupId>
<artifactId>scp-cf</artifactId>
</dependency>
<dependency>
<groupId>com.sap.cloud.sdk.s4hana</groupId>
<artifactId>s4hana-all</artifactId>
</dependency>
<dependency>
<groupId>com.sap.cloud.sdk.cloudplatform</groupId>
<artifactId>security-servlet</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sap.cloud.sdk.plugins/usage-analytics-maven-plugin -->
<dependency>
<groupId>com.sap.cloud.sdk.plugins</groupId>
<artifactId>usage-analytics-maven-plugin</artifactId>
<version>3.15.1</version>
</dependency>
<!-- for vdm generator -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sap.cloud.sdk.services/recast-ai -->
<!-- for recast-ai -->
<dependency>
<groupId>com.sap.cloud.sdk.services</groupId>
<artifactId>recast-ai</artifactId>
<version>3.15.1</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<attachClasses>true</attachClasses>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomee.maven</groupId>
<artifactId>tomee-maven-plugin</artifactId>
<version>7.0.5</version>
<configuration>
<tomeeClassifier>webprofile</tomeeClassifier>
<context>ROOT</context>
<libs>
<lib>remove:slf4j-jdk14</lib>
</libs>
<tomeeShutdownPort>8006</tomeeShutdownPort>
</configuration>
</plugin>
<plugin>
<groupId>com.sap.cloud.sdk.plugins</groupId>
<artifactId>usage-analytics-maven-plugin</artifactId>
<version>3.15.1</version>
<executions>
<execution>
<goals>
<goal>usage-analytics</goal>
</goals>
<configuration>
<skipUsageAnalytics>true</skipUsageAnalytics>
<generateSalt>true</generateSalt>
<!--
Note: A random salt is auto-generated once the project is built for the first time.
Please keep the generated salt in the POM file, for example, when pushing to git.
To learn more, visit: https://blogs.sap.com/2018/10/23/usage-analytics-s4sdk/
-->
<salt />
</configuration>
</execution>
</executions>
</plugin>
<!-- Start of Custom Added -->
<plugin>
<groupId>com.sap.cloud.sdk.datamodel</groupId>
<artifactId>odata-generator-maven-plugin</artifactId>
<version>3.15.1</version>
<executions>
<execution>
<id>generate-consumption</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputDirectory>${project.basedir}/edmx</inputDirectory>
<outputDirectory>${project.build.directory}/vdm</outputDirectory>
<deleteOutputDirectory>true</deleteOutputDirectory>
<packageName>com.vdm</packageName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/vdm</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<!-- End of Custom Added -->
</plugins>
</build>
</project>
Regards,
Yohei
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Yohei,
Thanks for providing the Pom file of the application directory.
But to help in answering your question, I would need few more inputs. Can you please check if your manifest.yml file contains the sap_java_buildpack ? Here is a sample manifest.yml file below with the sap_java_buildpack included.
Also, is your application a spring-boot based one? You can find this out by checking your pom. It is a spring-boot project if there is any dependency with group-id as org.springframework.boot. Here is an example:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Regards,
Kavitha
Hi fukuhara,
I have had some trouble in the past to call BAPIs (RFCs) from Cloud Foundry using the Cloud Connector. Hence, I've made a git repository in which you can test it.
https://github.com/ivanmir/cct-ts-connector
Here you will find the approuter:
https://github.com/ivanmir/cct-approuter
Notice that the SAP's Java Buildpack already contains the JCO libraries - and this is what makes it difficult to undertand. When you deploy your app, the runtime should already be OK to run JCO, but when deploying locally you must add a dependency to Neo SDK (which also contains the JCO libraries). My repo contains such dependency as "provided" - since we ought to find the JCO libraries as well after we deploy it to CF.
Hope this helps.
Best regards,
Ivan
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
87 | |
10 | |
10 | |
9 | |
7 | |
6 | |
6 | |
5 | |
4 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.