写在前面的话

前面两节说了使用Java提供的包开发服务端和客户端,现在使用CXF来开发,CXF提供了两个类发而服务,一个是ServerFactoryBean,另一个是JaxWsServerFactoryBean,我们将分别使用这两个类发而一个简单的服务,并提供与JaxWsServerFactoryBean类发布的服务的客户端。

JaxWsServerFactoryBean方式

服务接口


package com.wds.ws.server.cxf;

import javax.jws.WebService;

/**
* 此处必须添加@WebServer注解,若不添加,则发布的服务当中无任何方法
* @author wds
*
*/
@WebService
public interface HelloService {
public String sayHello(String name);
}

服务实现


package com.wds.ws.server.cxf;

import java.util.Date;

/**
* 服务实现类
* @author wds
*
*/
public class HelloServiceImpl implements HelloService { @Override
public String sayHello(String name) {
String s = new Date() + " " + name;
System.out.println("Server:" + s);
return s;
} }

发布类


package com.wds.ws.server.cxf;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

/**
* 使用CXF的ServerFactoryBean发布服务
* @author wds
*
*/
public class JaxWsServerFactoryBeanPublish { /**
* @param args
*/
public static void main(String[] args) { //实例化ServerFactoryBean
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); //发布服务的地址
factory.setAddress("http://localhost:567/JaxWsServerFactoryBeanHelloworld"); //提供服务类的类型(接口类型)
factory.setServiceClass(HelloService.class); //提供服务的实例
factory.setServiceBean(new HelloServiceImpl()); //发布服务
factory.create();
} }

客户端


使用以下命令

wsdl2java -p com.wds.client.jaxws http://localhost:567/JaxWsServerFactoryBeanHelloworld?wsdl

关于wsdl2java的命令在WebService-02中也有说过,此处增加了一p参数,此参数说明指定包结构,复制到客户端的工程中,测试类如下:

package com.wds.client.jaxws;

public class JaxWsClientTest {

	/**
* @param args
*/
public static void main(String[] args) {
HelloServiceService factory = new HelloServiceService();
HelloService hs = factory.getHelloServicePort();
System.out.println(hs.sayHello("wds"));
} }

ServerFactoryBean

服务的接口和实现与JaxWsServerFactoryBean无特别大区别,只是无须写@WebService注解,发布类代码如下:


package com.wds.ws.server.cxf;

import org.apache.cxf.frontend.ServerFactoryBean;

/**
* 使用CXF的ServerFactoryBean发布服务
* @author wds
*
*/
public class ServerFactoryBeanPublish { /**
* @param args
*/
public static void main(String[] args) { //实例化ServerFactoryBean
ServerFactoryBean factory = new ServerFactoryBean(); //发布服务的地址
factory.setAddress("http://localhost:5678/ServerFactoryBeanHelloworld"); //提供服务类的类型
factory.setServiceClass(HelloServiceImpl.class); //提供服务的实例
factory.setServiceBean(new HelloServiceImpl()); //发布服务
factory.create();
} }

其与JaxWsServerFactoryBean发布也很类似,只是在提供服务类的类型时,此处指定了实现类。


客户端的编写方式与JaxWsServerFactoryBean方式相同,不在详细列出。

WebService-03-使用CXF开发服务端和客户端的更多相关文章

  1. 使用Apache CXF开发WebServices服务端、客户端

    在前一篇的博客中,我使用Xfire1.x来开发了WebServies的服务端. 但是如果你访问Apache的官网,可以看到xfire已经被合并了. 最新的框架叫做CXF. Apache CXF = C ...

  2. WebService学习总结(四)--基于CXF的服务端开发

    本节将实践目前最流行的第二种web service 发布和调试框架  CXF Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构.它允许创建高性能和可扩 ...

  3. app开发中如何利用sessionId来实现服务端与客户端保持回话

    app开发中如何利用sessionId来实现服务端与客户端保持回话 这个问题太过于常见,也过于简单,以至于大部分开发者根本没有关注过这个问题,我根据和我沟通的开发者中,总结出来常用的方法有以下几种: ...

  4. 用beego开发服务端应用

    用beego开发服务端应用 说明 Quick Start 安装 创建应用 编译运行 打包发布 代码生成 开发文档 目录结构说明 使用配置文件 beego默认参数 路由设置 路由的表述方式 直接设置路由 ...

  5. WCF开发的流程-服务端和客户端之间的通讯(内含demo讲解)

    讲解技术之前,恳请博友让我说几句废话.今天是我第一在博客园发布属于自己原创的博文(如有雷同,那是绝对不可能的事,嘿嘿).之前一直是拜读各位博友的大作,受益匪浅的我在这对博友们说声谢谢,谢谢你们的共享! ...

  6. IDEA创建WebService服务端与客户端

    创建服务端 一.file–>new–>project 二.点击next后输入服务端名,点击finish,生成目录如下 三.在 HelloWorld.Java 文件中右击,选 Tools 的 ...

  7. 【.NET6】gRPC服务端和客户端开发案例,以及minimal API服务、gRPC服务和传统webapi服务的访问效率大对决

    前言:随着.Net6的发布,Minimal API成了当下受人追捧的角儿.而这之前,程序之间通信效率的王者也许可以算得上是gRPC了.那么以下咱们先通过开发一个gRPC服务的教程,然后顺势而为,再接着 ...

  8. C# 编写WCF简单的服务端与客户端

    http://www.wxzzz.com/1860.html Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Win ...

  9. python thrift 服务端与客户端使用

    一.简介 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, ...

随机推荐

  1. Java数组与泛型

    Java中不能创建泛型数组,例如不能这样写:[java] view plaincopyArrayList<String>[] as = new ArrayList<String> ...

  2. NHibernate - HQL - 添加和更改

    添加: /// <summary> /// 等待乙方做出回应 A /// </summary> private void button2_Click_1(object send ...

  3. jQuery选择器——全新的总结方式

    jQuery 选择器的总结 用于定位的选择器: 基本选择器:(用来进行绝对定位) $("#myELement")    选择id值等于myElement的元素,id值不能重复在文档 ...

  4. linux shell编程指南第十一章------------合并与分割2

    c u t用来从标准输入或文本文件中剪切列或域.剪切文本可以将之粘贴到一个文本文件. 下一节将介绍粘贴用法. c u t一般格式为: cut [options] file1 file2 下面介绍其可用 ...

  5. Java中Timer和TimerTask的使用

    转自:http://www.cdtarena.com/javapx/201306/8893.html java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks. 一个 ...

  6. Spring mvc之提交表单

    表单内容: <body> <form action="user/login"> <table> <tr> <td>用户名 ...

  7. CorePlot学习零---安装

    刚開始接触CorePlot时,网上搜到非常多相关文章,解说怎样安装这个第三方库,到眼下阶段该库的版本号已经到了1.5了,可是在github上你能够看到他的安装方法,只是为啥就没有codpod来安装呢? ...

  8. Swift - 访问通讯录联系人(使用纯代码实现)

    1,通讯录访问介绍 通讯录(或叫地址簿,电话簿)是一个数据库,里面储存了联系人的相关信息.要实现访问通讯录有如下两种方式: (1)AddressBook.framework框架 : 没有界面,通过代码 ...

  9. Java内部类——局部内部类

    局部内部类,即放在“{块中}”,局部内部类,不能被成员修饰符static修饰,且内部类的成员也不能是static. 内部类中访问局部变量“{块中}”,需要将局部变量声明为final. 可以直接访问外部 ...

  10. JavaScript判断横屏/竖屏

    /判断手机横竖屏状态:  function hengshuping(){    if(window.orientation==180||window.orientation==0){          ...