接下来的我们将会自定义一个对象,然后看看EJB是如何对复杂的参数发布成WebService的.
代码如下:在第一个版本的基础之上加上增加用户的方法,参数为User.
package com.tgb.ejb; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.jws.WebMethod; import javax.jws.WebService; @Remote @Stateless @WebService(name = "UserManagerWebService" ) public class UserManagerBean implements UserManager{ @WebMethod public User addUser(String name) { System.out.println("客户" + name + "端调用了服务器端的代码"); User user = new User(); User.setName(name); User.setAge(24"); User.setAddress("BeiJing"); return user; } @WebMethod public String sayHello(String name) { return "你好" + name; } }
从代码中我们可以看到这个服务类调用了一个User实体类,这个类是一个自定义的POJO类.代码如下:
package com.tgb.ejb; public class User { private String name; private int age ; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { // TODO Auto-generated method stub return "name:" + name ; } }
客户端在生成代码的时候也会将这个User实体类代码生成一下。客户端生成的程序如下:
客户端调用代码如下:
package ejb_webservice_client; import ejb_webservice_client.*; public class WebServiceClient { public static void main(String[] args) { System.out.println("***********************"); System.out.println("Create Web Service Client..."); UserManagerBeanService userManagerService = new UserManagerBeanService(); System.out.println("Create Web Service..."); UserManagerWebService userManager = userManagerService.getUserManagerWebServicePort(); User user =userManager.addUser("jnqqls"); System.out.println("Call Web Service Operation..."); System.out.println("Server said: " + user.getName()); System.out.println("***********************"); System.out.println("Call Over!"); } }
总结:EJB为我们提供了方面的发布WebService服务,使用起来也非常简单,假设我们没有EJB服务器的实现支持,那么就需要用CXF、Axis2、等这种Web服务框架。用得比较多的就是Axis2和CXF。他们各自有着各自的优略势,不同的场景使用不同的框架.关于这两种框架的具体应用在以后的工作和学习中再继续丰富和学习.