Springboot整合cxf进行WebService发布和WebService调用

1:添加依赖
Maven工程:java

<dependency>
	<groupId>org.apache.cxf</groupId>
    <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
    <version>3.3.3</version>
</dependency>

Gradle工程:git

'org.apache.cxf:cxf-spring-boot-starter-jaxws:3.3.3'

2:服务端接口github

package com.nobody.service;

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

/**
 * 测试接口
 * 
 * @author Μr.ηobοdy
 *
 * @date 2019-12-29
 *
 */
@WebService(name = "UserService", // 暴露服务名称
        targetNamespace = "http://service.nobody.com" // 命名空间,通常是接口的包名倒序
)
public interface UserService {

    @WebMethod
    @WebResult(name = "String", targetNamespace = "")
    String addUser(@WebParam(name = "username") String username, @WebParam(name = "age") int age);
}

3:服务端接口实现web

package com.nobody.service.impl;

import javax.jws.WebService;

import org.springframework.stereotype.Component;

import com.nobody.service.UserService;

/**
 * 测试接口实现
 * 
 * @author Μr.ηobοdy
 *
 * @date 2019-12-29
 *
 */
@WebService(serviceName = "UserService", // 与接口中指定的name一致
        targetNamespace = "http://service.nobody.com", // 与接口中的命名空间一致,通常是接口的包名倒
        endpointInterface = "com.nobody.service.UserService" // 接口地址
)
@Component
public class UserServiceImpl implements UserService {

    @Override
    public String addUser(String username, int age) {
        return "Add user success,username:" + username + ",age:" + age;
    }

}

4:CXF配置spring

package com.nobody.config;

import javax.xml.ws.Endpoint;

import org.apache.cxf.Bus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.nobody.service.UserService;

/**
 * cxf配置
 * 
 * @author Μr.ηobοdy
 *
 * @date 2019-12-29
 *
 */
@Configuration
public class CxfConfig {

    @Autowired
    private Bus bus;

    @Autowired
    private UserService userService;

    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(bus, userService);
        endpoint.publish("/UserService");
        return endpoint;
    }
}

5:wsdl文件
默认服务在host:port/工程服务名/services/所在的路径下。由于本工程没设置服务名,故此接口发布路径为/services/UserService,wsdl文件路径为:apache

http://localhost:8080/services/UserService?wsdl

服务启动后,在浏览器输入以上地址便可看到wsdl文件:
在这里插入图片描述
6:客户端调用浏览器

package com.nobody.controller;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("demo")
public class DemoController {

    @GetMapping("test")
    public String test(@RequestParam String username, @RequestParam int age) {

        String result = null;

        // 建立动态客户端
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        Client client = dcf.createClient("http://localhost:8080/services/UserService?wsdl");

        // 若是须要密码时加上用户名和密码
        // client.getOutInterceptors().add(new ClientLoginInterceptor(USERNAME,PASSWORD));

        // 接受返回值对象
        Object[] objects = new Object[0];

        try {
            // 调用
            objects = client.invoke("addUser", username, age);
            result = "调用webservice接口返回数据:" + objects[0];
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

}

7:启动工程,在浏览器输入如下地址便可进行调用app

http://127.0.0.1:8080/demo/test?username=Mr.nobody&age=18

返回结果:
在这里插入图片描述
8:项目Github下载地址
Springboot整合cxf使用WebServiceide

本文同步分享在 博客“Μr.ηobοdy”(CSDN)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。svg

相关文章
相关标签/搜索