在Cloud Foundry中访问SAP Java Connector

2020-08-22 02:23发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在尝试弄清楚访问Cloud Foundry上的SAP Java Connector所需的资源。 根据文档中的页,需要完成三件事 满意:

  1. 我必须使用SAP Java Buildpack
  2. 我必须将应用程序绑定到连接服务的实例
  3. 我必须将应用程序绑定到目标服务的实例

我创建了一个简单的maven项目,在此我满足了所有这三个条件。 可以在此处找到该项目的代码。

我的主要方法:

公共静态void main(String [] args)
 {
     尝试{
         JCoDestination目的地= JCoDestinationManager.getDestination(" TEST");
         System.out.println("目标存在:" + destination.getDestinationName());
     } catch(JCoException e){
         e.printStackTrace();
     }
 } 

我正在使用此依赖关系来访问JCo类(来自教程):

 
    com.sap.cloud 
    neo-java-web-api 
    [3.71.8,4.0.0)
   提供
  

这是我的清单文件:

-
 应用范围:

   -名称:jco-poc
     构建包:
       -sap_java_buildpack
     服务:
       -jco_poc_connection_service
       -jco_poc_destination_service 

但是,当我推送应用程序时,出现以下错误:

 ERR错误:发生了JNI错误,请检查您的安装并重试
 错误(/bas/sapjvm/81_REL/src/8/jdk/src/share/bin/java.c 1628)
 线程"主"中的ERR异常java.lang.NoClassDefFoundError:com/sap/conn/jco/JCoException
 java.lang.Class.getDeclaredMethods0(本地方法)处的ERR
 java.lang.Class.privateGetDeclaredMethods的ERR(Class.java:2724)
 java.lang.Class.privateGetMethodRecursive的ERR(Class.java:3071)
 java.lang.Class.getMethod0(Class.java:3041)的ERR
 java.lang.Class.getMethod(Class.java:1807)的ERR
 sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:564)的ERR
 sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:546)的ERR
 ERR原因:java.lang.ClassNotFoundException:com.sap.conn.jco.JCoException
 java.net.URLClassLoader.findClass(URLClassLoader.java:444)的ERR
 java.lang.ClassLoader.loadClass的ERR(ClassLoader.java:480)
 sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:384)的ERR
 java.lang.ClassLoader.loadClass上的ERR(ClassLoader.java:413)
 ERR ...另外7个
 

如果他们希望使用SAP Java Connector或指出我在示例中做错了什么,您可以详细说明应用程序的要求。

我使用正确的依赖项吗?

非常感谢您的帮助。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在尝试弄清楚访问Cloud Foundry上的SAP Java Connector所需的资源。 根据文档中的页,需要完成三件事 满意:

  1. 我必须使用SAP Java Buildpack
  2. 我必须将应用程序绑定到连接服务的实例
  3. 我必须将应用程序绑定到目标服务的实例

我创建了一个简单的maven项目,在此我满足了所有这三个条件。 可以在此处找到该项目的代码。

我的主要方法:

公共静态void main(String [] args)
 {
     尝试{
         JCoDestination目的地= JCoDestinationManager.getDestination(" TEST");
         System.out.println("目标存在:" + destination.getDestinationName());
     } catch(JCoException e){
         e.printStackTrace();
     }
 } 

我正在使用此依赖关系来访问JCo类(来自教程):

 
    com.sap.cloud 
    neo-java-web-api 
    [3.71.8,4.0.0)
   提供
  

这是我的清单文件:

-
 应用范围:

   -名称:jco-poc
     构建包:
       -sap_java_buildpack
     服务:
       -jco_poc_connection_service
       -jco_poc_destination_service 

但是,当我推送应用程序时,出现以下错误:

 ERR错误:发生了JNI错误,请检查您的安装并重试
 错误(/bas/sapjvm/81_REL/src/8/jdk/src/share/bin/java.c 1628)
 线程"主"中的ERR异常java.lang.NoClassDefFoundError:com/sap/conn/jco/JCoException
 java.lang.Class.getDeclaredMethods0(本地方法)处的ERR
 java.lang.Class.privateGetDeclaredMethods的ERR(Class.java:2724)
 java.lang.Class.privateGetMethodRecursive的ERR(Class.java:3071)
 java.lang.Class.getMethod0(Class.java:3041)的ERR
 java.lang.Class.getMethod(Class.java:1807)的ERR
 sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:564)的ERR
 sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:546)的ERR
 ERR原因:java.lang.ClassNotFoundException:com.sap.conn.jco.JCoException
 java.net.URLClassLoader.findClass(URLClassLoader.java:444)的ERR
 java.lang.ClassLoader.loadClass的ERR(ClassLoader.java:480)
 sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:384)的ERR
 java.lang.ClassLoader.loadClass上的ERR(ClassLoader.java:413)
 ERR ...另外7个
 

如果他们希望使用SAP Java Connector或指出我在示例中做错了什么,您可以详细说明应用程序的要求。

我使用正确的依赖项吗?

非常感谢您的帮助。

付费偷看设置
发送
6条回答
SKY徐
1楼 · 2020-08-22 03:02.采纳回答

您好,Morten,

好,您添加了附加注释,否则我会指向该教程。 在通过RFC调用ABAP功能模块的限制部分中,提到您 需要在buildpack提供的TomEE或Tomcat容器上运行您的应用程序。 因此,您需要将其作为Web应用程序运行。 您打算使用哪种应用程序?

最诚挚的问候,
Markus

hongfeng1314
2楼-- · 2020-08-22 02:50

其他信息:

我正在 cf.eu10.hana.ondemand使用SCP Cloud Foundry试用帐户。 .com

我尝试了教程,即 为我工作。 但是,我试图弄清楚如何避免创建Web应用程序。

哎,真难
3楼-- · 2020-08-22 02:54

嗨,Morten,

我来自 SAP Cloud SDK 团队。 我们努力利用客户和同事对SCP和S/4扩展应用程序的现代化开发。 如果您的目标是通过RFC/JCo运行BAPI查询,那么我们强烈建议您使用Java库。 尽管最好通过OData访问S/4-

给出我们的当前教程旧教程以下步骤可能对您很有趣:

确定已设置您的开发环境,我们建议您检出第一个 SAP Cloud SDK 中的" hello world"教程。 它可以确保您的应用程序已准备好进行调试,部署和启动所有必需的基本依赖项。

为了执行自定义BAPI查询,请找到"深潜"文章,以获取有关如何在S/4内部部署BAPI 。 请注意,本教程侧重于 SAP Cloud SDK 的版本过时的版本 2 。 如初始指南中所述,我们强烈建议您使用最新版本。 您可以确保在查看 Maven Central

自从编写"深潜"以来,有些事情发生了变化:类名已从 BapiQuery 更改为 BapiRequest ,而不是 ErpConfigContext "执行"方法需要一个 Destination 引用。 请随时尝试。 并在需要帮助或进一步帮助时告诉我们。

最诚挚的问候,

亚历山大

风早神人
4楼-- · 2020-08-22 02:48

嗨马库斯,

谢谢您的回答。 正如您所写的那样,我怀疑情况就是如此,我需要在TomEE容器中进行部署才能使其正常工作。

我正在尝试构建一个应用程序的概念验证,该应用程序使用来自SAP Enterprise Messaging的消息并使用BAPI将条目写入SAP。

之所以采用这种体系结构,是因为我想最大程度地减少内部部署系统上启动和运行解决方案所需的工作量。 这样,我只需要在"内部"做两件事:一个具有RFC访问权限的用户和一个指向我的SCP子域的云连接器。

如果将我的应用程序部署为Web应用程序,我仍然可以这样做,所以我必须走这条路。

追夢秋陽
5楼-- · 2020-08-22 02:47

MortenToxværd我也有同样的问题。 我一直在将帖子发送到com.sap.cloud.sdk.cloudplatform的GitHub存储库,并与他们讨论了很多天而没有找到有效的解决方案。
最后,他们告诉我问题是真实的,他们
请问您能为我提供适合您的确切代码段吗?
准确地说:您获得了令牌,但是随后如何使用它进行Jco调用
我设法获得了与XUAA服务联系并为其提供凭据的各种令牌,但是后来我没有发现在哪里使用令牌。

谢谢!

太Q了
6楼-- · 2020-08-22 02:57

Jaeschke Reinhard 我正在 在http请求范围之外调用Java连接器时,也会遇到同样的问题。

迁移博客文章概述了在给定上下文中调用代码的不同方法。 我没有用JCo尝试所有这些方法,因此我怀疑JCo读取用户信息的方式有问题。

但是,我找到了一种解决方法,可以使用该解决方法,直到问题解决为止。 这是使用从客户端凭据生成的XSUAA令牌调用应用程序中的终结点。 在该servlet的上下文中,JCo可以工作。

您可以通过以下方式获取令牌:

 AuthToken令牌= AuthTokenAccessor.getXsuaaServiceToken(); //用于Cloud SDK方法的AuthToken

 字符串bearerToken = token.getJwt()。getToken(); //与授权标头一起使用的字符串令牌
可以通过包含以下依赖项来使用

AuthTokenAccessor:

 
      com.sap.cloud.sdk.cloudplatform 
     安全性
      3.13.0 
  

一周热门 更多>