dom4j解析soap xml
来源:互联网 发布:淘宝店能卖图片吗 编辑:程序博客网 时间:2024/04/29 14:10
做项目,客户给的webService接口,传入一个用户名,来获取数据。先用的
RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference( "http://XXXXXXX"); options.setTo(targetEPR); Object[] opAddEntryArgs = new Object[] {UserID}; Class[] classes = new Class[] {Task.class};//此处的Task为返回的对象 QName opAddEntry = new QName("http://XXXXX", "XXX");
但这样用一直报错。说预期的参数为{}UserID……,所以用了HttpClient方法,如下:
//此处的Document为dom4j的DocumentDocument responseStr = null; //此处的userName就是需要传入的参数,XXX为targetNamespace,其他都是固定的 String soapRequestData= "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ust=\""+XXX+">\n" + " <soapenv:Header/>\n" + " <soapenv:Body>\n" + " <ust:getNewTasks>\n" + " <UserID>"+ userName +"</UserID>\n" + " </ust:getNewTasks>\n" + " </soapenv:Body>\n" + "</soapenv:Envelope>"; try { //此处的url为webService接口,但不需要最后的/wsdl responseStr=invokeWSMethod(soapRequestData, url,"urn:#getNewTasks"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
这样就返回了一个Document的xml数据,数据如下:
<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns2:root xmlns:ns2="http://www.ustcsoft.com"> <ns2:task> <userid>myc</userid> <custname>你好你好你好</custname> <title>阿拉啦啦啦啦</title> <nodename>金丝能接受是</nodename> <recetime>201701160949</recetime> <tasktype>1</tasktype> </ns2:task> </ns2:root> </soap:Body></soap:Envelope>
此处的task就是要返回的对象,task可能有多个。经过查询之后找到这样一个方法:
public static List<Task> xmlToBean(Document doc) { List<Task> returnTaskList = new ArrayList<Task>(); Task task = null; doc.getText(); try{ String text = doc.asXML(); DefaultXPath xpath = new DefaultXPath("//ns2:task"); xpath.setNamespaceURIs(Collections.singletonMap("ns2","http://www.ustcsoft.com")); //先获取所有的task List<Element> list = xpath.selectNodes(doc); if(list.size() > 0) { for(int j=0; j<list.size(); j++) { task = new Task(); //获取task下的所有子节点 Element element = list.get(j); //遍历每一个子节点 for(Iterator<Element> it = element.elementIterator(); it.hasNext();) { Element element2 = it.next(); String name = element2.getName(); String content = element2.getText(); //下面的操作是因为每一个task我只需要custname、title、nodename这三个字段信息 if("custname".equals(name)) { task.setCustname(content); } else if("title".equals(name)) { task.setTitle(content); } else if("nodename".equals(name)) { task.setNodename(content); } } returnTaskList.add(task); } } }catch(Exception e) { log.info("", e); } return returnTaskList; }
这样就将一个soap的xml数据解析成为一个对象了。
【注:解析xml是从网上搜的方法,由于是几天前搜的,所以忘了地址。】
0 0
- dom4j解析soap xml
- dom4j解析soap型消息xml
- dom4j解析字符串型soap.xml文件
- 用dom4j解析xml,soap报文
- dom4j解析soap报文
- soap发送报文请求和dom4j解析XML并且获得指定名称的节点信息
- 解析soap Xml
- SOAP XML报文解析
- 用DOM4J解析XML
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- 解析xml之--DOM4J
- dom4j解析XML
- 使用 dom4j 解析 XML
- xml文件解析-DOM4J
- 使用 dom4j 解析 XML
- 使用 dom4j 解析 XML
- dom4j解析xml方法
- sql 游标
- ADV7511 API说明
- Markdown 语法示例
- 【Python】在PyCharm环境配置Autopep8到菜单栏
- BZOJ 1568 李超线段树
- dom4j解析soap xml
- cocos2d-x 3.x 图形学渲染系列十九
- 打包过程 华为手机无法打印日志
- DescriptionResourcePathLocationType The project was not built due to "Could not delete .....
- WEB控件(2017-01-18)(上)
- textview 滚动
- 解决Access数据库突然变得很大的方法
- android 启动活动传递参数的最佳写法
- Runtime(交换方法)笔记