java调用c# Webservice 添加认证头

前言:项目中遇到调用webservice 增加表头验证的逻辑,于是从网上找资料。一直跪倒底。没解决。终于功夫不负有心人。哈哈哈哈。解决方法用的是直接访问http的方法,拼接xml。

如果还有小白不知道xml拼接是什么鬼,那么到现在你用过测试工具测试一下你的webservice 可以调通吗。比如 postman,soapui等

里面测试的时候不就是xml格式的吗。

 

一。用于拼接xml的表头信息  表头的标签根据自己的情况设置  里面包含用户和密码

public static String getSoapHeader(){
			//上面代码为从缓存中取到我们需求传递到认证头的数据 下面开始添加认证头
			StringBuffer soapHeader = new StringBuffer();
			soapHeader.append("");
			soapHeader.append("");
			soapHeader.append("HICUser");
			soapHeader.append("passWord");
			soapHeader.append("");
			soapHeader.append("");
			return soapHeader.toString();
	}

二.拼接主体的xml信息  这个方法是我传递数据的对象,你们可以删掉用你们自己的

public static String addAsnInfo(AsnChild child,Asn asn,Integer falg) {
		SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
		StringBuffer template = new StringBuffer("");
		template.append(""+child.getPlant()+"");
		template.append(""+asn.getVendorCode().getCode()+"");
		template.append(""+asn.getIsBonded()+"");
		template.append(""+child.getLocation()+"");
		template.append(""+asn.getAsnNo()+"");
		template.append(""+child.getAsnLine()+"");
		template.append(""+format.format(asn.getDeliveryDate())+"");
		template.append(""+child.getPo()+"");
		template.append(""+child.getPoLine()+"");
		template.append(""+child.getMaterial().getMaterialCode()+"");
		
		return template.toString();
	}

三.把表头和body进行拼接  返回整体的xml字符串

public static String getAccInfoXml(List list,Asn asn,Integer falg){
		
		StringBuffer template = new StringBuffer();
		String header = getSoapHeader();
		template.append("");
		template.append("");
		template.append(header);
		template.append("");
		template.append("");
		template.append("");
		for (int i = 0; i < list.size(); i++) {
			AsnChild child = list.get(i);
			template.append("");
			template.append(addAsnInfo(child,asn,falg));
			template.append("");
		}
		template.append("");
		template.append("");
		template.append("");
		template.append("");
		return template.toString();
	}

四.调用方法

public static String sendHic(List list,Asn asn,Integer falg){
		String dataJson = "";
		List> dataList = new ArrayList>();
		//请求的webservice地址
		String urlStr = "http://000.23.107.176/SCEDIServiceTest/SupplyCloudService.asmx";
		//获取xml信息  获取xml主体的方法和表头的
		String paraXml = getAccInfoXml(list, asn,falg);
		//请求的 命名空间 + 里面的方法名称 (区分大小写)  targetNamespace="http://P2LVEDI.Pror/"
		String soapAction ="http://P2LVEDI.Pror/ASNSCEDI";
		OutputStream out = null;
		try {
			URL url = new URL(urlStr);
 
			HttpURLConnection con;
			con = (HttpURLConnection) url.openConnection();
			con.setDoOutput(true);
			con.setDoInput(true);
			//不用改
			con.setRequestMethod("POST");
			con.setUseCaches(false);
			//不用改
			con.setRequestProperty("Content-type", "text/xml; charset=UTF-8");
			//con.setRequestProperty("WSS-Password Type", "PasswordText");
			//不用改
			con.setRequestProperty("SOAPAction", soapAction);
			//con.setRequestProperty("Encoding", "UTF-8");
			out = con.getOutputStream(); 
			con.getOutputStream().write(paraXml.getBytes()); 
			out.flush();
		    out.close();
		    int code = con.getResponseCode();
		    String tempString = null;
		  //请求返回的结果
		    StringBuffer sb1 = new StringBuffer();
		    if (code == HttpURLConnection.HTTP_OK) {
		    	BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			     while ((tempString = reader.readLine()) != null) {
			      sb1.append(tempString);
			     }
			     if (null != reader) {
			    	 reader.close();
			     }
		    } else {
			     BufferedReader reader = new BufferedReader(new InputStreamReader(con.getErrorStream(), "UTF-8"));
			     // 一次读入一行,直到读入null为文件结束
			     while ((tempString = reader.readLine()) != null) {
			      sb1.append(tempString);
			     }
			     if (null != reader) {
			      reader.close();
			     }
		    }
			    //响应报文  返回一个xml格式的字符串
		    	String respData=sb1.toString();
		    	// 字符串转XML 
		    	String xmlStr = respData;
		    	StringReader sr = new StringReader(xmlStr); 
		    	InputSource is = new InputSource(sr); 
		    	DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
		    	DocumentBuilder builder=factory.newDocumentBuilder(); 
		    	Document doc = builder.parse(is);
		    	String nodePath = "/Envelope/Body/ASNSCEDIResponse/ASNSCEDIResult/MSGTY";
		    	String nodePath1 = "/Envelope/Body/ASNSCEDIResponse/ASNSCEDIResult/MESSAGE";
		    	String info = getNodeValue(doc,nodePath);
		    	String info1 = getNodeValue(doc,nodePath1);
		    	return info1;
		   } catch (Exception e) {
			   e.printStackTrace();
			   return e.getMessage();
		   }
	}

文章可能写的不是特备好。见谅!如果还有不懂的小伙伴,可以进群直接找我  551937103  

你可能感兴趣的:(java)