Я пытаюсь создать веб-сервис jax-ws, который будет запрашивать базу данных mysql и возвращать определенный пользователем тип данных из @WebMethod.Сначала я попытался вернуть sql.ResultSet, который предоставляется при импорте sql.Тем не менее, JAXB не мог связать это.Поэтому я попытался вернуть String [] [], но при чтении результата в клиенте отображаются все пустые поля.
Затем я попытался создать свой собственный тип данных, и я понимаю, что класс, который я создаю, должен иметьконструктор по умолчанию и public устанавливает и получает все переменные, определенные в этом классе.Но я хотел бы вернуть набор результатов.Код моего веб-сервиса выглядит следующим образом:
@WebMethod
public String[][] getSummary(int month, int year){
// register jdbc driver
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
}
catch(Exception ex)
{
System.out.print(ex.getMessage());
}
// declare connection, statement and result set
Connection connection = null;
Statement statement = null;
ResultSet resultset = null;
String[][] result = new String[30][8];
int counter = 0;
try
{
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/Livestock?user=root");
statement = connection.createStatement();
resultset = statement.executeQuery("SELECT Category, Particulars, Nos, OriginalCost, AccuDep, WDV, NRV, CapLoss FROM TB_SUMMARY WHERE Month=" + month + " AND Year=" + year);
// loop over result set
while(resultset.next())
{
result[counter][0] = resultset.getString("Category");
result[counter][1] = resultset.getString("Particulars");
result[counter][2] = resultset.getString("Nos");
result[counter][3] = resultset.getString("OriginalCost");
result[counter][4] = resultset.getString("AccuDep");
result[counter][5] = resultset.getString("WDV");
result[counter][6] = resultset.getString("NRV");
result[counter][7] = resultset.getString("CapLoss");
counter++;
}
}
catch(SQLException ex)
{
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
finally
{
// it is a good idea to release
// resources in a finally{} block
// in reverse-order of their creation
// if they are no-longer needed
if(resultset != null)
try
{
resultset.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
resultset = null;
if(statement != null)
try
{
statement.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
statement = null;
}
return result;
}
Я не уверен, что причина, по которой все ячейки в строке [] [] равны нулю, заключается в том, что код даже не достигает executeQuery();или, может быть, не работает привязка jaxb.
Я до сих пор не понимаю, как работает jaxb.Если у кого-нибудь есть хороший пример использования jaxws с jaxb, я был бы очень признателен.Документация, которую я нашел в интернете, огромна и сложна.