博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot整合webservice
阅读量:5163 次
发布时间:2019-06-13

本文共 5696 字,大约阅读时间需要 18 分钟。

转自https://blog.csdn.net/pharaohsprince/article/details/75579630,感谢度娘,感谢博主

spring boot整合cxf发布webservice服务和cxf客户端调用

本案例使用maven方式
核显文件清单
1.pom.xml

4.0.0
com.leftso
demo-webservice-cxf
0.0.1-SNAPSHOT
jar
demo-webservice-cxf
Demo project for Spring Boot security
org.springframework.boot
spring-boot-starter-parent
1.4.5.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.apache.cxf
cxf-spring-boot-starter-jaxws
3.1.11
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin

2.CommonService.java 服务接口

package com.leftso.webservice; import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService; /** * 接口 *  * @author leftso * */@WebService(name = "CommonService", // 暴露服务名称        targetNamespace = "http://webservice.leftso.com/"// 命名空间,一般是接口的包名倒序)public interface CommonService {    @WebMethod    @WebResult(name = "String", targetNamespace = "")    public String sayHello(@WebParam(name = "userName") String name); }

3.接口实现

package com.leftso.webservice; import javax.jws.WebService; import org.springframework.stereotype.Component; /** * 接口实现 *  * @author leftso * */@WebService(serviceName = "CommonService", // 与接口中指定的name一致        targetNamespace = "http://webservice.leftso.com/", // 与接口中的命名空间一致,一般是接口的包名倒        endpointInterface = "com.leftso.webservice.CommonService"// 接口地址)@Componentpublic class CommonServiceImp implements CommonService {     @Override    public String sayHello(String name) {         return "Hello ," + name;    } }

4.配置cxf服务发布,默认服务在Host:port/services/***路径下

package com.leftso.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.leftso.webservice.CommonService; @Configurationpublic class CxfConfig {    @Autowired    private Bus bus;     @Autowired    CommonService commonService;     /** JAX-WS **/    @Bean    public Endpoint endpoint() {        EndpointImpl endpoint = new EndpointImpl(bus, commonService);        endpoint.publish("/CommonService");        return endpoint;    }}

这里相当于把Commonservice接口发布在了路径/services/CommonService下,wsdl文档路径为

http://localhost:8080/services/CommonService?wsdl
创建基于cxf的客服端调用webservice接口(非使用wsdl文档生成java类)

package com.leftso.client; import org.apache.cxf.endpoint.Client;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; import com.leftso.webservice.CommonService; public class CxfClient {    public static void main(String[] args) {        cl1();    }     /**     * 方式1.代理类工厂的方式,需要拿到对方的接口     */    public static void cl1() {        try {            // 接口地址            String address = "http://localhost:8080/services/CommonService?wsdl";            // 代理工厂            JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();            // 设置代理地址            jaxWsProxyFactoryBean.setAddress(address);            // 设置接口类型            jaxWsProxyFactoryBean.setServiceClass(CommonService.class);            // 创建一个代理接口实现            CommonService cs = (CommonService) jaxWsProxyFactoryBean.create();            // 数据准备            String userName = "Leftso";            // 调用代理接口的方法调用并返回结果            String result = cs.sayHello(userName);            System.out.println("返回结果:" + result);        } catch (Exception e) {            e.printStackTrace();        }    }     /**     * 动态调用方式     */    public static void cl2() {        // 创建动态客户端        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();        Client client = dcf.createClient("http://localhost:8080/services/CommonService?wsdl");        // 需要密码的情况需要加上用户名和密码        // client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,        // PASS_WORD));        Object[] objects = new Object[0];        try {            // invoke("方法名",参数1,参数2,参数3....);            objects = client.invoke("sayHello", "Leftso");            System.out.println("返回数据:" + objects[0]);        } catch (java.lang.Exception e) {            e.printStackTrace();        }    }}
调用后返回结果输出为
Hello,Leftso

转载于:https://www.cnblogs.com/h-c-g/p/10882935.html

你可能感兴趣的文章
心急的C小加
查看>>
编译原理 First,Follow,select集求法
查看>>
uva1636 - Headshot(条件概率)
查看>>
iOS开发 runtime实现原理以及实际开发中的应用
查看>>
BZOJ2437 NOI2011兔兔与蛋蛋(二分图匹配+博弈)
查看>>
android 学习资源网址
查看>>
qt安装遇到的错误
查看>>
java:Apache Shiro 权限管理
查看>>
objective c的注释规范
查看>>
FreeNas安装配置使用
查看>>
机器学习中的F1-score
查看>>
编译安装php5.5.38
查看>>
Scrapy框架-CrawlSpider
查看>>
Django(一)框架简介
查看>>
Python操作SQLite数据库的方法详解
查看>>
实验二:编写输出"Hello World!"
查看>>
菜单和工具条(二)
查看>>
hadoop17---RPC和Socket的区别
查看>>
[BZOJ 3531] [Sdoi2014] 旅行 【离线+LCT】
查看>>
使用JMeter代理录制app测试脚本
查看>>