Springboot 整合CXF框架

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);

	}

完結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章