import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
* Req_Mode_WebService 请求模式
*
* @author wst(shi-tao.wen) 2021年9月13日 上午10:20:43
*
*/
public class ReqModeWebService {
public static boolean test = false;
private Logger logger = LoggerFactory.getLogger(this.getClass());
public ReqModeWebService() {
}
* WebService服务请求
*
* @author wst(shi-tao.wen) 2021年9月3日 上午10:57:28
* @param apiParam
* @return
*/
public GeneralApiResult WebServiceFun(GeneralApiParamInfo apiParam) {
logger.info("WebServiceFun --> ");
GeneralApiResult result = new GeneralApiResult();
HttpURLConnection connect = null;
DataOutputStream out = null;
BufferedReader bufferedReader = null;
try {
URL url = new URL(apiParam.getActualServerUrl());
connect = (HttpURLConnection) url.openConnection();
connect.setDoOutput(true);
connect.setDoInput(true);
connect.setRequestMethod("POST");
connect.setRequestProperty("SOAPAction", apiParam.getNamepace() + apiParam.getActualInteface());
connect.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");
connect.setRequestProperty("content-length", apiParam.getParams().toString().getBytes("UTF-8").length + "");
out = new DataOutputStream(connect.getOutputStream());
out.write(getXML(apiParam.getActualInteface(), apiParam.getParams().toString()).getBytes("UTF-8"));
out.flush();
out.close();
int code = connect.getResponseCode();
String tempString = null;
StringBuffer sb = new StringBuffer();
if (code == HttpURLConnection.HTTP_OK) {
bufferedReader = new BufferedReader(new InputStreamReader(connect.getInputStream(), "UTF-8"));
} else {
bufferedReader = new BufferedReader(new InputStreamReader(connect.getErrorStream(), "UTF-8"));
}
while ((tempString = bufferedReader.readLine()) != null) {
sb.append(tempString);
}
if (null != bufferedReader) {
bufferedReader.close();
}
String websn = sb.toString();
connect.disconnect();
if (GeneralStringUtils.isBlank(websn)) {
result.setMsg("接口请求异常,返回信息为空");
result.setCode(500);
result.setData("接口请求异常,返回信息为空");
} else {
String start = "<" + apiParam.getActualInteface() + "Return>";
String end = "</" + apiParam.getActualInteface() + "Return>";
String responseXml = websn.substring(websn.indexOf(start) + start.length(), websn.lastIndexOf(end)).replaceAll("& lt;", "<").replaceAll("& gt;", ">");
result.setMsg("接口请求成功");
result.setCode(200);
result.setData(decodeUnicode(responseXml));
}
} catch (Exception e) {
result.setCode(500);
result.setData("");
result.setMsg("系统请求异常,请求超时或业务异常,请稍后再试" + (e.getMessage() == null ? "" : ("," + e.getMessage())));
logger.info(result.getMsg());
if (e.getCause() != null && e.getCause().toString().toLowerCase().contains("time")
&& e.getCause().toString().toLowerCase().contains("out")) {
}
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (connect != null) {
try {
connect.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return result;
}
public static void main(String[] args) {
String xml = "<操作*>取认证相片</操作*><用户名*>99999</用户名*><密码*>99999</密码*>";
GeneralApiParamInfo apiParam = new GeneralApiParamInfo();
apiParam.setParams(getXML("allDsjk", xml));
apiParam.setActualServerUrl("http://*.*.*.*/Service?wsdl");
apiParam.setActualInteface("allDsjk");
apiParam.setNamepace("http://***.wei.com/");
GeneralApiResult result = new ReqModeWebService().WebServiceFun(apiParam);
System.out.println(decodeUnicode(result.getData().toString()));
}
public static String getXML(String fun, String message) {
String xml = message.replaceAll("<", "& lt;").replaceAll(">", "& gt;");
String soapXML =
"<?xml version=\"1.0\" encoding=\"utf-16\"?>"
+ "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"
+ "<soap:Body>"
+ "<" + fun + " xmlns=\"http://server.wei.com\">"
+ "<xml>" + xml + "</xml>"
+ "</" + fun + ">" + "</soap:Body>"
+ "</soap:Envelope>";
return soapXML;
}
* &#x转码
* @author wst 2022年10月20日 下午4:27:05
* @param sourceString
* @return
*/
public static String decodeUnicode(String sourceString) {
Pattern compile = Pattern.compile("&#.*?;");
Matcher matcher = compile.matcher(sourceString);
while (matcher.find()) {
String group = matcher.group();
String hexcode = "0" + group.replaceAll("(&#|;)", "");
sourceString = sourceString.replaceAll(group, (char) Integer.decode(hexcode).intValue() + "");
}
return sourceString;
}
}