Axis2訪問cxf釋出的webservice的引數設定問題
阿新 • • 發佈:2019-01-25
在最近的專案過程中,需要釋出一個webservice給其他系統呼叫。鑑於cxf與spring的整合比較方便,所以選用cxf框架。釋出後,對方使用axis2反覆出現無法呼叫的情況。在多次查資料之後,終於解決了這個問題。我把它記錄下來,希望能給同樣在困惑的朋友們一點靈感。
關於,cxf的webservice的code和釋出就不再贅述了。這裡著重講一下,服務釋出後如何用axis2呼叫的問題。
使用axis2客戶端呼叫有兩種方式:
1.使用ServiceClient,程式碼如下:
2.使用RPCServiceClient,程式碼如下:public static void main(String[] args) { try { String soapBindingAddress = "http://localhost:8080/test/services/testService?wsdl";//訪問地址 ServiceClient sender = new ServiceClient(); EndpointReference endpointReference = new EndpointReference(soapBindingAddress); Options options = new Options(); options.setAction("http://server.webService.test/");//指定action options.setTo(endpointReference); sender.setOptions(options); OMFactory fac = OMAbstractFactory.getOMFactory(); // 這個和qname差不多,設定名稱空間 OMNamespace omNs = fac.createOMNamespace("http://server.webService.test/", "test"); OMElement data = fac.createOMElement("test", omNs); // 對應引數的節點,xmlStr是引數名稱 String[] strs = new String[] { "xmlStr" }; // 引數值 String[] val = new String[] { "axis2 serviceClient tester" }; for (int i = 0; i < strs.length; i++) { OMElement inner = fac.createOMElement(strs[i], omNs); inner.setText(val[i]); data.addChild(inner); } // 傳送資料,返回結果 OMElement result = sender.sendReceive(data); System.out.println(result.toString()); } catch (AxisFault ex) { ex.printStackTrace(); }
public static void main(String[] args) { //使用RPC方式呼叫WebService RPCServiceClient serviceClient = null; try { serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); String serviceUrl = "http://localhost:8080/test/services/testService"; EndpointReference targetEPR = new EndpointReference(serviceUrl); options.setTo(targetEPR); OMFactory fac = OMAbstractFactory.getOMFactory(); // 這個和qname差不多,設定名稱空間 OMNamespace omNs = fac.createOMNamespace("http://server.webService.test/", "test"); OMElement data = fac.createOMElement("test", omNs); // 對應引數的節點,xmlStr為引數名稱 String[] strs = new String[] { "xmlStr" }; // 引數值 String[] val = new String[] { "axis2 EndpointReference tester" }; for (int i = 0; i < strs.length; i++) { OMElement inner = fac.createOMElement(strs[i], omNs); inner.setText(val[i]); data.addChild(inner); } OMElement object = serviceClient.sendReceive(data); System.out.println(object.toString()); serviceClient.cleanupTransport(); }catch (Exception e) { e.printStackTrace(); } }