(SpringCloud中的WebService)SpringBoot整合CXF——服务端

4 篇文章 0 订阅
4 篇文章 0 订阅

如果是编写客户端代码,参见文章:客户端
在SpringBoot和SpringCloud微服务中,整合CXF都是一样的。直接上代码:

引入jar包

这里只给出了CXF先关的jar包,项目中的其他jar依赖略。

<!-- cxf start -->
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
	<version>${cxf-spring-boot-starter-jaxws.version}</version>
</dependency>
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-features-logging</artifactId>
	<version>3.3.1</version>
</dependency>
<!-- cxf end -->

修改配置文件

在默认的情况下,我们服务端发布的接口地址为:http://127.0.0.1:50001/services。在这里,可以在application.properties中,修改这个规则:

cxf.path=/fyk

这个时候,发布的接口地址就为:http://127.0.0.1:50001/fyk。

CXF配置类

首先配置的是CXF的bus总线。这里仅仅是简单的打印出出入站信息:如果要获取报文来保存,参见CXF获取出入站报文

@Configuration
public class CxfConfig {

	@Bean(name = Bus.DEFAULT_BUS_ID)
	public SpringBus springBus() {
		SpringBus bus = new SpringBus();
		bus.getFeatures().add(new LoggingFeature());
		return bus;
	}

}

关于服务的发布,我打算的是,写一个自定义注解标注要发布的服务类,然后一次性将它们发布出去,这样就不必没写一个接口,就去写一个发布方法:

/**
 * 自定义的自动发布客户端注解(通过该注解,就知道要发布哪些服务端接口了)
 * @author FYK<br/> 2019年8月16日
 * @version 1.0
 * @since JDK:1.8
 */
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoPublish {
	
	/**
	 * 发布地址
	 * @author FYK
	 * @return
	 */
	String publishAddr();

}
@Component
@Slf4j
public class PublishEndpoint implements ApplicationRunner{

	@Autowired
	private WebApplicationContext webApplicationConnect;
	
	@Autowired()
	@Qualifier(Bus.DEFAULT_BUS_ID)
	private SpringBus bus;
	
	@SuppressWarnings("resource")
	@Override
	public void run(ApplicationArguments applicationArguments) throws Exception {
		//当把应用打成一个jar包运行的时候,后面跟着的命令行参数可以通过ApplicationArguments拿到
		log.info("开始进行自动发布web service接口");
		String[] beanNames = webApplicationConnect.getBeanNamesForAnnotation(AutoPublish.class);
		for(String beanName : beanNames) {
			String publishAddr = webApplicationConnect.getType(beanName).getAnnotation(AutoPublish.class).publishAddr();
			EndpointImpl endpointImpl = new EndpointImpl(bus, webApplicationConnect.getBean(beanName));
			endpointImpl.publish(publishAddr);
			log.info(String.format("发布的接口地址:[%s]", publishAddr));
		}
		log.info("完成web service接口自动发布");
	}

}

好了,到目前为止,CXF服务端的基础功能就搭建好了,现在就可以写一些接口来实践一下。

WS接口编写

先写一个接口:

@WebService
public interface SimpleTest {
	public String getTestStr(@WebParam(name = "name") String name, @WebParam(name = "age") int age);
}

然后写接口的实现类:(注意,要用上我们自定义的注解@AutoPublish

@WebService(endpointInterface = "com.boco.fyk.cxf.cxfservice.bussiness.test.SimpleTest", serviceName = "SimpleTest")
@AutoPublish(publishAddr = "test")
@Component
public class SimpleTestImpl implements SimpleTest{

	@Override
	public String getTestStr(String name, int age) {
		String str = String.format("我的名字是:%s,年纪是:%d。", name, age);
		return str;
	}

}

测试

现在浏览器上访问一下我们的wsdl地址:http://127.0.0.1:50001/fyk/test?wsdl。ok,结果能出来,没有问题。
现在,用SoapUI来测试一下:
在这里插入图片描述

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值