WebService学习总结(七)——通过URLConnection调用webService接口,解析wsdl

这篇文章主要利用URLconnection调用webService接口,并利用dom4解析返回的数据

1.wsdl数据(访问http://localhost:8081/ERPDEMO/service/users?wsdl)


































































2.利用soapui获得你所有方法的soap格式数据

WebService学习总结(七)——通过URLConnection调用webService接口,解析wsdl_第1张图片


3.开始写方法,我将调用方法和dom4j解析方法写在一起,后期再分开吧

	public static void main(String[] args) throws Exception {
		// WebService服务的地址
		URL url = new URL("http://localhost:8081/ERPDEMO/service/users?wsdl");
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		// 是否具有输入参数
		conn.setDoInput(true);
		// 是否输出输入参数
		conn.setDoOutput(true);
		// 发POST请求
		conn.setRequestMethod("POST");
		// 设置请求头(注意一定是xml格式)
		conn.setRequestProperty("content-type", "text/xml;charset=utf-8");
		String username = "csdn1";
		// 构造请求体,符合SOAP规范(最重要的)
		String requestBody = ""
				+ " "
				+ " "

				+ ""
				+ ""
				+ username
				+ ""
				+ ""

				+ " "
				+ ""
				+ "";

		// 获得一个输出流
		OutputStream out = conn.getOutputStream();
		out.write(requestBody.getBytes());

		// 获得服务端响应状态码
		int code = conn.getResponseCode();
		StringBuffer sb = new StringBuffer();
		if (code == 200) {
			// 获得一个输入流,读取服务端响应的数据
			InputStream is = conn.getInputStream();
			byte[] b = new byte[1024];
			int len = 0;

			while ((len = is.read(b)) != -1) {
				String s = new String(b, 0, len, "utf-8");
				sb.append(s);
			}
			is.close();
		}

		out.close();
		System.out.println("服务端响应数据为:" + sb.toString());

		// 初始化报文,调用parse方法,获得结果map,然后按照需求取得字段,或者转化为其他格式
		Map map = new test01().parse(sb.toString());
		// 获得字段的值;
		String email = map.get("email").toString();
		String id = map.get("id").toString();
		String password = map.get("password").toString();
		String roleid = map.get("roleid").toString();
		String username1 = map.get("username").toString();
		System.out.println("email==" + email);
		System.out.println("id==" + id);
		System.out.println("password==" + password);
		System.out.println("roleid==" + roleid);
		System.out.println("username1==" + username1);

	}

dom4j解析方法

public Map map = new HashMap();

	/**
	 * 解析soap
	 * 
	 * @param soap
	 * @return
	 * @throws DocumentException
	 */
	public Map parse(String soap) throws DocumentException {
		Document doc = DocumentHelper.parseText(soap);// 报文转成doc对象
		Element root = doc.getRootElement();// 获取根元素,准备递归解析这个XML树
		getCode(root);
		return map;
	}

	/**
	 * 遍历
	 * 
	 * @param root
	 */
	public void getCode(Element root) {
		if (root.elements() != null) {
			List list = root.elements();// 如果当前跟节点有子节点,找到子节点
			for (Element e : list) {// 遍历每个节点
				if (e.elements().size() > 0) {
					getCode(e);// 当前节点不为空的话,递归遍历子节点;
				}
				if (e.elements().size() == 0) {
					map.put(e.getName(), e.getTextTrim());
				}// 如果为叶子节点,那么直接把名字和值放入map
			}
		}

	}

下面是返回的数据

1.soap返回的数据格式

服务端响应数据为:


111qq.com
1
1231csdn1


2.dom4j解析后的结果

email==111qq.com
id==1
password==123
roleid==1
username1==csdn1



你可能感兴趣的:(WebService)