(三)CXF發佈WebService服務

1.導入CXF相關jar包,我是用maven管理工程的,所以直接貼出CXF的maven依賴

<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-frontend-jaxws</artifactId>
	<version>2.7.11</version>
</dependency>
<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-transports-http-jetty</artifactId>
	<version>2.7.11</version>
</dependency>

2.接口

package cn.cjc.cxf;

public interface IMessage {
	String getMsg(String username);
}
3.實現類

package cn.cjc.cxf;

public class MessageImpl implements IMessage {

	@Override
	public String getMsg(String username) {
		return username + ",歡迎學習CXF";
	}
}
4.發佈服務,CXF發佈服務需要內置jetty服務器的支持,maven依賴中cxf-rt-transports-http-jetty的引入目的就在此

package cn.cjc.cxf;

import org.apache.cxf.frontend.ServerFactoryBean;

public class PubCXF {

	public static void main(String[] args) {
		// 創建服務
		ServerFactoryBean server = new ServerFactoryBean();
		// 設置發佈地址
		server.setAddress("http://localhost:9999/mymsg");
		// 設置接口
		server.setServiceClass(IMessage.class);
		// 設置實現類
		server.setServiceBean(new MessageImpl());
		// 發佈服務
		server.create();
	}
}
5.調用服務,新建一個工程,然後用JDK自帶的wsimport命令或者CXF自帶的wsdl2java命令生成客戶端調用代碼,調用方式有兩種,既可以使用JDK的方式調用,也可以使用CXF的方式調用

a)使用傳統方式調用

package cn.cjc.cxf;
public class Invoke {

	public static void main(String[] args) {
		IMessagePortType service = new IMessage().getIMessagePort();
		System.out.println(service.getMsg("Junki"));
	}
}
b)使用CXF方式調用

package cn.cjc.cxf;

import org.apache.cxf.frontend.ClientProxyFactoryBean;

public class Invoke {

	public static void main(String[] args) {
		// 創建調用客戶端
		ClientProxyFactoryBean client = new ClientProxyFactoryBean();
		// 設置調用地址
		client.setAddress("http://localhost:9999/mymsg");
		// 設置調用接口
		client.setServiceClass(IMessagePortType.class);
		IMessagePortType service = (IMessagePortType) client.create();
		System.out.println(service.getMsg("Junki"));
	}
}
6.輸出結果

Junki,歡迎學習CXF

7.結束語

可以看到,CXF方式的發佈用的是ServerFactoryBean,調用用的是ClientProxyFactoryBean,這種方式無需在接口和實現類上使用任何註解,缺點就是無法個性化協議文件。其實CXF還有一對發佈調用類,發佈類JaxWsServerFactoryBean和調用類JaxWsProxyFactoryBean,這種方式發佈服務時需要JDK原生WebService註解的支持,好處也很明顯,就是可以個性化協議文件。


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