【发布时间】:2020-06-06 18:21:24
【问题描述】:
我在 Centos 7 操作系统中安装了一个 tomcat 服务器,并且我已经在其上部署了一个 Web 服务。
Web 服务必须连接到位于 Windows 服务器中的 SQL Server。 Centos 已从 Windows 服务器 ping。 telnet 返回也已连接。但是,如果我调用 Web 服务对数据库(创建、更新、删除)执行某些操作,它将返回一个内部错误作为响应。 但是当我在安装在 Windows 操作系统上的 Tomcat 上部署我的 Web 服务项目时,它没有问题。我不知道该怎么办。
public class JDBCConnection {
private static final String DB_DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String DB_URL = "jdbc:sqlserver://192.168.X.X:1433;databaseName=DB_Name";
private static final String DB_USERNAME = "username";
private static final String DB_PASSWORD = "password";
我还尝试了 SQL Server 的外部 IP 地址:
public class JDBCConnection {
private static final String DB_DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String DB_URL = "jdbc:sqlserver://77.238.X.X:1433;databaseName=DB_Name";
private static final String DB_USERNAME = "username";
private static final String DB_PASSWORD = "password";
错误:
<body>
<h1>HTTP Status 500 – Internal Server Error</h1>
<hr class="line" />
<p><b>Type</b> Exception Report</p>
<p><b>Message</b> java.lang.NullPointerException</p>
<p><b>Description</b> The server encountered an unexpected condition that prevented it from fulfilling the request.
</p>
<p><b>Exception</b></p>
<pre>javax.servlet.ServletException: java.lang.NullPointerException
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:432)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
</pre>
<p><b>Root Cause</b></p>
<pre>java.lang.NullPointerException
com.comment.doa.siteService.getAllCommentsService(siteService.java:106)
com.comment.service.siteResource.getAllComments(siteResource.java:51)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:498)
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76)
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148)
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191)
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:243)
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103)
org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493)
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:415)
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:104)
org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:277)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:272)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:268)
org.glassfish.jersey.internal.Errors.process(Errors.java:316)
org.glassfish.jersey.internal.Errors.process(Errors.java:298)
org.glassfish.jersey.internal.Errors.process(Errors.java:268)
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289)
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256)
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:703)
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:416)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
</pre>
<p><b>Note</b> The full stack trace of the root cause is available in the server logs.</p>
<hr class="line" />
<h3>Apache Tomcat/8.5.54</h3>
</body>
</html>
【问题讨论】:
-
你能检查一下有空指针异常的行吗? com.comment.doa.siteService.getAllCommentsService(siteService.java:106)
-
@Erwin 是的,我有 PreparedStatement pstmt = checkSqlCon(sqlConnection).prepareStatement(sql);在 sqlconnection 我有 if (sqlConnection == null) { sqlConnection = jdbcConnection.getSqlConnnection(); } 和 JDBCCONNECTION 是 public class JDBCConnection{ private static final String DB_DRIVER_CLASS = "com.microsoft.sqlserver.jdbc.SQLServerDriver";私有静态最终字符串 DB_URL="jdbc:sqlserver://77.238.X.X:1433;databaseName=DB_Name";私有静态最终字符串 DB_USERNAME =“用户名”;私有静态最终字符串 DB_PASSWORD ="密码";
-
这一行? -> PreparedStatement pstmt = checkSqlCon(sqlConnection).prepareStatement(sql);哪个是空的? sqlConnection、sql 还是 checkSqlCon?服务器日志中的堆栈跟踪呢?
标签: java sql-server web-services tomcat8