2026-09-07 15:11:33 +08:00
|
|
|
package com.gzzn.omms.msgexchange.codec
|
2026-09-06 16:13:50 +08:00
|
|
|
|
2026-09-07 15:11:33 +08:00
|
|
|
import com.gzzn.omms.msgexchange.domain.DecodedMessage
|
|
|
|
|
import com.gzzn.omms.msgexchange.domain.ErrorClass
|
2026-09-06 16:13:50 +08:00
|
|
|
|
|
|
|
|
/**
|
2026-09-10 11:14:11 +08:00
|
|
|
* 解码失败的结果:错误分类加上一句原因。
|
|
|
|
|
* MALFORMED 是报文本身不合法、重试也不会过;CODEC_ERROR 是解码逻辑的问题,修好后可以重放。
|
2026-09-06 16:13:50 +08:00
|
|
|
*/
|
|
|
|
|
data class DecodeFailure(val errorClass: ErrorClass, val detail: String)
|
|
|
|
|
|
|
|
|
|
sealed interface DecodeResult {
|
|
|
|
|
data class Ok(val message: DecodedMessage) : DecodeResult
|
|
|
|
|
data class Err(val failure: DecodeFailure) : DecodeResult
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2026-09-10 11:14:11 +08:00
|
|
|
* XML 解码入口:先用标注了 Jackson XML 注解的 DTO 接住报文体,再显式转成领域模型。
|
|
|
|
|
*
|
|
|
|
|
* 解析时关掉 DTD 和外部实体,避免 XML 外部实体注入;报文原文由入站层另行留存,这里不管。
|
2026-09-06 16:13:50 +08:00
|
|
|
*/
|
|
|
|
|
interface XmlCodec {
|
|
|
|
|
fun decode(rawXml: String): DecodeResult
|
|
|
|
|
fun encodeRqrd(kind: String, rangeJson: String): String
|
|
|
|
|
}
|