通过 Java 连接 SAP 时出现异常

Posted

技术标签:

【中文标题】通过 Java 连接 SAP 时出现异常【英文标题】:Exception while connecting SAP through Java 【发布时间】:2012-11-18 14:18:43 【问题描述】:

您能告诉我解决以下问题的解决方案吗---

我在尝试通过 Java 类连接 SAP 相关文件时遇到此异常,即使 sapjco3.jar 在我的库路径中。我在 Windows XP 和 Windows Server 98 中尝试过。

java.lang.UnsatisfiedLinkError: no sapjco3 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at com.sap.conn.jco.rt.DefaultJCoRuntime.loadLibrary(DefaultJCoRuntime.java:441)
at com.sap.conn.jco.rt.DefaultJCoRuntime.registerNativeMethods(DefaultJCoRuntime.java:307)
at com.sap.conn.jco.rt.JCoRuntime.registerNatives(JCoRuntime.java:987)
at com.sap.conn.rfc.driver.CpicDriver.<clinit>(CpicDriver.java:948)
at com.sap.conn.rfc.engine.DefaultRfcRuntime.getVersion(DefaultRfcRuntime.java:43)
at com.sap.conn.rfc.api.RfcApi.RfcGetVersion(RfcApi.java:259)
at com.sap.conn.jco.rt.MiddlewareJavaRfc.<clinit>(MiddlewareJavaRfc.java:200)
at com.sap.conn.jco.rt.DefaultJCoRuntime.initialize(DefaultJCoRuntime.java:73)
at com.sap.conn.jco.rt.JCoRuntimeFactory.<clinit>(JCoRuntimeFactory.java:23)
at com.sap.conn.jco.rt.RuntimeEnvironment.<init>(RuntimeEnvironment.java:40)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.sap.conn.jco.ext.Environment.getInstance(Environment.java:121)
at com.sap.conn.jco.ext.Environment.registerDestinationDataProvider(Environment.java:216)
at de.vogella.sap.rfc.core.connection.Connection.<init>(Connection.java:37)
at struct.actions.GestReservaSap.<clinit>(GestReservaSap.java:63)
at eu.sony.com.moduloreservas.ReservasMainClass.main(ReservasMainClass.java:259)

【问题讨论】:

【参考方案1】:

SAP Java 连接器在内部使用本机库连接到 SAP。这个本地库不是 sapjco3.jar,而是 sapjco3.dll(在 Windows 系统上)。 IE。 dll 文件必须位于 Java 库路径中的文件夹中。

后者是一个Java系统属性,你可以在你的应用程序中通过调用来访问它

System.getProperty("java.library.path")

然后您可以将 sapjco3.dll 放入您的库路径中已经存在的文件夹之一(在 Windows 上,例如 C:\WINNT\system32 之类的文件夹),或者将库路径设置为特定文件夹通过显式设置库路径:

在应用程序代码中通过设置 System.setProperty("java.library.path", "C:\path\to\folder\with\dll\") 在访问 SAP JCo 之前 或使用命令行参数启动 Java 时 -Djava.library.path=C:\path\to\folder\with\dll\

由于将 dll 放入系统特定文件夹(如 winnt\system32)可能不仅对您的应用程序有影响,而且对其他人也有影响,因此建议将包含 sapjco3.dll 的文件夹添加到您的应用程序的库路径中。更灵活的方法是通过命令行指定它,如上所示,这样您就不会对其进行硬编码。

【讨论】:

以上是关于通过 Java 连接 SAP 时出现异常的主要内容,如果未能解决你的问题,请参考以下文章

在 android Nougat 中使用自签名证书通过 https 连接时出现 SSL 握手异常

通过 Java 发送邮件时出现异常

尝试连接用户时出现休眠异常 - 字段“用户名”没有默认值

通过java将数据输入H2数据库时出现SQL异常

尝试从 SAP HANA DB 创建实体模型时出现连接错误

使用 jtds 进行 SqlServer 连接时出现异常