使用CXF开发简单的Web Service-HelloWorld(二)
上篇博文我们介绍了Web Service的基本概念,了解它的基本概念之后,我们这篇博文介绍一个开源的WebService框架-Apache CXF,并实现一个HelloWorld实例。
一、开始之前
SOA目前已经成为了人人皆知的热点,SOA是面向服务的架构,SOA的重点在于服务的重用,即Service1+Service2+Service3,所有的组件都是“即插即用”的。SOA是由IBM提倡的架构,希望以“组装电脑”的方式开发软件。SOA涉及到两个重要的技术:
- 各种提供服务的组件(web service)
- 企业服务总线(Enterprise Service Bus ——> ESB )(后面的博文介绍)
二、CXF介绍
CXF号称是SOA框架,也是Apache旗下的开源框架,由Celtix + XFire这两门经典的框架合成,是一套非常流行的web service框架。提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。对于CXF的功能特性,以及支持标准,传输方式,不再过多的介绍,大家看一下网上的内容即可。
CXF下载地址:
安装CXF+配置:
- 下载CXF,将压缩包解压
- 找到bin目录,例如:D:\apache-cxf-2.5.9\bin,将这个目录配置到电脑的环境变量的path下。
- 验证是否成功。
在命令界面dos下,输入wsdl2java,例如:
可以看到有相应的信息输出,就是我们的命令缺少参数而已,表明可以执行这个命令,已经成功。
三、开发Web Service
1、开发准备
- jdk安装
- eclipse开发环境
- CXF安装+配置
2、服务器端
万事俱备只欠东风,我们先开发服务器端。
1、目录:
每个WebService组建需要2个部分:接口和实现类。
2、服务器端的代码:
接口:HelloWorld
package com.tgb.ws;
import javax.jws.WebService;
@WebService
public interface HelloWorld {
String sayHi(String name);
}
实现类:
package com.tgb.ws.impl;
import java.util.Date;
import javax.jws.WebService;
import com.tgb.ws.HelloWorld;
@WebService(endpointInterface="com.tgb.ws.HelloWorld",
serviceName="HelloWorldWs")
public class HelloWorldWs implements HelloWorld {
@Override
public String sayHi(String name) {
return name + ".您好" + "现在时间是:"
+ new Date();
}
}
接口和实现我们都写好了,下面我们暴露我们的服务:
package service;
import javax.xml.ws.Endpoint;
import com.tgb.ws.HelloWorld;
import com.tgb.ws.impl.HelloWorldWs;
public class ServerMain {
public static void main(String[] args) {
HelloWorld hw = new HelloWorldWs();
//调用EndPoint的publish方法发布WebService
//调用Endpoint的publish方法发布web service 第一个参数为ip地址 ,第二v参数就是服务的提供者
Endpoint.publish("http://192.168.3.3:8989/crazyit", hw);
System.out.println("WebService调用成功了");
}
}
运行main方法,我们就可以发现我们暴露的服务了:
由上图我们已经成功的暴露服务,我们使用了WebService的注解,但是好像我们到现在还没有使用CXF, 为什么呢?
因为WebService是Java的规范,CXF是WebService的实现。
3、服务器端小结
开发服务器端的步骤,总共分为三步:
(1)开发一个Web Service业务接口。
该接口要用@WebService修饰
(2)开发一个Web Service实现类
实现类也需要用@WebService修改
(3)使用EndPoint类的静态方法来发布WebService
3、客户端
1、目录
2、使用CXF生成客户端代码
首先,新建java项目,在命令行窗口中,切换到此java项目src目录。使用CXF的命令,wsdl2java+服务暴露地址?wsdl
[注]生成客户端代码时,服务器端一定要运行,否则会保持,如下图:
3、客户端代码:
package client;
import com.tgb.ws.HelloWorld;
import com.tgb.ws.impl.HelloWorldWs;
public class ClientMain {
public static void main(String[] args) {
HelloWorldWs hw = new HelloWorldWs();
HelloWorld helloWorld = hw.getHelloWorldWsPort();
System.out.println(helloWorld.sayHi("HelloWorld"));
}
}
运行客户端,如下图:
好的,恭喜你,我们已经成功的调用了我们的服务。
4、客户端小结:
使用CXF开发Web Service客户端得步骤也分三步:
(1)调用CXF提供的wsdl2java工具
WSDL-Web Service Definition Language任何语言实现了Web Service,都需要提供、并暴露WSDL文档。
(2)找到wsdl2java所生成类中,一个继承了Service的类。
该类的实例可当成工厂使用。
(3)调用Service子类的实例的getxxxPort方法,返回webService的代理。
总结:
恭喜你,使用CXF开发Web Service的简单实例到此结束。
下篇博文,我们深入的讲解WSDL文档。
使用CXF开发简单的Web Service-HelloWorld(二)的更多相关文章
- eclipse下开发简单的Web Service
service部分 在eclipse下新建一个动态web项目 在项目中新建一个service类 编写SayHello类的代码 package org.sunny.service; //包不要引用错了 ...
- C#开发和调用Web Service
http://blog.csdn.net/h0322/article/details/4776819 1.1.Web Service基本概念 Web Service也叫XML Web Service ...
- 【Java学习笔记】如何写一个简单的Web Service
本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件: Eclipse Java EE IDE for Web De ...
- 最简单的Web Service实现
概述 这里提供一个最简单的Web Service的实现,基于JAX-WS.除了jdk不需要任何其他jar包,使用Eclipse提供的Web Services Explorer访问服务. 服务端的实现 ...
- 用Spring MVC开发简单的Web应用程序
1 工具与环境 借助Eclipse4.3 + Maven3.0.3构建Java Web应用程序.使用Maven内置的servlet 容器jetty,不需手工集成Web服务器到Eclipse.还帮我们自 ...
- 使用JDK自带功能,实现一个简单的Web Service接口发布
万事开头难,本篇文章的目的就是使用JDK自带的功能,实现一个最简单的Web Service接口的发布. 下图是项目的组成,主要有三个部分,一个接口(WS),一个接口的实现类(WSImp),还有一个接口 ...
- Android开发之使用Web Service进行网络编程
使用Web Service进行网络编程 Android应用通常都是执行在手机平台上.手机系统的硬件资源是有限的,无论是存储能力还是计算能力都有限.在Android系统上开发.执行一些单用户.小型应用是 ...
- 用Spring MVC开发简单的Web应用
这个例子是来自于Gary Mak等人写的Spring攻略(第二版)第八章Spring @MVC中的一个例子,在此以学习为目的进行记录. 问题:想用Spring MVC开发一个简单的Web应用, 学习这 ...
- Web Service(二):cxf 实现
1. cxf简介 Web Services 的一种实现方式. Apache CXF = Celtix + XFire,后更名为 Apache CXF ,简称为 CXF. CXF 继承了 Celtix ...
随机推荐
- linux 普通synflood攻击防范网络参数设置
linux如何防SYN攻击 [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 ESTABLISHED 59 ...
- 安装magento主题模板
magento 的强大功能自不必说, 另外还有一点更重要的是拥有很多顶级的精致模板开发者和爱好者的支持开发出种类繁多, 用途各异的模板, 深受用户的喜爱, 但是安装模板对于初次使用者或者很久没有使用者 ...
- js中的执行环境及作用域
最近在面试时被问到了对作用域链的理解,感觉当时回答的不是很好,今天就来说说js中的作用域链吧. 首先来说说js中的执行环境,所谓执行环境(有时也称环境)它是JavaScript中最为重要的一个概念.执 ...
- HDU 2062 Subset sequence 数位dp,思路 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=2062 Subset sequence Time Limit: 1000/1000 MS (Java/Others ...
- 【河南省第十一届ACM大学生程序设计竞赛-D】.求XF+闭包
如何设计一个好的数据库不仅仅是一个理论研究问题,也是一个实际应用问题.在关系数据库中不满足规范化理论的数据库设计会存在冗余.插入异常.删除异常等现象. 设R(U)是一个关系模式,U={ A1,A ...
- 快速求排列组合 lucas定理
对于C(n, m) mod p.这里的n,m,p(p为素数)都很大的情况. 就不能再用C(n, m) = C(n - 1,m) + C(n - 1, m - 1)的公式递推了. 一般lucas定理的p ...
- SpringInAction--Bean的作用域
Spring定义了多种作用域,我们在使用的时候可以根据使用的需求来选择对应的作用域,这些作用域,包括(第二个括号中为更安全的注解方法,具体更多参数可查看接口代码) 单例(Singleton)(Conf ...
- jsp中把js变量赋给java变量,或者将java变量赋给js变量怎么做?
在jsp中经常会遇到把js变量赋给java变量,或者将java变量赋给js变量的情况,在此将通用的处理方法小结如下: java变量传给js好办,var a=”<%=javaParam%>“ ...
- 表单隐藏域与display:none
有时候前端进行表单填写是分步骤的,每一步的时候其他步骤相关的表单视图不可见: 针对"不可见",以下有两种处理方式: ①display:none 这种方式呢,比较简单,就是将三个步骤 ...
- Leetcode 814. Binary Tree Pruning
dfs 要点是这一句: return node.val==1 or node.left or node.right 完整代码: # Definition for a binary tree node. ...