JavaEE5学习笔记09-将EJB发布成WebService总结(2)

以上例子只是简单调用了WebService,参数是简单的String,如果我们客户端需要获得复杂的,自定义的对象可以吗?答案是EJB容器也很完美的做到了

服务端代码如下

package webservice.HelloWebService;

 

import javax.ejb.Stateless;

import javax.jws.WebService;

import webservice.HelloWebService.pojo.Car;

 

@Stateless

@WebService(name = "HelloWebService")

public class CarWebService {

 

    public Car callCar(String name) {

       System.out.println("客户" + name + "端调用了服务器端的代码");

 

       Car car = new Car();

       car.setName("宝马");

       car.setMessage("BMW");

 

       return car;

    }

 

}

这个服务类调用了一个Car实体类,这个类是一个自定义的POJO

代码如下

package webservice.HelloWebService.pojo;

 

public class Car {

 

    private String name;

    private String message;

 

    public String getName() {

       return name;

    }

 

    public void setName(String name) {

       this.name = name;

    }

 

    public String getMessage() {

       return message;

    }

 

    public void setMessage(String message) {

       this.message = message;

    }

 

    @Override

    public String toString() {

       // TODO Auto-generated method stub

       return "name:" + name + " --  " + message;

    }

 

}

客户端在生成代码的时候也会将这个返回值的实体类代码生成一下。客户端生成的程序如下
JavaEE5学习笔记09-将EJB发布成WebService总结(2)
 

测试代码如下

    public static void main(String[] args) {

       CarWebServiceService carWebServiceService = new CarWebServiceService();

       HelloWebService helloWebService = carWebServiceService

              .getHelloWebServicePort();

       Car car = helloWebService.callCar("素续缘");

       System.out.println(car.getName() + "--" + car.getMessage());

    }

但是需要说明的一点就是在服务器端此 Car 实体类自己覆盖了 toString 方法,在客户端生成后的代码,并没有也像服务端那样覆盖 toString ,所以来说对于实体作为参数或者返回值的话, WebService 关注的就是属性值。如果我们没有 EJB 服务器的实现支持,那么必须得借助像 CXF Axis2 XFire 这种 Web 服务框架了。目前用得比较多的就是 Axis2 CXF 了。网上对 2 种框架也是褒贬不一,笔者的观点嘛 ~ 还是那句话,各有各的使用场景吧!

你可能感兴趣的:(框架,Web,webservice,ejb)