From 52ac2864ba27720c8ab19330f3742ba51d8f54d2 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 24 Sep 2025 07:32:57 +0000
Subject: [PATCH 1/2] Initial plan
From 8b81d4560b6943b27c6c54dbf8e50e7265bb9c54 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 24 Sep 2025 07:43:26 +0000
Subject: [PATCH 2/2] Fix MsgId type from Long to String in WxCpXmlMessage and
update tests
Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com>
---
.../cp/bean/message/WxCpXmlMessage.java | 2 +-
.../cp/bean/message/WxCpXmlMessageTest.java | 31 ++++++++++++++++++-
2 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
index e37229cf8e..c5e55220e5 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java
@@ -92,7 +92,7 @@ public class WxCpXmlMessage implements Serializable {
private String content;
@XStreamAlias("MsgId")
- private Long msgId;
+ private String msgId;
@XStreamAlias("PicUrl")
@XStreamConverter(value = XStreamCDataConverter.class)
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java
index 5bcfe9698a..ae4fbba8f6 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java
@@ -72,7 +72,7 @@ public void testFromXml() {
assertEquals(wxMessage.getCreateTime(), Long.valueOf(1348831860));
assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.TEXT);
assertEquals(wxMessage.getContent(), "this is a test");
- assertEquals(wxMessage.getMsgId(), Long.valueOf(1234567890123456L));
+ assertEquals(wxMessage.getMsgId(), "1234567890123456");
assertEquals(wxMessage.getPicUrl(), "this is a url");
assertEquals(wxMessage.getMediaId(), "media_id");
assertEquals(wxMessage.getFormat(), "Format");
@@ -442,4 +442,33 @@ public void testUploadMediaJobFinishEvent() {
assertThat(wxCpXmlMessage.getJobId()).isEqualTo("jobid_S0MrnndvRG5fadSlLwiBqiDDbM143UqTmKP3152FZk4");
assertThat(wxCpXmlMessage.getEvent()).isEqualTo(UPLOAD_MEDIA_JOB_FINISH);
}
+
+ /**
+ * Test both numeric and string msgId formats to ensure backward compatibility
+ */
+ public void testMsgIdStringAndNumericFormats() {
+ // Test with numeric msgId (old format)
+ String xmlWithNumeric = ""
+ + ""
+ + ""
+ + "1348831860"
+ + ""
+ + ""
+ + "1234567890123456"
+ + "";
+ WxCpXmlMessage wxMessageNumeric = WxCpXmlMessage.fromXml(xmlWithNumeric);
+ assertEquals(wxMessageNumeric.getMsgId(), "1234567890123456");
+
+ // Test with string msgId (new format - the actual issue case)
+ String xmlWithString = ""
+ + ""
+ + ""
+ + "1348831860"
+ + ""
+ + ""
+ + "CAIQg/PKxgYY2sC9tpuAgAMg9/zKaw=="
+ + "";
+ WxCpXmlMessage wxMessageString = WxCpXmlMessage.fromXml(xmlWithString);
+ assertEquals(wxMessageString.getMsgId(), "CAIQg/PKxgYY2sC9tpuAgAMg9/zKaw==");
+ }
}