java1234开源博客系统
博客信息

使用CXF开发WebService服务器端接口

0
发布时间:『 2016-02-14 20:46』  博客类别:webservice  阅读(12428) 评论(6)


CXF作为java领域主流的WebService实现框架,Java程序员有必要掌握它。


CXF主页:http://cxf.apache.org/


简介:百度百科


今天的话,主要是用CXF来开发下WebService服务器端接口,明天写下开发客户端接口;


这里用Maven。


首先建一个Maven的j2se项目;

QQ鎴浘20160214201912.jpg


项目的jre用1.7,因为1.7有webservice的默认实现。不要用1.5 不然下面你用我的代码会有问题,用1.5的话,还需要另外加jar包,这里为了大家省事,要换成1.7;

QQ鎴浘20160214201936.jpg



根据规范,我们先建一个接口类:HelloWorld

package com.java1234.webservice;

import javax.jws.WebService;

@WebService
public interface HelloWorld {

	public String say(String str);
}


再建一个具体的实现类:HelloWorldImpl

package com.java1234.webservice.impl;

import javax.jws.WebService;

import com.java1234.webservice.HelloWorld;

@WebService
public class HelloWorldImpl implements HelloWorld{

	public String say(String str) {
		return "Hello "+str;
	}

}


最后建一个发布服务的主类:Server

package com.java1234.webservice;


import javax.xml.ws.Endpoint;

import com.java1234.webservice.impl.HelloWorldImpl;

public class Server {

	public static void main(String[] args) {
		System.out.println("web service start");  
        HelloWorld implementor = new HelloWorldImpl();  
        String address = "http://192.168.1.103/helloWorld";  
        Endpoint.publish(address, implementor);  // JDK实现
        System.out.println("web service started");  
	}
}


这里的Endpoint是Jdk自身实现的WebService。所以到这里我们不需要用到CXF的任何东西。

这里的address,写上自己的本机IP

我们运行下Server类:

运行效果如下:

QQ鎴浘20160214202633.jpg


我们在浏览器里访问:http://192.168.1.103/helloWorld?wsdl


效果:

QQ鎴浘20160214202817.jpg


说明已经成功调用了webservice接口;


这里的wsdl 是 Web Services Description Language的缩写,是一个用来描述Web服务和说明如何与Web服务通信的XML语言。WSDL是Web Service的描述语言,用于描述Web Service的服务,接口绑定等,为用户提供详细的接口说明书。


请求后得到的是一个xml规范文档。是一套规范,后面会具体介绍,任何语言平台技术都可以解析。




下面我们介绍使用CXF来实现webservice接口:

我们先在pom.xml中加入:

<dependency>
		<groupId>org.apache.cxf</groupId>
		<artifactId>cxf-core</artifactId>
		<version>3.1.5</version>
	</dependency>
	
	<dependency>
		<groupId>org.apache.cxf</groupId>
		<artifactId>cxf-rt-frontend-jaxws</artifactId>
		<version>3.1.5</version>
	</dependency>
	
	<dependency>
		<groupId>org.apache.cxf</groupId>
		<artifactId>cxf-rt-transports-http-jetty</artifactId>
		<version>3.1.5</version>
	</dependency>


这里要额外加入jetty,作为webservice发布的服务器。jetty是一个内嵌的web服务器;


QQ鎴浘20160214203514.jpg


我们把Server改下。换成CXF实现:

package com.java1234.webservice;


import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import com.java1234.webservice.impl.HelloWorldImpl;

public class Server {

	public static void main(String[] args) {
		System.out.println("web service start");  
        HelloWorld implementor = new HelloWorldImpl();  
        String address = "http://192.168.1.103/helloWorld";  
        // Endpoint.publish(address, implementor);  // JDK实现
        JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
        factoryBean.setAddress(address); // 设置暴露地址
        factoryBean.setServiceClass(HelloWorld.class); // 接口类
        factoryBean.setServiceBean(implementor); // 设置实现类
        factoryBean.create();		
        System.out.println("web service started");  
	}
}


运行效果和刚才一样,这里就不再重复;


完整源码下载:http://pan.baidu.com/s/1jHwGLF4


关键字:   webservice     cxf     java  
关注Java1234微信公众号
博主信息
Java1234_小锋
(知识改变命运,技术改变世界)
Powered by Java1234 V3.0 Copyright © 2012-2016 Java知识分享网 版权所有