Ejb发布成webservice

1.       将EJB发布成,或者说暴露成Web服务(也许更贴切),在EJB容器中不是困难的事情,只要容器实现了JavaEE的JAX-WS标准就行了,开发人员要做的就是增加一点点有关WebService的注解,打包发布到应用容器即可。不过在笔者使用JBoss5作为EJB容器的时候,调用Web服务出现了异常~~~最后发现是JDK版本的问题,改用JDK1.5编译EJB类、启动JBoss后才能正常调用。这个问题先留着,回头使用JBoss6的时候在试试吧~~~~

2.       helloworld服务端代码

服务端不用再强制规定WebService必须实现一个接口了,而一个普通的POJO+EJB注解的类就可以当做WebService服务器类。

代码如下:

package webservice.HelloWebService;

 

import javax.ejb.Stateless;

import javax.jws.WebService;

 

@Stateless

@WebService(name = "HelloWebService")

public class HelloWebService {

    public String sayHello(String name) {

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

       return "你好:" + name+",传授给你武功--旋空斩";

    }

}

将此类打包部署到JBoss容器中,重启JBoss,打开链接

http://127.0.0.1:8080/jbossws看到如下界面
Ejb发布成webservice_第1张图片
 选择View a list of deployed services查看webservice列表
Ejb发布成webservice_第2张图片
 

点击链接即可看到WSDL文档

 

  

   

   

   

    

     

    

   

   

    

     

    

   

  

 

 

  

 

 

  

 

 

  

   

   

  

 

 

  

  

   

   

    

   

   

    

   

  

 

 

  

   

  

 

 

1.       客户端测试程序

我们使用IDE工具生成客户端代码,在MyEclipse中选择new菜单,选择Web服务客户端,如下图所示
Ejb发布成webservice_第3张图片
 选择生成代码的目标项目和类型
Ejb发布成webservice_第4张图片
 之后输入WSDL文档的URL位置,如下图所示
Ejb发布成webservice_第5张图片
 之后选择Next进入加入依赖包的选项
Ejb发布成webservice_第6张图片

如果不加入任何依赖包也可以,可以手工下载CXF项目(http://cxf.apache.org/),将它的lib下的wsdl4j-version.jar、XmlSchema-version.jar拷贝到客户端Classpath下面就行。

之后生成的代码如下
Ejb发布成webservice_第7张图片
 

其中HelloWebServiceService是需要客户端稍微关心一下的类,客户端调用这个类的方法就能调到服务器端的代码。测试程序如下

 

    public static void main(String[] args) {

    HelloWebServiceService helloWebServiceService = new HelloWebServiceService();

       HelloWebService helloWebService = helloWebServiceService.getHelloWebServicePort();

       System.out.println(helloWebService.sayHello("单锋剑尊"));

    }

你可能感兴趣的:(java)