package hello; public class helloserver { public string sayhelloto(string name) { system.out.println("sayhelloto(string name)"); return "hello " + name + ", how are you doing?"; } public string sayhelloto(name thename) { system.out.println("sayhelloto(name thename)"); return "hello " + thename.getname() + ", how are you doing?"; } } 服務的代碼仍舊很簡單,仍舊類似于不用javabean時的helloworld服務。不過,這意味著最復雜的工作都轉移到了客戶端。事實上,這個版本的服務與以前版本的唯一差別在于,現在出現了一個重載的sayhelloto()方法。上面的代碼中重載后的方法用粗體字顯示。
重載的方法需要一個對name javabean的引用。name javabean的定義如下:
package hello; public class name { private string name; public string getname() { return name; } public void setname(string name) { this.name = name; } } 3.2、部署服務 部署一個使用了javabean的服務時,需要為apache soap服務器提供一些額外的信息。因此,現在部署服務的過程稍微復雜一點。
■ 使用管理工具部署服務
要使用管理工具部署這個新版的helloworld服務,首先按照前面所介紹的步驟進行,但這一次不要點擊deploy按鈕。現在,在number of mappings輸入框輸入1,它表示我們將給出一個映射(即name javabean)的信息。緊接mappings之下有一個表格,我們要用到這個表格的第一行。保留encoding style的值為soap,把namespace uri設置成對象的id:在本例中,它是urn:hello。接下來,把local part和java type輸入框設置成name javabean的完整名字,即hello.name。最后,把java to xml serializer和xml to java deserializer輸入框設置成org.apache.soap.encoding.soapenc.beanserializer,這是一個實現了serializer和deserializer接口的類,用來串行化和反串行化name javabean。如果你用到了更多的javabean(比如還有一個address bean),則應該在這個表格中輸入其他bean的信息,同時還應該更新number of mappings輸入框的值,使之反映出表格中實際被使用的行數。