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.backend.tms.com/", name = "Hello")
public interface HelloWsService {
@WebResult(name = "return", targetNamespace = "")
@RequestWrapper(localName = "sayHello", targetNamespace = "http://service.referral.webservice.backend.tms.com/", className = "sample.ws.service.SayHello")
@WebMethod(action = "urn:SayHello")
@ResponseWrapper(localName = "sayHelloResponse", targetNamespace = "http://service.referral.webservice.backend.tms.com/", 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.backend.tms.com/", 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配置
@Configuration
public class WebServiceConfig {
@Autowired
private Bus bus;
@Bean
public 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.backend.tms.com/\"><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.backend.tms.com/", "HelloService"));
Dispatch<Source> disp = service.createDispatch(
new QName("http://service.referral.webservice.backend.tms.com/", "HelloPort"), Source.class,
Mode.PAYLOAD);
Source result = disp.invoke(source);
String resultAsString = StaxUtils.toString(result);
System.out.println(resultAsString);
}