gsoap 如何防止枚举值的下划线翻译

gsoap how to prevent underscore translation for enum values

有没有办法影响在 gSoap 生成的 soap 消息中使用哪些文本值?为了与现有客户端兼容,我需要 soap 服务使用带下划线的标识符,但 gsoap 使用破折号。

soapcpp2 输入文件中的部分声明

enum class ns1__resultCode
{
    OK, ///< xs:string value="OK"
    ERROR_INVALID_SESSION,  ///< xs:string value="ERROR_INVALID_SESSION"
    ...
};

当服务器发送 ERROR_INVALID_SESSION 时,soap 消息包含 ERROR-INVALID-SESSION 但我需要它是 ERROR_INVALID_SESSION 因为这是现有客户所期望的。

C/C++ 名称中的下划线在 XML 中被转换为连字符作为 gSOAP 约定。我知道连字符在 XML 中比下划线更常见(或曾经),这就是原因。要在 XML 中使用下划线而不是连字符,请使用 _USCOREERROR_USCOREINVALID_USCORESESSION 在 XML 中变为 ERROR_INVALID_SESSION。点也以这种方式翻译,例如ERROR_DOTINVALID_DOTSESSION 变为 ERROR.INVALID.SESSION。其他字符使用 _xHHHH 编码,例如ERROR_x002fINVALID_x202fSESSION 变为 ERROR/INVALID/SESSION。这涵盖了高达 U+FFFF 的 Unicode 代码点。

当然,除了使用需要将 C/C++ 名称转换为 XML 的枚举之外,还可以使用(宽)字符串并使用任何 Unicode 代码点。