2011-02-06 8 views
2

JavaでWebサービスを作成し、Webサービスが正常に機能していますが、カスタムオブジェクトのリストを渡す方法がわかりません。ここに私のクラスオブジェクトは、次のとおりです。Webサービス経由でカスタムオブジェクトを渡す方法

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; 
} 

}

ここに私のWebサービスメソッドは、データベースを照会し、オブジェクトのリストを返すことです。私は、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;    
     } 

私はJavaでEclipseのガリレオ、Axis2のを使用しています。これらのオブジェクトをどのように渡すかについてのアイデアは非常に高く評価されます。それとも、カスタムオブジェクトをベースにするより良い方法であろうと、私はどんなアイディアにもオープンしています。

ありがとうございます!

EDIT:それはnullのオブジェクトを返し、

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

しかし:私が使用する方法を編集しました。

SoapObject:たとえば、次の結果があるので

は、データベース内の4行があり[結果:ヌル、結果:ヌル、結果:ヌル、結果:NULL]

任意のアイデア?

+0

私は上記の記事を、結果にもっと近づけるようなコードで編集しました..しかし、何があっても、私はヌル値を受け取ります。 – ninnemannk

答えて

0

編集されたメソッドは機能しました。戻り値の型はContactsの戻り値の型Contacts []を使用して配列にする必要がありました。で:

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

してください。この^^に編集した後は、どのようにオブジェクトをロードしていたのかという問題でした。正しい方法は次のとおりです。While(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

私はWebサービスでAxis2を使用していませんが、XFireとCXFを使用しました。これらのフレームワークでは、XmlBeansまたはJAXBのいずれかを使用して、ドメインオブジェクトに正しいアノテーションをマークする必要があります。 次に、あなたが好きなXmlライブラリ(XmlBeans/JAXB)を使うようにフレームワークのサーブレットを設定します。

関連する問題