axis中document方式用法
优点:用ducument方式应用现对繁琐而灵活。现在用的比较多。因为真正摆脱了我们不想要的耦合
代码:
publicvoidaddValidation(ServiceClientserviceClient,Stringtns,Stringtoken_str){//创建的头结构,因你的需求不同,可以参考底部的图来对应具体的xml结构OMFactoryfac=OMAbstractFactory.getOMFactory();OMNamespaceomNs=fac.createOMNamespace(tns,"");OMElementheader=fac.createOMElement("AuthorizationSoapHeader",omNs);OMElementtoken=fac.createOMElement("MDIP_ACCESSTOKEN",omNs);//token.setText(token_str);token.addChild(fac.createOMText(token,token_str));header.addChild(token);serviceClient.addHeader(header);}publicvoidinit(){try{Stringinp_no=this.getParameters(null)[0].getValue().toString();Stringurl="http://xxxxx/services/select_v_inp_mr_page_list?wsdl";//assignWebServiceurlEndpointReferencetargetEPR=newEndpointReference(url);Optionsoptions=newOptions();options.setTo(targetEPR);//命名空间/方法拼接起来options.setAction("http://datareceive.service.esb.medata.com/dataReceive");//createrequest创建请求ServiceClientsender=newServiceClient();sender.setOptions(options);//添加请求头,很多时候把鉴权的信息放在请求头里FR_AXIS2_WSse=newFR_AXIS2_WS();se.addValidation(sender,"http://xxxxxxxxx.medata.com/","B298CC760A2F2D09CEC6929D6F6D2190");System.out.println(111);//createanOMFactory,itcontrolnamespace,methodandparameterOMFactoryfac=OMAbstractFactory.getOMFactory();//namespace命名空间OMNamespaceomNs=fac.createOMNamespace("http://xxxxxx.esb.medata.com/","");//method要调用的方法OMElementmethod=fac.createOMElement("dataReceive",omNs);//对应方法名//method'sparameter方法的参数QNameqname=newQName("param");OMElementpara_name=fac.createOMElement(qname);//fac.createOMElement("",omNs);//参数的值para_name.setText(""+inp_no+"");method.addChild(para_name);method.build();OMElementresult1=sender.sendReceive(method);/*根据你的需求解析xml。。不需要的小伙伴可以不看下面*/System.out.println(result1.getFirstElement().getText());System.out.println(result1.getFirstElement().getLocalName());Stringxml=""+result1.getFirstElement().getText();System.out.println(xml);Documentdoc=DocumentHelper.parseText(xml);ElementrootElt=doc.getRootElement();Listnodes=rootElt.elements();StringRETURNCODE=nodes.get(0).getText();StringERRORMEG=nodes.get(1).getText();Listitem_nodes=nodes.get(2).elements();Stringname=null;intindex=0;String[]cols=this.columnNames;Object[][]datas=newObject[item_nodes.size()][cols.length];for(Elementitem:item_nodes){for(inti=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(Elementnode:info_nodes){//System.out.println(node.getName()+":"+node.getText());////}}System.out.println("bbb:"+datas[0][0]);inta1=(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(AxisFaultaxisFault){axisFault.printStackTrace();}catch(DocumentExceptione){e.printStackTrace();}}
wsdl文件打开后的webservice说明:
关于创建命名空间时的第二个参数后缀
OMNamespaceomNs=fac.createOMNamespace(tns,"");
图中targetNames就是命名空间。
如果加了第二个参数会出现什么样子呢?我就是因为加了这个东西,而服务端没有对这个 后缀的解析,导致一直调不通服务。
例如OMNamespaceomNs=fac.createOMNamespace(tns,"dsp");
首先放一段我自己的请求报文(上图)。红框内的xmlns就是命名空间,如果createOMNamespace(tns, "dsp"); 这个方法来创建,则会变成xmlns:dsp=""
<soapenv:Header><AuthorizationSoapHeaderxmlns:dsp="http://xxxxxxxxx.medata.com/"><MDIP_ACCESSTOKEN>B298CC760A2F2D09CEC6929D6F6D2190</MDIP_ACCESSTOKEN></AuthorizationSoapHeader></soapenv:Header>
这就是区别。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。