Forráskód Böngészése

兼容海康平台在address字段使用错误的<或>破坏xml结构的情况, #903

648540858 2 éve
szülő
commit
e163cf4d20

+ 18 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java

@@ -199,7 +199,24 @@ public abstract class SIPRequestProcessorParent {
 		Byte[] bytes = new Byte[0];
 		byte[] bytesResult = ArrayUtils.toPrimitive(result.toArray(bytes));
 
-		Document xml = reader.read(new ByteArrayInputStream(bytesResult));
+		Document xml;
+		try {
+			xml = reader.read(new ByteArrayInputStream(bytesResult));
+		}catch (DocumentException e) {
+			logger.warn("[xml解析异常]: 愿文如下: \r\n{}", new String(bytesResult));
+			logger.warn("[xml解析异常]: 愿文如下: 尝试兼容性处理");
+			String[] xmlLineArray = new String(bytesResult).split("\\r?\\n");
+
+			// 兼容海康的address字段带有<破换xml结构导致无法解析xml的问题
+			StringBuilder stringBuilder = new StringBuilder();
+			for (String s : xmlLineArray) {
+				if (s.startsWith("<Address")) {
+					continue;
+				}
+				stringBuilder.append(s);
+			}
+			xml = reader.read(new ByteArrayInputStream(stringBuilder.toString().getBytes()));
+		}
 		return xml.getRootElement();
 	}