服务类“WBSer_RwCnt.Rw_Count”不符合JAX-RPC 1.1规范的一个或多个要求

时间:2014-12-20 11:57:45

标签: java web-services

package WBSer_RwCnt;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class Rw_Count {

  public static Connection getConnection() throws Exception {

    String driver = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://localhost/hospital_data";
    String username = "root";
    String password = "mysql";

    Class.forName(driver); // load MySQL driver
    Connection conn = DriverManager.getConnection(url, username, password);
    return conn;
  }

  public static int countRows(Connection conn, String tableName) throws SQLException {

    // select the number of rows in the table
    Statement stmt = null;
    ResultSet rs = null;
    int rowCount = -1;
    try {
      stmt = conn.createStatement();
      rs = stmt.executeQuery("SELECT COUNT(*) FROM " + tableName);
      // get the number of rows from the result set
      rs.next();
      rowCount = rs.getInt(1);
    } finally {
      rs.close();
      stmt.close();
    }
    return rowCount;
  }

  public static void main(String[] args) {

        Connection conn = null;
    try {
      conn = getConnection();
      String tableName = "hospital_status";
      System.out.println("tableName=" + tableName);
      System.out.println("conn=" + conn);
      System.out.println("rowCount=" + countRows(conn, tableName));
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    } finally {
      // release database resources
      try {
        conn.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
}

错误--->

The method "getConnection" on the service class "WBSer_RwCnt.Rw_Count" uses a data type, "java.sql.Connection", that is not supported 

当我编译它而不创建它作为webservice它可以正常工作 但是,当我将其作为Web服务时,它将输出作为

输出--->

WBSer_RwCnt.Rw_CountSoapBindingStub@121a412b

请帮助!

下一步尝试

所以这就是我所说的,即使那样,它也会产生以下错误

例外:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/hospital_data

消息:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/hospital_data
package WBSer_RwCnt;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class Rw_Count {

public static int countRows() throws SQLException {

// select the number of rows in the table

Statement stmt = null;

ResultSet rs = null;

System.out.println("ram");

String driver = "com.mysql.jdbc.Driver";

String url = "jdbc:mysql://localhost/hospital_data";

String username = "root";

String password = "mysql";

try {

    Class.forName(driver);

}
 catch (ClassNotFoundException e1)
 {

    // TODO Auto-generated catch block

    e1.printStackTrace();

}

// load MySQL driver

Connection conn = DriverManager.getConnection(url, username, password);

int rowCount = -1;

try {

  stmt = conn.createStatement();

  rs = stmt.executeQuery("SELECT COUNT(*) FROM hospital_status");

  // get the number of rows from the result set

  rs.next();

  rowCount = rs.getInt(1);

}

catch (Exception e) 

{
    e.printStackTrace();

    System.exit(1);

  }

finally {

  rs.close();

  stmt.close();

  conn.close();

}

return rowCount;

}

}

我添加了所有jar文件,包括java mysql连接器

1 个答案:

答案 0 :(得分:1)

这不是一个完整的答案,因为我不完全确定您用来编译Web服务的工具,但无论如何,这里是:

基本上,连接只对特定计算机有效。如果它是TCP / IP连接,则它由两对组成:源主机和端口,以及目标主机和端口。如果它是Linux套接字,那么它就是该特定机器目录树中的一个条目。

数据库连接通常建立在其中一个构造上,所以它也是一台机器特有的。

因此,将Connection对象传递给从某个远程计算机调用方法的用户是没有意义的。由于它没有意义,JAX-RPC标准不包括Connection的序列化,以及它失败的原因。

您的问题是您已经设计了方法,使其接受连接作为参数,并使用该连接访问数据库。这在本地工作正常,但不是远程服务的好设计。

相反,您的方法应该在内部获取连接。远程用户应该只使用表格的countRows方法访问,countRows应该调用getConnection,使用连接,然后关闭它。

您不应该在Web服务中使用main方法。并且getConnection方法应该从public更改为private,以便countRows可以访问它。当它是私有的时候,我相信Web服务编译器不会抱怨它,因为它不必为它创建序列化。