欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WebService之CXF实现

程序员文章站 2022-07-15 15:28:17
...
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

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.andrew.webservice</groupId>
  <artifactId>WS_Server</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
      <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>
  </dependencies>
</project>

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