Skip to content

Commit 63131ec

Browse files
authored
🐛 #3394【企业微信】修复“审批状态通知事件”企微回调XML序列化的bug
1 parent 542f93c commit 63131ec

File tree

2 files changed

+86
-6
lines changed

2 files changed

+86
-6
lines changed

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlApprovalInfo.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -91,19 +91,19 @@ public class WxCpXmlApprovalInfo implements Serializable {
9191
/**
9292
* 审批流程信息
9393
*/
94-
@XStreamImplicit(itemFieldName = "ApprovalNodes")
94+
@XStreamAlias("ApprovalNodes")
9595
private List<ApprovalNode> approvalNodes;
9696

9797
/**
9898
* 抄送信息,可能有多个抄送人
9999
*/
100-
@XStreamImplicit(itemFieldName = "NotifyNodes")
100+
@XStreamAlias("NotifyNodes")
101101
private List<NotifyNode> notifyNodes;
102102

103103
/**
104104
* 抄送人信息
105105
*/
106-
@XStreamAlias("NotifyNodes")
106+
@XStreamAlias("NotifyNode")
107107
@Data
108108
public static class NotifyNode implements Serializable {
109109
private static final long serialVersionUID = -979255011922209018L;
@@ -141,7 +141,7 @@ public static class NotifyNode implements Serializable {
141141
/**
142142
* 审批流程信息,可以有多个审批节点
143143
*/
144-
@XStreamAlias("ApprovalNodes")
144+
@XStreamAlias("ApprovalNode")
145145
@Data
146146
public static class ApprovalNode implements Serializable {
147147
private static final long serialVersionUID = -979255011922209018L;
@@ -167,15 +167,15 @@ public static class ApprovalNode implements Serializable {
167167
/**
168168
* 审批节点信息,当节点为标签或上级时,一个节点可能有多个分支
169169
*/
170-
@XStreamImplicit(itemFieldName = "Items")
170+
@XStreamAlias("Items")
171171
private List<Item> items;
172172

173173
}
174174

175175
/**
176176
* 审批节点分支,当节点为标签或上级时,一个节点可能有多个分支
177177
*/
178-
@XStreamAlias("Items")
178+
@XStreamAlias("Item")
179179
@Data
180180
public static class Item implements Serializable {
181181
private static final long serialVersionUID = -979255011922209018L;

weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java

+80
Original file line numberDiff line numberDiff line change
@@ -301,4 +301,84 @@ public void testChangeContact() {
301301

302302
System.out.println(XStreamTransformer.toXml(WxCpXmlMessage.class, wxCpXmlMessage));
303303
}
304+
305+
/**
306+
* Test open approval change.
307+
*/
308+
public void testOpenApprovalChange() {
309+
String xml = "<xml>\n" +
310+
" <ToUserName><![CDATA[wwddddccc7775555aaa]]></ToUserName>\n" +
311+
" <FromUserName><![CDATA[sys]]></FromUserName>\n" +
312+
" <CreateTime>1527838022</CreateTime>\n" +
313+
" <MsgType><![CDATA[event]]></MsgType>\n" +
314+
" <Event><![CDATA[open_approval_change]]></Event>\n" +
315+
" <AgentID>1</AgentID>\n" +
316+
" <ApprovalInfo>\n" +
317+
" <ThirdNo><![CDATA[201806010001]]></ThirdNo>\n" +
318+
" <OpenSpName><![CDATA[付款]]></OpenSpName>\n" +
319+
" <OpenTemplateId><![CDATA[1234567890]]></OpenTemplateId>\n" +
320+
" <OpenSpStatus>1</OpenSpStatus>\n" +
321+
" <ApplyTime>1527837645</ApplyTime>\n" +
322+
" <ApplyUserName><![CDATA[xiaoming]]></ApplyUserName>\n" +
323+
" <ApplyUserId><![CDATA[1]]></ApplyUserId>\n" +
324+
" <ApplyUserParty><![CDATA[产品部]]></ApplyUserParty>\n" +
325+
" <ApplyUserImage><![CDATA[http://www.qq.com/xxx.png]]></ApplyUserImage>\n" +
326+
" <ApprovalNodes>\n" +
327+
" <ApprovalNode>\n" +
328+
" <NodeStatus>1</NodeStatus>\n" +
329+
" <NodeAttr>1</NodeAttr>\n" +
330+
" <NodeType>1</NodeType>\n" +
331+
" <Items>\n" +
332+
" <Item>\n" +
333+
" <ItemName><![CDATA[xiaohong]]></ItemName>\n" +
334+
" <ItemUserId><![CDATA[2]]></ItemUserId>\n" +
335+
" <ItemImage><![CDATA[http://www.qq.com/xxx.png]]></ItemImage>\n" +
336+
" <ItemStatus>1</ItemStatus>\n" +
337+
" <ItemSpeech><![CDATA[]]></ItemSpeech>\n" +
338+
" <ItemOpTime>0</ItemOpTime>\n" +
339+
" </Item>\n" +
340+
" </Items>\n" +
341+
" </ApprovalNode>\n" +
342+
" <ApprovalNode>\n" +
343+
" <NodeStatus>1</NodeStatus>\n" +
344+
" <NodeAttr>1</NodeAttr>\n" +
345+
" <NodeType>1</NodeType>\n" +
346+
" <Items>\n" +
347+
" <Item>\n" +
348+
" <ItemName><![CDATA[xiaohong]]></ItemName>\n" +
349+
" <ItemUserId><![CDATA[2]]></ItemUserId>\n" +
350+
" <ItemImage><![CDATA[http://www.qq.com/xxx.png]]></ItemImage>\n" +
351+
" <ItemStatus>1</ItemStatus>\n" +
352+
" <ItemSpeech><![CDATA[]]></ItemSpeech>\n" +
353+
" <ItemOpTime>0</ItemOpTime>\n" +
354+
" </Item>\n" +
355+
" <Item>\n" +
356+
" <ItemName><![CDATA[xiaohong]]></ItemName>\n" +
357+
" <ItemUserId><![CDATA[2]]></ItemUserId>\n" +
358+
" <ItemImage><![CDATA[http://www.qq.com/xxx.png]]></ItemImage>\n" +
359+
" <ItemStatus>1</ItemStatus>\n" +
360+
" <ItemSpeech><![CDATA[]]></ItemSpeech>\n" +
361+
" <ItemOpTime>0</ItemOpTime>\n" +
362+
" </Item>\n" +
363+
" </Items>\n" +
364+
" </ApprovalNode>\n" +
365+
" </ApprovalNodes>\n" +
366+
" <NotifyNodes>\n" +
367+
" <NotifyNode>\n" +
368+
" <ItemName><![CDATA[xiaogang]]></ItemName>\n" +
369+
" <ItemUserId><![CDATA[3]]></ItemUserId>\n" +
370+
" <ItemImage><![CDATA[http://www.qq.com/xxx.png]]></ItemImage>\n" +
371+
" </NotifyNode>\n" +
372+
" </NotifyNodes>\n" +
373+
" <approverstep>0</approverstep>\n" +
374+
" </ApprovalInfo>\n" +
375+
"</xml>\n";
376+
377+
WxCpXmlMessage wxCpXmlMessage = WxCpXmlMessage.fromXml(xml);
378+
assertThat(wxCpXmlMessage).isNotNull();
379+
assertThat(wxCpXmlMessage.getApprovalInfo().getApprovalNodes()).isNotEmpty();
380+
assertThat(wxCpXmlMessage.getApprovalInfo().getApprovalNodes().get(0).getItems()).isNotEmpty();
381+
assertThat(wxCpXmlMessage.getApprovalInfo().getApprovalNodes().get(0).getItems().get(0).getItemName()).isNotEmpty();
382+
assertThat(wxCpXmlMessage.getApprovalInfo().getNotifyNodes().get(0).getItemName()).isNotEmpty();
383+
}
304384
}

0 commit comments

Comments
 (0)