Spring boot工程中需要和其他系统用soap消息对接,因为系统中未集成web service,所以使用最简单的方法,用HttpURLConnection发送消息:
public String sendSyncRequest(SoapParams params) {
HttpURLConnection httpConn;
BufferedReader reader = null;
try {
httpConn = (HttpURLConnection) new URL(params.getUrl()).openConnection();
httpConn.setRequestProperty("Content-Type","text/xml; charset=utf-8"); // 设置在header中
httpConn.setRequestProperty("username", params.getUsername());
httpConn.setRequestProperty("password", params.getPassword());
httpConn.setRequestMethod("GET");
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
httpConn.connect();
// 获取服务器响应状态
int code = httpConn.getResponseCode();
String tempString = null;
StringBuffer retMsg = new StringBuffer();
if (code == HttpURLConnection.HTTP_OK) {
reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"));
while ( (tempString = reader.readLine()) != null ) {
retMsg.append(tempString);
}
return parseXML(retMsg.toString());
} else {
return "";
}
} catch ( Exception e ) {
log.error("send soap error: ", e);
return "";
} finally {
if (null != reader) {
try {
reader.close();
} catch (IOException e) {
log.error("close BufferedReader error: ", e);
}
}
}
}
/**
* 解析XML
*
* @param input
* @return
*/
private String parseXML(String input) {
Document doc;
try {
doc = DocumentHelper.parseText(input);
// 获取根节点
Element root = doc.getRootElement();
return root.getText();
} catch (Exception e) {
log.error("parse xml error: ", e);
return "";
}
}
import lombok.Data;
@Data
public class SoapParams {
private String url;
private String username;
private String password;
}