优点:用ducument方式应用现对繁琐而灵活。现在用的比较多。因为真正摆脱了我们不想要的耦合
代码:
public void addValidation(ServiceClient serviceClient, String tns , String token_str) {
//创建的头结构,因你的需求不同,可以参考底部的图来对应具体的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创建请求
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 方法的参数
QName qname = new QName("param");
OMElement para_name = fac.createOMElement(qname);//fac.createOMElement("",omNs);
//参数的值
para_name.setText(""+inp_no+"");
method.addChild(para_name);
method.build();
OMElement result1 = sender.sendReceive(method);
/*根据你的需求解析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说明:
关于创建命名空间时的第二个参数后缀
OMNamespace omNs = fac.createOMNamespace(tns, "");
图中targetNames就是命名空间。
如果加了第二个参数会出现什么样子呢?我就是因为加了这个东西,而服务端没有对这个 后缀的解析,导致一直调不通服务。
例如OMNamespace omNs = fac.createOMNamespace(tns, "dsp");
首先放一段我自己的请求报文(上图)。红框内的xmlns就是命名空间,如果createOMNamespace(tns, "dsp"); 这个方法来创建,则会变成xmlns:dsp=""
<soapenv:Header>
<AuthorizationSoapHeader xmlns:dsp="http://xxxxxxxxx.medata.com/">
<MDIP_ACCESSTOKEN>B298CC760A2F2D09CEC6929D6F6D2190</MDIP_ACCESSTOKEN>
</AuthorizationSoapHeader>
</soapenv:Header>
这就是区别。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。