无法从 tomcat 中部署的 jar 文件中提取 dll 文件
Could not extract dll file from jar file deployed in tomcat
我开发了一个示例 java Web 应用程序,其中包含用于 SSO 身份验证的 Waffle。我正在使用带有 Tomcat 8 的 Waffle 1.8。我在我的开发环境中 运行ning 并成功验证了它(Java 1.8,Tomcat 8,Windows 2012 R2 服务器)。但是当我 运行 在生产环境(与开发环境相同)中使用相同的应用程序时,它在尝试访问 url:
时出现以下错误
SEVERE [http-nio-443-exec-7] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Jersey REST Service] in context with path [/Auth-Test] threw exception [Filter execution threw an exception] with root cause java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/win32-x86-64/jnidispatch.dll) not found in resource path ([file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/classes/, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/asm-3.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/guava-18.0.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/jersey-bundle-1.17.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/jna-4.2.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/jna-platform-4.2.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/log4j-1.2.8.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/slf4j-api-1.7.12.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/waffle-jna-1.8.0.jar])at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:866).....
dll 文件 (com/sun/jna/win32-x86-64/jnidispatch.dll) 位于 jna-4.2.1.jar 中,jna 应该将其提取到 Tomcat 8.0/temp 文件夹。在我的开发服务器中,在临时文件夹下创建了一个文件夹,并在该文件夹内创建了几个 dll 文件。而在产品服务器中,在临时文件夹中创建了一个空文件夹。根据我的理解,jna 无法将 dll 文件从 jar 提取到外部位置。我还尝试将 jna-4.2.1.jar 和 jna-platform-4.2.1.jar 从 WEB-INF/lib/ 移动到 tomcat8/lib。仍然没有成功。
我还验证了 tomcat 运行ning 没有安全管理员确认问题与访问权限无关。
现在我不知道该怎么办。如果提供解决方案或至少为我指出解决问题的方向,那将是一个很大的帮助。提前致谢。
我已经解决了这个问题。
问题的根本原因是 jna jar 文件在将 war 文件传输到 prod 服务器时损坏了。我用它开始工作的 jar 文件的新副本替换了 prod 服务器中的 jna jar 文件。
我开发了一个示例 java Web 应用程序,其中包含用于 SSO 身份验证的 Waffle。我正在使用带有 Tomcat 8 的 Waffle 1.8。我在我的开发环境中 运行ning 并成功验证了它(Java 1.8,Tomcat 8,Windows 2012 R2 服务器)。但是当我 运行 在生产环境(与开发环境相同)中使用相同的应用程序时,它在尝试访问 url:
时出现以下错误SEVERE [http-nio-443-exec-7] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Jersey REST Service] in context with path [/Auth-Test] threw exception [Filter execution threw an exception] with root cause java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/win32-x86-64/jnidispatch.dll) not found in resource path ([file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/classes/, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/asm-3.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/guava-18.0.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/jersey-bundle-1.17.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/jna-4.2.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/jna-platform-4.2.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/log4j-1.2.8.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/slf4j-api-1.7.12.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/waffle-jna-1.8.0.jar])at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:866).....
dll 文件 (com/sun/jna/win32-x86-64/jnidispatch.dll) 位于 jna-4.2.1.jar 中,jna 应该将其提取到 Tomcat 8.0/temp 文件夹。在我的开发服务器中,在临时文件夹下创建了一个文件夹,并在该文件夹内创建了几个 dll 文件。而在产品服务器中,在临时文件夹中创建了一个空文件夹。根据我的理解,jna 无法将 dll 文件从 jar 提取到外部位置。我还尝试将 jna-4.2.1.jar 和 jna-platform-4.2.1.jar 从 WEB-INF/lib/ 移动到 tomcat8/lib。仍然没有成功。
我还验证了 tomcat 运行ning 没有安全管理员确认问题与访问权限无关。
现在我不知道该怎么办。如果提供解决方案或至少为我指出解决问题的方向,那将是一个很大的帮助。提前致谢。
我已经解决了这个问题。 问题的根本原因是 jna jar 文件在将 war 文件传输到 prod 服务器时损坏了。我用它开始工作的 jar 文件的新副本替换了 prod 服务器中的 jna jar 文件。