文档章节

使用CXF做简单的WebService例子

o
 osc_mervd488
发布于 2018/04/23 21:34
字数 566
阅读 16
收藏 0

精选30+云产品,助力企业轻松上云!>>>

使用Maven搭建项目测试简单的CXF实例

Server:

  pom.xml:

<!-- begin CXF Server -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <!-- 如果CXF不集成到Web服务器中,必须添加该引用 -->
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http-jetty</artifactId>
        <version>3.1.1</version>
    </dependency>
    <!-- End CXF Server -->

定义WebServer访问接口: ICXFService

package com.cxf;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService(name = "cxfService", targetNamespace = "http://localhost/services/testCXF")
public interface ICXFService {

    @WebMethod
    String test1(@WebParam(name = "name")String name);
}

定义接口的具体实现:CXFServiceImpl

package com.cxf.impl;

import javax.jws.WebService;

import com.cxf.ICXFService;

@WebService(endpointInterface = "com.cxf.ICXFService",
            portName = "HelloCXF",
            serviceName = "HelloCXFService",
            targetNamespace = "http://localhost/services/testCXF")
public class CXFServiceImpl implements ICXFService {

    @Override
    public String test1(String name) {
        return "Hello " + name;
    }

}

测试服务:

package com.cxf;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import com.cxf.impl.CXFServiceImpl;

public class CXFServiceRun {

    public static void main(String[] args) {
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
        factory.setServiceClass(ICXFService.class);
        factory.setAddress("http://localhost:8888/services/hello");
        factory.setServiceBean(new CXFServiceImpl());
        factory.create();
    }
}

访问: http://localhost:8888/services/hello?wsdl

Client:

创建CXF的客户端maven工程

添加 CXF 必须的 jar :

<!-- begin CXF Client -->
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>3.1.1</version>
    </dependency>
    <!-- End CXF Client -->

下载 apache 的 CXF 安装包 本次使用的是 apache-cxf-3.1.15 解压,配置环境变量就可以使用。

配置环境变量:

配置完成之后再 命令窗口 下执行 wsdl2java -help 出现如下信息表示配置成功:

 

执行:wsdl2java -encoding UTF-8 -d C:\Users\丰志\Desktop\cxfServer\src\main\java -p com.cxf.generate http://localhost:8888/services/hello?wsdl 

-d 后面跟生成java代码的目录, -p后面跟生成代码的包名称,最后跟wsdl的链接地址(或wsdl文件路径 + 文件名称)

生成的代码目录文件:

然后将CXF生成的代码粘贴到客户端项目中(也可以直接将代码生成到eclipse中的webService的客户端工程中)

编写客户端测试:TestClient

package com.cxf.client;

import java.net.MalformedURLException;
import java.net.URL;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.cxf.generate.CxfService;
import com.cxf.generate.ICXFServiceService;

public class TestClient {

    public static void main(String[] args) {
        //jaxws调用
//        URL不是必须的,除非服务的地址有改变
//        URL wsdlUrl = null;
//        try {
//            wsdlUrl = new URL("http://localhost:8888/services/hello?wsdl");
//        } catch (MalformedURLException e) {
//            e.printStackTrace();
//        }
//        ICXFServiceService factory = new ICXFServiceService(wsdlUrl);
////        ICXFServiceService factory = new ICXFServiceService();
//        CxfService cxfService = factory.getCxfServicePort();
//        String name = cxfService.test1("lisi");
//        System.out.println(name);
        
        // CXF 调用
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(CxfService.class);
        factory.setAddress("http://localhost:8888/services/hello");
        CxfService cxfService = factory.create(CxfService.class);
        String name = cxfService.test1("lisi");
        System.out.println(name);
    }

}

两种实现方式都可以

运行成功:

 源码:https://files.cnblogs.com/files/guofz/FirstCXF.rar

参考:https://blog.csdn.net/accountwcx/article/details/47082487

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

使用amoeba实现mysql读写分离

转载马士兵连老师笔记 使用amoeba实现mysql读写分离 1、什么是amoeba? Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户端透明。具有负载均衡、...

兵荒马乱的青春
2分钟前
0
0
学Vue,就要学会vue JSX(二)

学习JSX,先了解一下createElement 提到JSX,不可避免的就要提到createElement,当你看完本节,你会发现,奇怪的知识又增多了。ok,我们接着上一部分继续讲。这一次的准备工作是了解createEleme...

osc_kurqu050
2分钟前
0
0
学Vue,就要学会vue JSX(三)

是时候使用JSX代替createElement了 接着上面的讲,当我们看到上面用createElement去实现组件,太麻烦了,别说工作效率提高了,就是那些嵌套可以嵌套正确就很赞了,所以我们需要用JSX去简化整...

osc_tq5hz9vv
4分钟前
0
0
protocol buffer使用

protocol buffer使用例子 protocol buffer是什么 https://developers.google.com/protocol-buffers 这是protocol buffer的官方网站,上边有详细的使用方式。 一般常见的序列和反序列方式就是...

RandomObject
5分钟前
0
0
小白的前端之路-HTMl

HTML——超文本标记语言 HTMl里面有标签,标签又分为单标签和双标签,也分为行级元素和块级元素 标签是用<>包裹起来的,而且必须要有<>,否则会直接显示在浏览器上面哦 现在介绍一下常用标签...

osc_e45irv7l
5分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部