Springboot--使用cxf创建soap webservice接口

引入依赖

 <!-- cxf依赖  -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>3.2.4</version>
        </dependency>

创建Service接口
TestService

@WebService() //接口此处也应该使用webservice注解
public interface TestService {
    @WebMethod   //声明下面的方法是webservice中的一个方法
    //返回结果类型是String
    @WebResult(name = "String",targetNamespace = "")
    public String Test(@WebParam(name="user")String user);
}

创建一个接口实现类 实现上面的接口
TestServiceimpl

@WebService(
        serviceName = "TestService",			//portType名称,客户端生成代码时为接口名称
        targetNamespace  = "http://service.demo.webservice.com/", //wsdl命名空间 一般是接口所在包路径的倒序来命名
        endpointInterface = "com.webservice.demo.service.TestService"    //指定发布webservcie的接口类,此类也需要接入@WebService注解
)
//把实现类注入到spring容器
@Component
public class TestServiceimpl implements TestService {

    @Override
    public String Test(@WebParam(name="user")String user) {
        System.out.println("你好,测试用户:"+user);
        return user;
    }
} 

创建cxf配置类
CxfConfig.java

@Configuration
public class CxfConfig {
    @Autowired
    private Bus bus;

	//导入TestService实例
    @Autowired
    private TestService testService;


    //这里需要注意  由于springmvc 的核心类 为DispatcherServlet
    //此处若不重命名此bean的话 原本的mvc就被覆盖了。可查看配置类:DispatcherServletAutoConfiguration
    //一种方法是修改方法名称 或者指定bean名称 
    //这里需要注意 若beanName命名不是 cxfServletRegistration 时,会创建两个CXFServlet的。
    //具体可查看下自动配置类:Declaration org.apache.cxf.spring.boot.autoconfigure.CxfAutoConfiguration
    //也可以不设置此bean 直接通过配置项 cxf.path 来修改访问路径的
    @Bean("cxfServletRegistration")
    public ServletRegistrationBean dispatcherServlet() {
        //注册servlet 拦截/ws 开头的请求 不设置 默认为:/services/*
        return new ServletRegistrationBean(new CXFServlet(), "/ws/*");
    }

    /** JAX-WS **/
    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(bus, testService);
        endpoint.publish("/TestService");   //发布地址
        return endpoint;
    }
}

至此soap web服务发布完成,客户端可以访问http://localhost:8080/ws/TestService?wsdl查看发布是否成功


在客户端动态调用web service接口

@RestController
public class TestController {
    @RequestMapping("/test")
    public String test(String user){
        JaxWsDynamicClientFactory dcf=JaxWsDynamicClientFactory.newInstance();
        Client client=dcf.createClient("http://localhost:8080/services/TestService?wsdl");
        Object[] objects=new Object[0];
        
        try {
        	//命名空间,方法
            QName qname=new QName("","singleDocument");
            objects=client.invoke(qname,user);
            System.out.println("返回的数据:"+objects[0]);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return null;
    }
}

控制台输出结果:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值