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

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

 

CXF主页:http://cxf.apache.org/程序员

 

简介:百度百科web

 

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

 

这里用Maven。浏览器

 

首先建一个Maven的j2se项目;服务器

 

 

 

 

项目的jre用1.8,由于1.8有webservice的默认实现。不要用1.5 否则下面你用个人代码会有问题,用1.5的话,还须要另外加jar包,这里为了你们省事,要换成1.8;框架

 

 

 

 

根据规范,咱们先建一个接口类:HelloWorldfrontend

package com.wishwzp.webservice;

import javax.jws.WebService;

@WebService
public interface HelloWorld {

    public String say(String str);
}

 

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

package com.wishwzp.webservice.impl;

import javax.jws.WebService;

import com.wishwzp.webservice.HelloWorld;

@WebService
public class HelloWorldImpl implements HelloWorld{

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

}

 

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

package com.wishwzp.webservice;

import javax.xml.ws.Endpoint;

import com.wishwzp.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.0.110/helloWorld";  
        Endpoint.publish(address, implementor);  // JDK实现   暴露webservice接口
        System.out.println("web service started");  
    }
}

 

这里的Endpoint是Jdk自身实现的WebService。因此到这里咱们不须要用到CXF的任何东西。

这里的address,写上本身的本机IP

咱们运行下Server类:

运行效果以下:

 

 

 

咱们在浏览器里访问:http://192.168.0.110/helloWorld?wsdl

效果:

 

说明已经成功调用了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服务器;

 

 

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

package com.wishwzp.webservice;

import javax.xml.ws.Endpoint;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import com.wishwzp.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.0.110/helloWorld";  
        //Endpoint.publish(address, implementor);  // JDK实现   暴露webservice接口
        JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
        factoryBean.setAddress(address); // 设置暴露地址
        factoryBean.setServiceClass(HelloWorld.class); // 接口类
        factoryBean.setServiceBean(implementor); // 设置实现类
        factoryBean.create();      
        System.out.println("web service started");  
        System.out.println("web service started");  
    }
}

 

 

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

相关文章
相关标签/搜索