2015-06-22 597 views
0

我有這樣的問題: 創建您自己的SOAP Web服務,它將保存有關人員 (例如在地圖中)的信息。每個人都有以下屬性: 名字,姓氏,出生日期。 您的網絡服務將響應一個查詢,該查詢將基於以下內容過濾存儲的條目:姓氏,出生日期。 根據提供的示例創建一個JUnit測試,用於驗證您的SOAP Web服務是否按預期工作。java web服務SOAP

我在Eclipse中創建動態Web項目,並寫道類是這樣的:

public class Person { 
    String firstName, surname, birthDate; 
    public Person(String firstName, String surname, String birthDate) { 
     this.firstName = firstName; 
     this.surname = surname; 
     this.birthDate = birthDate; 
    } 
} 

和搜索:

public class Search { 
    ArrayList<Person> people = new ArrayList<Person>(); 
    public Search() { 
     Person jim = new Person("Jim", "Abacki","01/01/1990"); 
     Person scott = new Person("Scott","Babacki", "01/01/1990"); 
     Person anna = new Person("Anna","Cabacki", "01/01/1991"); 
     Person dan = new Person("Dan","Dabacki", "01/01/1992"); 
     Person ola = new Person("Ola","Fabacki", "01/01/1993"); 
     Person eva = new Person("Eva","Fabacki", "01/01/1991"); 

     people.add(jim); 
     people.add(scott); 
     people.add(anna); 
     people.add(dan); 
     people.add(ola); 
     people.add(eva); 
    } 

    public String[] searchBySurname(String surname){ 

     int i =0; 
     for(Person x : people){ 
      if(x.surname==surname){ 
       i++; 
      } 
     } 
     String[] result = new String[i]; 
     int a=0; 
     for(Person x : people){ 

      if(x.surname==surname){ 
       result[a]=x.firstName+ " "+ x.surname + " "+ x.birthDate; 
       a++; 
      } 
     } 
     return result; 
    } 


    public String[] searchByBirthDate(String birthDate){ 
     int i =0; 
     for(Person x : people){ 
      if(x.surname==birthDate){ 
       i++; 
      } 
     } 
     String[] result = new String[i]; 
     int a=0; 
     for(Person x : people){ 

      if(x.surname==birthDate){ 
       result[a]=x.firstName + " "+ x.surname + " "+ x.birthDate; 
       a++; 
      } 
     } 
     return result; 
    } 

} 

然後我點擊類的搜索添加新的Web服務 - > Web服務 - >創建新的Web服務(在屬性中,我選擇了Axis2和Tomcat服務器)。然後我和班人做了類似的事情。

我認爲一切正常,所以我添加了搜索的Web服務客戶端,然後嘗試添加Person Web Service,但發生錯誤:WSDL的代碼生成期間發生異常:org.apache.axis2.AxisFault:在portType元素中找不到操作。

而且還當我試圖調用運行,如:

SearchStub a = new SearchStub(); 
a.searchBySurname(...); 

代替點的Eclipse給我的建議是這樣的:

a.searchBySurname(SearchBySurname searchBySurname2); 

這也怪我,因爲這個功能參數應該接受String。

這裏是我的問題: 我做錯了什麼?你能幫我解決這個問題嗎?也許有人有很好的教程,因爲我在互聯網上找到的東西沒有幫助。

回答

0

如果不先生成有效的WSDL,則無法調用您的服務。基於你的錯誤,Eclipse認爲你缺少一個操作(方法)。發生這種情況是因爲你的Person類沒有任何方法。因此,沒有操作。

幸運的是,您設置的方式不需要經過並生成基於Person的WSDL。但是,您的搜索類使用Person,並且WSDL應該生成沒有問題。這是您需要的唯一WSDL。


現在你的searchBySurname方法,基於你有什麼似乎不正常。我的想法(我從這裏調試): (a)您的搜索源看起來不錯,所以WSDL應該很好。 (b)客戶端生成? (c)當您的WSDL指定String時,該方法需要一個SearchBySurname對象,因此客戶端生成必須是錯誤的。所以它會告訴你使用SearchBySurname對象而不是String。

(*)查看本教程:http://www.java2blog.com/2013/03/web-service-tutorial.html