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输入框的值,使之反映出表格中实际被使用的行数。