您好,登錄后才能下訂單哦!
優(yōu)點:用ducument方式應用現(xiàn)對繁瑣而靈活?,F(xiàn)在用的比較多。因為真正擺脫了我們不想要的耦合
代碼:
public void addValidation(ServiceClient serviceClient, String tns , String token_str) { //創(chuàng)建的頭結構,因你的需求不同,可以參考底部的圖來對應具體的xml結構 OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace(tns, ""); OMElement header = fac.createOMElement("AuthorizationSoapHeader", omNs); OMElement token = fac.createOMElement("MDIP_ACCESSTOKEN", omNs); //token.setText(token_str); token.addChild(fac.createOMText(token, token_str)); header.addChild(token); serviceClient.addHeader(header); } public void init() { try { String inp_no = this.getParameters(null)[0].getValue().toString(); String url = "http://xxxxx/services/select_v_inp_mr_page_list?wsdl"; // assign WebService url EndpointReference targetEPR = new EndpointReference(url); Options options = new Options(); options.setTo(targetEPR); // 命名空間/方法 拼接起來 options.setAction("http://datareceive.service.esb.medata.com/dataReceive"); // create request創(chuàng)建請求 ServiceClient sender = new ServiceClient(); sender.setOptions(options); //添加請求頭,很多時候把鑒權的信息放在請求頭里 FR_AXIS2_WS se = new FR_AXIS2_WS(); se.addValidation(sender, "http://xxxxxxxxx.medata.com/", "B298CC760A2F2D09CEC6929D6F6D2190"); System.out.println (111); // create an OMFactory,it control namespace,method and parameter OMFactory fac = OMAbstractFactory.getOMFactory(); // namespace 命名空間 OMNamespace omNs = fac.createOMNamespace("http://xxxxxx.esb.medata.com/", ""); // method 要調用的方法 OMElement method = fac.createOMElement("dataReceive", omNs); // 對應方法名 //method's parameter 方法的參數(shù) QName qname = new QName("param"); OMElement para_name = fac.createOMElement(qname);//fac.createOMElement("",omNs); //參數(shù)的值 para_name.setText(""+inp_no+""); method.addChild(para_name); method.build(); OMElement result1 = sender.sendReceive(method); /*根據(jù)你的需求解析xml。。不需要的小伙伴可以不看下面*/ System.out.println(result1.getFirstElement().getText()); System.out.println(result1.getFirstElement().getLocalName()); String xml = "" + result1.getFirstElement().getText() ; System.out.println(xml); Document doc = DocumentHelper.parseText(xml); Element rootElt = doc.getRootElement(); Listnodes = rootElt.elements(); String RETURNCODE = nodes.get(0).getText(); String ERRORMEG = nodes.get(1).getText(); Listitem_nodes = nodes.get(2).elements(); String name = null; int index = 0; String[] cols = this.columnNames; Object[][] datas = new Object[item_nodes.size()][cols.length]; for (Element item:item_nodes) { for(int i =0;i<cols.length;i++) {="" system.out.println(cols[i]);="" name="item.element(cols[i]).getText();" system.out.println("xxxx:"+name+",item_nodes.size():"+item_nodes.size());="" datas[index][i]="item.element(cols[i]).getText();" }="" index++;="" listinfo_nodes = item.elements(); // for(Element node : info_nodes){ // System.out.println(node.getName()+":"+node.getText()); // // } } System.out.println("bbb:"+datas[0][0]); int a1 = (int)(100*Math.random()); //String[] columnNames = {"NAMES","SCORE","init_method"}; // Object[][] datas = {{"Alex", a1,11}, // {"Helly", 1112,23}, {"bob", 99,name}};//result1.getFirstElement().getText() this.columnNames = columnNames; this.rowData = datas; } catch (AxisFault axisFault) { axisFault.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } }
wsdl文件打開后的webservice說明:
關于創(chuàng)建命名空間時的第二個參數(shù)后綴
OMNamespace omNs = fac.createOMNamespace(tns, "");
圖中targetNames就是命名空間。
如果加了第二個參數(shù)會出現(xiàn)什么樣子呢?我就是因為加了這個東西,而服務端沒有對這個 后綴的解析,導致一直調不通服務。
例如OMNamespace omNs = fac.createOMNamespace(tns, "dsp");
首先放一段我自己的請求報文(上圖)。紅框內的xmlns就是命名空間,如果createOMNamespace(tns, "dsp"); 這個方法來創(chuàng)建,則會變成xmlns:dsp=""
<soapenv:Header> <AuthorizationSoapHeader xmlns:dsp="http://xxxxxxxxx.medata.com/"> <MDIP_ACCESSTOKEN>B298CC760A2F2D09CEC6929D6F6D2190</MDIP_ACCESSTOKEN> </AuthorizationSoapHeader> </soapenv:Header>
這就是區(qū)別。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。