zoukankan      html  css  js  c++  java
  • 2种实现CXF方法例子

     转载自:http://www.blogjava.net/sai5201314vicky/articles/353078.html

    大家好,今天我要介绍的现实webservice的一种技术——CXF

    由于本人是一个菜鸟,所以下面所做的都是一些简单的小例子!希望能帮到有需要的同学!好了,废话就不多说了,直接进入正题!

    开发环境:myeclipse8.5 + tomcat6.0 + jdk1.6

    CXF版本:apache-cxf-2.3.5.zip(在这里介绍一个下载包的网址给大家:http://www.jar114.com

    把apache-cxf-2.3.5.zip解压出来后,如下图所示目录:(不做解析了)

    下面所作的小例子都用到lib文件夹下面的包(不介意的话就全部加进项目里)!

    新建一web项目,名称叫HelloWorldCXF

    建一包:com.cxf.dao,在该包下新建一接口,命名为:HelloWorld,代码如下:

    package com.cxf.dao;

     

    import javax.jws.WebService;

     

    @WebService

    public interface HelloWorld {

      

       public String sayHello(String username);  

       

    }

    建一包:com.cxf.service,在该包下新建一个类,命名为:HelloWorldImpl,代码如下:

    package com.cxf.service;

    import javax.jws.WebService;

    import com.cxf.dao.HelloWorld;

    @WebService

    public class HelloWorldImpl implements HelloWorld {

           public String sayHello(String username) {

        System.out.println("say hello is called!");

           return "Hello" + username;

          

           }

    }

    新建一测试包:com.cxf.action,在该包下建一个类,类名为:HelloTest,代码如下:

    package com.cxf.action;

    import org.apache.cxf.endpoint.Server;

    import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

    import com.cxf.service.HelloWorldImpl;

    public class HelloTest {

        public static void main(String[] args) {

         JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();

           // Web服务的地址

           factoryBean.setAddress("http://localhost:8081/hello");

           // Web服务对象调用接口

           factoryBean.setServiceClass(HelloWorldImpl.class);

           Server server = factoryBean.create();

           server.start();

        }

    }

    执行代码后,在浏览器打开:http://localhost:8081/hello?wsdl 能如下显示的,证明服务器已经发布成功!

    新建一web项目,名称叫HelloWorldCXFClient

    新建一个包,这个包的名称和服务器包的名称一样的:com.cxf.dao,里面的接口和方法也必须和服务器的一样:

    package com.cxf.dao;

     

    import javax.jws.WebService;

     

    @WebService

    public interface Hello {

        //这里的接口方法必须跟服务器接口里面的方法一致

           public String sayHello(String username);  

       

    }

    新建一个测试类:代码如下

    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

     

    import com.cxf.dao.Hello;

     

    public class ClientTest {

        public static void main(String []trgs){

           JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();

           //获取服务器端

           factoryBean.setAddress("http://localhost:8081/hello");

           //通过客户端的接口获取服务器端的接口

           factoryBean.setServiceClass(Hello.class);

          

           Hello hello =(Hello) factoryBean.create();

           System.out.println(hello.sayHello("和谐dota"));

          

        }

       

    }

    执行代码,控制台能打印出:Hello和谐dota!

    到这,一个完整的CXF小例子就完成了!

    不知道大家有没有注意到,上面的接口和现实类都存在有一个标签:@WebService

    这个标签的作用是:指明接口是Web 服务

    当然你也可以不用这个方式去实现,直接用手动的去进行指明也是可以的!!下面就是用手动这种方式现实功能的,希望大家能找出这2个方法的不同之处!

    新建一web项目,名称叫HelloWorldCXF

    建一包:com.cxf.dao,在该包下新建一接口,命名为:HelloWorld,代码如下:

    package com.cxf.dao;

     

    import javax.jws.WebService;

     

    public interface HelloWorld {

      

       public String sayHello(String username);  

       

    }

    建一包:com.cxf.service,在该包下新建一个类,命名为:HelloWorldImpl,代码如下:

    package com.cxf.service;

    import javax.jws.WebService;

    import com.cxf.dao.HelloWorld;

    public class HelloWorldImpl implements HelloWorld {

           public String sayHello(String username) {

        System.out.println("say hello is called!");

           return "Hello" + username;

          

           }

    }

    新建一测试包:com.cxf.action,在该包下建一个类,类名为:HelloTest,代码如下:

    package com.cxf.action;

    import org.apache.cxf.endpoint.Server;

    import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

    import com.cxf.service.HelloWorldImpl;

    public class HelloTest {

        public static void main(String[] args) {

           //发布服务器

    ServerFactoryBean factoryBean = new ServerFactoryBean();

           // 获取Web服务的地址

           factoryBean.setAddress("http://localhost:8080/hello");

           // Web服务对象调用接口

           factoryBean.setServiceClass(Hello.class);

           // Web服务对象调用实现接口类

           HelloImpl hello = new HelloImpl();

           factoryBean.setServiceBean(hello);

           // 发布web服务器

           factoryBean.create();

        }

    }

    执行代码后,在浏览器打开:http://localhost:8081/hello?wsdl 能如下显示的,证明服务器已经发布成功!

    新建一web项目,名称叫HelloWorldCXFClient

    新建一个包,这个包的名称和服务器包的名称一样的:com.cxf.dao,里面的接口和方法也必须和服务器的一样:

    package com.cxf.dao;

     

    import javax.jws.WebService;

     

    public interface Hello {

        //这里的接口方法必须跟服务器接口里面的方法一致

           public String sayHello(String username);  

       

    }

    新建一个测试类:代码如下

    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

     

    import com.cxf.dao.Hello;

     

    public class ClientTest {

        public static void main(String []trgs){

     

    //客户端对象

           ClientProxyFactoryBean factoryBean = new ClientProxyFactoryBean();

           //获取服务器端

           factoryBean.setAddress("http://localhost:8080/hello");

           //通过客户端的接口获取服务器端的接口

           factoryBean.setServiceClass(Hello.class);

          

           Hello hello ;

           hello =(Hello) factoryBean.create();

           System.out.println(hello.sayHello("和谐dota"));

          

        }

       

    }

    执行代码,控制台能打印出:Hello和谐dota!

    到这,就完成了现实CXF的2种不同方法!!接下来和大家一起完成CXF整合Spring的小例子!

  • 相关阅读:
    AttributeUsage属性
    LINQ基本子句
    js 变动首页参与人数
    C#控件的闪烁问题解决方法总结
    AttributeUsage
    MVC3 js+flash图片滚动
    通过写后台权限领悟到的东西
    删除同辈元素并添加指定元素的类
    JS产生两个数之间的随机数
    Web Service 学习笔记
  • 原文地址:https://www.cnblogs.com/zrui-xyu/p/4901523.html
Copyright © 2011-2022 走看看