Springboot 整合CXF框架
依赖
<!-- cxf --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-spring-boot-starter-jaxws</artifactId><version>3.2.9</version></dependency>
接口
@WebService(targetNamespace = "http://service.referral.webservice./", name = "Hello")public interface HelloWsService {@WebResult(name = "return", targetNamespace = "")@RequestWrapper(localName = "sayHello", targetNamespace = "http://service.referral.webservice./", className = "sample.ws.service.SayHello")@WebMethod(action = "urn:SayHello")@ResponseWrapper(localName = "sayHelloResponse", targetNamespace = "http://service.referral.webservice./", className = "sample.ws.service.SayHelloResponse")String sayHello(@WebParam(name = "myname", targetNamespace = "") String myname);}
实现类
@javax.jws.WebService(serviceName = "HelloService", portName = "HelloPort", targetNamespace = "http://service.referral.webservice./", endpointInterface = "com.tms.backend.webservice.referral.service.HelloWsService")public class HelloWsServiceImpl implements HelloWsService {public java.lang.String sayHello(java.lang.String myname) {try {return "Hello, Welcome to CXF Spring boot " + myname + "!!!";} catch (java.lang.Exception ex) {ex.printStackTrace();throw new RuntimeException(ex);}}}
CXF配置
1、java配置
@Configurationpublic class WebServiceConfig {@Autowiredprivate Bus bus;@Beanpublic Endpoint endpoint() {EndpointImpl endpoint = new EndpointImpl(bus, new HelloWsServiceImpl());endpoint.publish("/Hello");return endpoint;}}
1、yaml配置
cxf:path: /services
启动项目
调用接口
方法一
/*** 代理类工厂的方式,需要拿到对方的接口地址*/public static void main(String[] args) {try {// 接口地址String address = "http://localhost:8090/services/Hello?wsdl";// 代理工厂JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();// 设置代理地址jaxWsProxyFactoryBean.setAddress(address);// 设置接口类型jaxWsProxyFactoryBean.setServiceClass(HelloWsService.class);// 创建一个代理接口实现HelloWsService us = (HelloWsService) jaxWsProxyFactoryBean.create();// 数据准备String name = "neo";// 调用代理接口的方法调用并返回结果String result = us.sayHello(name);System.out.println("返回结果:" + result);} catch (Exception e) {e.printStackTrace();}}
方法二
public static void main1(String[] args) throws Exception {String address = "http://localhost:8090/services/Hello";String request = "<q0:sayHello xmlns:q0=\"http://service.referral.webservice./\"><myname>Elan</myname></q0:sayHello>";StreamSource source = new StreamSource(new StringReader(request));Service service = Service.create(new URL(address + "?wsdl"),new QName("http://service.referral.webservice./", "HelloService"));Dispatch<Source> disp = service.createDispatch(new QName("http://service.referral.webservice./", "HelloPort"), Source.class,Mode.PAYLOAD);Source result = disp.invoke(source);String resultAsString = StaxUtils.toString(result);System.out.println(resultAsString);}