Java調用CXF WebService接口的兩種方式實例

通過http://127.0.0.1:10082/DCCS/ws/MeterReading?wsdl訪問到xml內容如下,說明接口可以訪問,沒有問題。

1.靜態調用

        // 創建一個WS客戶端代理工廠Bean 
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		// 判斷是否拋出異常
		factory.getOutInterceptors().add(new LoggingInInterceptor());
		// 註冊WS接口,設定WS業務類爲MeterReadingUpload
		factory.setServiceClass(MeterReadingUpload.class);
		// 配置WS地址 http://127.0.0.1:10082/DCCS/ws/MeterReading?wsdl
		factory.setAddress(url);
		// 添加Aegis
		factory.getServiceFactory().setDataBinding(new AegisDatabinding());
		// 獲取接口對象
		MeterReadingUpload client = (MeterReadingUpload) factory.create();
		
		// 超時處理
		Client c=ClientProxy.getClient(client);
		HTTPConduit conduit = (HTTPConduit) c.getConduit();
		HTTPClientPolicy policy = new HTTPClientPolicy();
		policy.setConnectionTimeout(10000); //連接超時時間
		policy.setReceiveTimeout(300000);//請求超時時間.
		conduit.setClient(policy);

 2.動態調用

        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
		Client client1 = dcf.createClient(url);
		// namespace是命名空間,methodName是方法名
		QName qName = new QName("http://www.ake.com.cn/", "sendMeterReading");
		String md5 = SystemTools.getMD5Str(concentratorId + md5key);
		Object[] rs = client1.invoke(qName, gatewayID, md5, typeCode, readingList);
		System.out.println(rs[0].toString());

區別:

靜態調用需要依賴service類,因爲客戶端調用cxf webservice接口的過程中需要服務器端提供service,需要使用cxf工具將webservice的class類生成到本地,引入到項目代碼中,從而調用相應的接口方法,很不方便,如果同一個項目中則沒有區別。

動態調用完全不依賴service類,服務器端只要提供路徑和接口方法名稱就可以方便調用。

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