当前位置: 代码迷 >> Web前端 >> CXF中运用Simple FrontEnd Project方式发布并获取webservice服务
  详细解决方案

CXF中运用Simple FrontEnd Project方式发布并获取webservice服务

热度:143   发布时间:2012-10-25 10:58:58.0
CXF中使用Simple FrontEnd Project方式发布并获取webservice服务

/**

**QQ:252574345

**MSN:lele_love_lomboz@hotmail.com

*/

?

使用CXF Simple FrontEnd Project,不需要在业务接口中设置具体的协议、@Web Service、@Web Method,仅仅需要创建与具体webservice技术无关的业务接口就可以了(真有点像SCA了,呵呵不恰当的对比)。利用代理类进行发布服务和获取服务

(工程文件附后下载)

?

1。业务接口

?

package demo.zhaoyl.server;

/**
?* 业务接口
?* 与wsdl first project 、java first project方式不同的是
?* 这个业务接口仅仅是普通的java interface
?* @author zhaoyl
?*
?*/
public interface HelloWorld
{
???
??? String sayHi(String name);

}

?

2。业务接口实现类

?

package demo.zhaoyl.server;

/**
?* 业务接口实现类
?* @author zhaoyl
?*
?*/
public class HelloWorldImpl implements HelloWorld {

?/**
? * 向客户端返回一个名字
? */
??? public String sayHi(String name) {
??????? return "Hello " + name;
??? }
}

?

?

3。服务端

?

package demo.zhaoyl.server;

import org.apache.cxf.frontend.ServerFactoryBean;

/**
?* 服务端
?* @author zhaoyl
?*
?*/
public class Server {

??? protected Server() throws Exception
??? {
??????? HelloWorldImpl helloworldImpl = new HelloWorldImpl();
??????? ServerFactoryBean svrFactory = new ServerFactoryBean();
??????? //设置服务接口类
??????? svrFactory.setServiceClass(HelloWorld.class);
??????? //address 也就是wsdl文件中的 <soap:address location="
http://localhost:9000/Hello" />
??????? svrFactory.setAddress("
http://localhost:9000/Hello");
??????? //在浏览器端通过
http://localhost:9000/Hello?wsdl访问生成的wsdl文件
??????? //设置服务实现接口类
??????? svrFactory.setServiceBean(helloworldImpl);
??????? //创建服务
??????? svrFactory.create();
??? }

??? public static void main(String args[]) throws Exception {
??????? new Server();
??????? System.out.println("Server ready...");

??????? Thread.sleep(5 * 60 * 1000);
??????? System.out.println("Server exiting");
??????? System.exit(0);
??? }
}

?

4。服务端

?

package demo.zhaoyl.client;

import demo.zhaoyl.server.HelloWorld;
import org.apache.cxf.frontend.ClientProxyFactoryBean;

/**
?* 客户端
?* 仅仅需要一个与具体技术无关的java接口HelloWorld
?* @author zhaoyl
?*
?*/
public final class Client {

??? private Client()
??? {
??? }

??? public static void main(String args[]) throws Exception
??? {
??? ?
??????? ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
???????
??????? //设置已发布服务接口
??????? factory.setServiceClass(HelloWorld.class);

??????? //为客户端代理bean 设置已经发布的服务地址
??????? factory.setAddress("
http://localhost:9000/Hello");
???????
??????? //获取已发布服务接口实例
??????? HelloWorld client = (HelloWorld)factory.create();
???????
??????? System.out.println("Invoke 远程服务接口方法sayHi()....");
???????
??????? //返回客户机器用户名称
??????? System.out.println(client.sayHi(System.getProperty("user.name")));
???????
??????? System.exit(0);
??? }

}

启动服务

运行客户端

结果:

Invoke 远程服务接口方法sayHi()....
Hello zhaoyl

  相关解决方案