通過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類,服務器端只要提供路徑和接口方法名稱就可以方便調用。