如何为 SAP Business Objects Java SDK 设置 Eclipse 项目

How to set up Eclipse project for SAP Business Objects Java SDK

我们内部安装了 SAP BO 4.2,我被告知 REST 没有打开。我已经使用 SDK 编写了几个成功的 .Net 应用程序来连接到我们的生产 SAP 框并 运行 针对我们的生产 SAP 框,现在我正在尝试编写一个 Java 应用程序来做同样的事情,因为 Java SDK 公开了更多(和必需的)功能。

我似乎无法正确设置我的 Eclipse/Java/project 环境,甚至无法开始编码。

Windows10、64 位

Eclipse 版本:2019-03 (4.11.0)

Java版本:
openjdk 版本 "12.0.2" 2019-07-16
OpenJDK 运行时环境(build 12.0.2+10)
OpenJDK 64 位服务器 VM(构建 12.0.2+10,混合模式,共享)

我创建了一个新的 "Java EE" -> "Application Client Project"。

我无法将以下代码获取到 "Run As Application":

import com.crystaldecisions.sdk.framework.CrystalEnterprise;
import com.crystaldecisions.sdk.exception.SDKException;
import com.crystaldecisions.sdk.framework.IEnterpriseSession;

public class Main {

    public static void main(String[] args) {

        IEnterpriseSession oEnterpriseSession = null;

        String username = "username";
        String password = "password";
        String cmsname = "server";
        String authenticationType = "secEnterprise";

        try {
            oEnterpriseSession = CrystalEnterprise.getSessionMgr().logon(username, password, cmsname, authenticationType);

            if (oEnterpriseSession == null) {
                System.out.print("login failed");
            }
        } catch (SDKException sdkEx) {
            System.out.print(sdkEx);
        }

        //do processing here

    }

    public Main() {
        super();

    }

}

我在构建路径中引用了以下库:

C:/Program Files (x86)/SAP BusinessObjects/SAP BusinessObjects Enterprise XI 4.0/java/lib/cecore.jar
C:/Program Files (x86)/SAP BusinessObjects/SAP BusinessObjects Enterprise XI 4.0/java/lib/cesession.jar
C:/Program Files (x86)/SAP BusinessObjects/SAP BusinessObjects Enterprise XI 4.0/java/lib/celib.jar
C:/Program Files (x86)/SAP BusinessObjects/SAP BusinessObjects Enterprise XI 4.0/java/lib/logging.jar
C:/Program Files (x86)/SAP BusinessObjects/SAP BusinessObjects Enterprise XI 4.0/java/lib/aspectjrt.jar
C:/Program Files (x86)/SAP BusinessObjects/SAP BusinessObjects Enterprise XI 4.0/java/lib/ceaspect.jar
C:/Program Files (x86)/SAP BusinessObjects/SAP BusinessObjects Enterprise XI 4.0/java/lib/TraceLog.jar
C:/Program Files (x86)/SAP BusinessObjects/SAP BusinessObjects Enterprise XI 4.0/java/lib/corbaidl.jar
C:/Program Files (x86)/SAP BusinessObjects/SAP BusinessObjects Enterprise XI 4.0/java/lib/ebus405.jar

我在网上搜索的所有内容都分为三类:

  1. 链接到 SAP 网站上不再有效的页面(因此重定向到一般搜索页面),或
  2. 过时的information/code,以至于我无法做同样的事情,或者
  3. 一旦我设置了本地环境并正常工作,应该可以工作的代码

此外,我能找到的所有示例都是针对 Java 服务器页面的,这不是我想要的这个项目。

当我尝试 运行 上面的代码时,我收到的错误消息是:

Exception in thread "main" java.lang.NoClassDefFoundError: org/omg/CORBA/portable/IDLEntity
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.initializeDefaultPolicies(ORB_impl.java:369)
    at com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.initialize(ORB_impl.java:196)
    at com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.setParameters(ORB_impl.java:812)
    at com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.init(ORB_impl.java:1313)
    at com.crystaldecisions.enterprise.ocaframework.idl.helper.ORBHelper.init(ORBHelper.java:57)
    at com.crystaldecisions.enterprise.ocaframework.ServiceMgr.<init>(ServiceMgr.java:402)
    at com.crystaldecisions.enterprise.ocaframework.ServiceMgrFactory.getServiceMgr(ServiceMgrFactory.java:66)
    at com.crystaldecisions.sdk.occa.security.internal.LogonService.ensureServiceStub(LogonService.java:701)
    at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:885)
    at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:860)
    at com.crystaldecisions.sdk.occa.security.internal.LogonService.userLogon(LogonService.java:240)
    at com.crystaldecisions.sdk.occa.security.internal.SecurityMgr.userLogon(SecurityMgr.java:166)
    at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody0(SessionMgr.java:823)
    at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody1$advice(SessionMgr.java:523)
    at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon(SessionMgr.java:1)
    at Main.main(Main.java:17)
Caused by: java.lang.ClassNotFoundException: org.omg.CORBA.portable.IDLEntity
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 34 more

我知道从 Java 9 开始,java.CORBA 已被弃用(并在 Java 11 中删除)。我已经尝试将编译器合规性和方面更改为 1.8,但没有任何更改。此外,jar 文件 "ebus405.jar" 包含 CORBA 类.

虽然我很感激能帮助您解决这个错误信息,但如果有人能告诉我一个更直接的方法来开始这个,我会更感激。我会接受以下任何一项:

  1. 使用不同的 IDE(我不依赖于 Eclipse)
  2. 引用 different/additional SDK Jars
  3. 从不同的角度解决这个问题(例如,不同的 Java 项目类型)

我认为您没有使用正确的 JRE 系统库。如有疑问,使用 BusinessObjects 客户端安装附带的始终是安全的。

我正在使用 SAP BusinessObjects 4.1 SP6,所以对我来说它位于此处 - "C:\Program Files (x86)\SAP BusinessObjects\SAP BusinessObjects Enterprise XI 4.0\win32_x86\jre"。根据你的版本检查相应的位置,并在Eclipse中将其设置为项目的默认位置,然后重试。

SAP 肯定不支持Java12,在BW Modeling tools 中明确指出Eclipse 的推荐JRE 是8 或11,而不是12。

我不知道你是否使用这些工具,但我想这种依赖性也适用于其他情况。

SAP 没有在任何地方明确说明这一点,但之前在所有文档中都指出仅支持 Oracle Java,这已被多个用户体验证实。我对 Oracle JDK 从来没有任何问题,但对 OpenJDK 有任何问题。所以我建议你切换到 Oracle 11 JDK.

作为最后一步,按照建议here(第 6.1.1 章),您可以尝试 SAP 专有 Java 虚拟机,可在支持门户上获得。