WebService之CXF实现

阅读更多
1. WebService之CXF简介

CXF官网: http://cxf.apache.org/

WebService一种跨平台,跨语言的规范,用于不同平台,不同语言开发的应用之间的交互。

CXF是java领域主流的WebService实现框架。


2. 使用CXF开发应用

新建项目WS_Server
New
-> maven project
-> Create a simple project
    Group Id:com.andrew.webservice
    Artfact Id:WS_Server
    Version:0.0.1-SNAPSHOT
    Packaging:jar


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

pom.xml


  4.0.0
  com.andrew.webservice
  WS_Server
  0.0.1-SNAPSHOT
  
  
      
        org.apache.cxf
        cxf-core
        3.1.5
    
    
        org.apache.cxf
        cxf-rt-frontend-jaxws
        3.1.5
    
    
        org.apache.cxf
        cxf-rt-transports-http-jetty
        3.1.5
    
  


HelloWorld.java

package com.andrew.webservice;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
    public String say(String str);
}

HelloWorldImpl.java

package com.andrew.webservice.impl;

import javax.jws.WebService;

import com.andrew.webservice.HelloWorld;

@WebService
public class HelloWorldImpl implements HelloWorld {
    public String say(String str) {
        return "Hello " + str;
    }
}

Server.java

package com.andrew.server;

import javax.xml.ws.Endpoint;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

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

执行结果:
web service start
log…
web service started
页面调用:
http://192.168.18.2/helloWorld?wsdl


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

wsdl:types就是定义了一些变量
wsdl:message相当于定义方法
wsdl:portType相当与调用与返回
客户端通过这个url请求,获得wsdl规范的xml文档片段信息,通过SOAP(SimpleObjectAccessProtocol)即简单对象访问协议,来实现客户端,服务器端消息交互,SOAP使用XML消息调用远程方法;交互的媒介就是xml,具体交互内容根据wsdl文档描述来。


2.2) 使用CXF开发WebService客户端

CXF二进制包下载地址: http://cxf.apache.org/download.html

使用wsdl2java工具
E:\Program Files\apache-cxf-3.1.5\bin\wadl2java

配置环境变量:
Path:E:\Program Files\apache-cxf-3.1.5\bin


新建项目WS_Client
New
-> maven project
-> Create a simple project
    Group Id:com.andrew.webservice
    Artfact Id:WS_Client
    Version:0.0.1-SNAPSHOT
    Packaging:jar

生成需要的webservice客户端代码
生成代码的路径E:\studyWEBSERVICECXF\WS_Client\src\main\java
1) cmd
2) cd E:\studyWEBSERVICECXF\WS_Client\src\main\java
3) wsdl2java http://192.168.18.2/helloWorld?wsdl
会在WS_Client下生成代码
4) 启动WS_Server


Client.java

package com.andrew.client;

import com.andrew.webservice.HelloWorld;
import com.andrew.webservice.HelloWorldService;

public class Client {
    public static void main(String[] args) {
        HelloWorldService service = new HelloWorldService();
        HelloWorld helloWorld = service.getHelloWorldPort();
        System.out.println(helloWorld.say("andrew"));
    }
}

Hello andrew

你可能感兴趣的:(webservice)