在 WebService (JAX-WS) 中创建方法以将数据发送到 mysql 数据库

Create method in WebService (JAX-WS) to send data to mysql DB

大家好..

我是 web 服务的新手,所以尝试在 glass fish server 4.1.1 上创建简单的 web 服务 (jax-ws),此服务将数据发送到 mysql 数据库,如 this but I'm getting this error为什么我不知道!?!?

我的代码:

    package com.me.coder;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import javax.jws.WebService;
    import javax.jws.WebMethod;
    import javax.jws.WebParam;

    /**
     *
     * @author MacbookPro
     */
    @WebService(serviceName = "GetWriteToDB")
    public class GetWriteToDB {

        /**
         * Web service operation
         */

        @WebMethod(operationName = "sendToDb")
        public void sendToDb(@WebParam(name = "id") int id, @WebParam(name = "name") String name, @WebParam(name = "location") double location, @WebParam(name = "date") String date) {
           String host = "jdbc:mysql://localhost/onurDB";
            String user = "onur";
            String pass = "onurdb958";

            try(Connection conn = DriverManager.getConnection(host,user,pass);
                Statement smt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);   
               ){
                String SQL = "INSERT INTO `GoogleLoc`(`ID`, `NAME`, `LOCATION`, `DATE`) VALUES ('" + id + "','" + name + "','"+ location + "','" + date + "')";
                smt.executeUpdate(SQL);

            }catch(SQLException ex){
                System.out.println("SQLException : " + ex);
            }  

        }
    }

对于控制,在 java SE class 中尝试使用相同的代码效果很好。 像这样:

package send;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author MacbookPro
 */
public class Send {

    /**
     * @param args the command line arguments
     */
    private static String name,date;
    private static int location,id;


    public static void main(String[] args) throws IOException {
         String host = "jdbc:mysql://localhost/onurDB";
        String user = "onur";
        String pass = "onurdb958";

        try(Connection conn = DriverManager.getConnection(host,user,pass);
            Statement smt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);   
           ){

            insertData(smt);
        }catch(SQLException ex){
            System.out.println("SQLException : " + ex);
        }  
    }
       private static void insertData(Statement smt) throws SQLException, IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter ID : ");
        String id = bf.readLine();
        System.out.print("Enter Name : ");
        String name = bf.readLine();
        System.out.print("Enter Location : ");
        String location = bf.readLine();
        System.out.print("Enter Date : ");
        String date = bf.readLine();
        String sql;
        sql = "INSERT INTO `GoogleLoc`(`ID`, `NAME`, `LOCATION`, `DATE`) VALUES ('" + id + "','" + name + "','"
                + location + "','" + date + "')";
        smt.executeUpdate(sql);
        System.out.println("Success! data inserted.");
    }
}

我可以想象我在@WebMethod 中的错误

有人可以帮帮我吗???

感谢大家..

您的 NullPointerException 是从 WebserviceTesterServlet class 提出的,它是一个 GlassFish WS 工具 class,可以帮助您调用网络服务。它是您的网络服务的图形客户端。 也许,问题来自这个 class,也许来自你的实现。 有了这个stracktrace,就很难猜了。

问题是 WebserviceTesterServlet 没有提供有用的异常。 所以,我们无法理解原因。 我建议你三个解决方案来解决你的问题:

  • 下载包含WebserviceTesterServlet的源jar(取你使用的版本),在class的第342行打断点,运行你的服务器处于调试模式。
  • 正在尝试使用 SOAP UI 调用您的操作。
  • 创建您自己的调用 webService 的代码并测试您的 webservice 操作。您可以通过生成代理 classes 轻松地做到这一点。例如,您可以使用 JAX-WS 并执行 wsimport。

已解决!

我们需要像这样更改代码:

    package com.me.coder;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.ws.rs.GET;

/**
 *
 * @author Coder ACJHP
 */
@WebService(serviceName = "GetWriteToDB")
public class GetWriteToDB {

    /**
     * Web service operation
     *
     * @param id
     * @param name
     * @param location
     * @param date
     * @return
     */
    @GET
    @WebMethod(operationName = "insertUser")
    public boolean insertUser(@WebParam(name = "id") int id, @WebParam(name = "name") String name,
            @WebParam(name = "location") double location, @WebParam(name = "date") String date) {
        boolean insertStatus = false;
        final String host = "jdbc:mysql://localhost/onurDB";
        final String user = "onur";
        final String pass = "onurdb958";
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
            Logger.getLogger(GetWriteToDB.class.getName()).log(Level.SEVERE, null, ex);
        }
        try (
                Connection conn = DriverManager.getConnection(host, user, pass);
                Statement smt = conn.createStatement();) {
            String SQL = "INSERT INTO `GoogleLoc`(`ID`, `NAME`, `LOCATION`, `DATE`) VALUES ('" + id + "','" + name + "','" + location + "','" + date + "')";
            int x = smt.executeUpdate(SQL);
            if (x > 0) {
                insertStatus = true;
            }

        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return insertStatus;
    }

}