Как передать пользовательский объект через веб-сервис - PullRequest
2 голосов
/ 06 февраля 2011

Я написал веб-сервис на Java, и веб-сервис работает правильно, но я не могу понять, как передать список пользовательских объектов через него. Вот мой объект класса:

public class Contacts{
private int id;
private String username;
private String location;
private Date updated_at;

public void setId(int id) {
    this.id = id;
}
public int getId() {
    return id;
}
public void setUsername(String username) {
    this.username = username;
}
public String getUsername() {
    return username;
}
public void setLocation(String location) {
    this.location = location;
}
public String getLocation() {
    return location;
}
public void setUpdated_at(Date updated_at) {
    this.updated_at = updated_at;
}
public Date getUpdated_at() {
    return updated_at;
}

}

Вот мой метод веб-сервиса для запроса базы данных и возврата списка объектов. Каждый раз, когда я пытаюсь вернуть объект, я получаю ошибку axis2: [ERROR] org.apache.axis2.AxisFault: Mapping qname not fond for the package: wtp

В любом случае, вот мой метод:

    public String getUsers()
  {     
        ResultSet mainRS = null;
        String username = "root";
        String password = "ticket";
        String tablename = "users";
        String fieldname = "*";

        String query = "SELECT " + fieldname + " FROM " + "android." + tablename + ";";
        ArrayList<Contacts> lstc = new ArrayList<Contacts>();

        /* this chnk of code can appear more or less verbatim */
        /* in your database apps (including JSPs) */
        String url = "jdbc:mysql://"my IP address":3306/android";
        String test = " ";
        try{

        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection con = DriverManager.getConnection(url, username, password);
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery(query);
        mainRS = rs;

        while (rs.next()){
            Contacts cont = new Contacts();

            if (!(rs.getString("username") == null)){
            cont.setUsername(rs.getString("username"));
            test = rs.getString("username");
            }

            if (!(rs.getString("location") == null)){
             cont.setLocation(rs.getString("location"));
            }

            if (!(rs.getString("updated_at") == null)){
             cont.setUpdated_at(rs.getDate("updated_at"));
            }

            if (!(rs.getString("idUsers") == null)){
             cont.setId(rs.getInt("idUsers"));

            }

            lstc.add(cont);
        }

        rs.close();
        stmt.close();
        con.close();

        }catch(Exception e){
            test = e.toString();
        }
        return test;            
        }

Я использую Eclipse Galileo, Axis2 в Java. Любые идеи о том, как передать эти объекты, будут высоко оценены. Или, может быть, даже лучший способ сделать это тогда, чтобы бас-гитара пользовательских объектов. Я открыт для любых идей.

Спасибо!

РЕДАКТИРОВАТЬ: я отредактировал метод для использования:

Contacts lst[] = new Contacts["count rows here"];

Но он возвращает нулевые объекты. Например:

В базе данных 4 строки, поэтому результат:

SoapObject: [результат: ноль, результат: ноль, результат: ноль, результат: ноль]

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2011

Отредактированный метод сработал. Мне пришлось сделать тип возвращаемого значения Массив контактов, используя тип возвращаемого значения Contacts []. С:

Contacts contact[] = new Contacts[Count rows here];

Сработало как надо. После редактирования этого ^^ проблема заключалась в том, как я загружал объекты. Правильный путь: помните, что это в какое-то время (ResultSet.next)

int num = 0;
Contacts cont = new Contacts();
cont.setId = "id";
cont.setLocation = "location";
//finish filling your object
contact[num] = cont;
num = num + 1;

Спасибо!

0 голосов
/ 06 февраля 2011

Я не использовал Axis2 для веб-сервисов, но я использовал XFire и CXF.С помощью этих структур вы должны пометить свой предметный объект правильной аннотацией, используя XmlBeans или JAXB.Затем вы настраиваете сервлет платформы для использования вашей любимой библиотеки XML (XmlBeans / JAXB).

...