Skip to content

更新最新代码 #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 7, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@
<maven.compiler.target>1.8</maven.compiler.target>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<httpclient.version>4.5</httpclient.version>
<httpclient.version>4.5.13</httpclient.version>
<jetty.version>9.4.38.v20210224</jetty.version>
</properties>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public static class XmlMsgType {
public static final String DEVICE_STATUS = "device_status";
public static final String HARDWARE = "hardware";
public static final String TRANSFER_CUSTOMER_SERVICE = "transfer_customer_service";
public static final String UPDATE_TASKCARD = "update_taskcard";
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
package me.chanjar.weixin.common.util.http.apache;

import java.io.IOException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.annotation.NotThreadSafe;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
Expand All @@ -25,10 +20,13 @@
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.protocol.HttpContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.annotation.concurrent.NotThreadSafe;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

/**
* httpclient 连接管理器 自带DNS解析.
* <p>大部分代码拷贝自:DefaultApacheHttpClientBuilder</p>
Expand All @@ -50,12 +48,7 @@ public class ApacheHttpDnsClientBuilder implements ApacheHttpClientBuilder {

private DnsResolver dnsResover;

private HttpRequestRetryHandler httpRequestRetryHandler = new HttpRequestRetryHandler() {
@Override
public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
return false;
}
};
private HttpRequestRetryHandler httpRequestRetryHandler = (exception, executionCount, context) -> false;
private SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory();
private PlainConnectionSocketFactory plainConnectionSocketFactory = PlainConnectionSocketFactory.getSocketFactory();
private String httpProxyHost;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpHost;
import org.apache.http.annotation.NotThreadSafe;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
Expand All @@ -26,6 +25,7 @@
import org.apache.http.protocol.HttpContext;
import org.apache.http.ssl.SSLContexts;

import javax.annotation.concurrent.NotThreadSafe;
import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.security.KeyManagementException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,17 @@ public HierarchicalStreamWriter createWriter(Writer out) {
private static final String SUFFIX_CDATA = "]]>";
private static final String PREFIX_MEDIA_ID = "<MediaId>";
private static final String SUFFIX_MEDIA_ID = "</MediaId>";
private static final String PREFIX_REPLACE_NAME = "<ReplaceName>";
private static final String SUFFIX_REPLACE_NAME = "</ReplaceName>";

@Override
protected void writeText(QuickWriter writer, String text) {
if (text.startsWith(PREFIX_CDATA) && text.endsWith(SUFFIX_CDATA)) {
writer.write(text);
} else if (text.startsWith(PREFIX_MEDIA_ID) && text.endsWith(SUFFIX_MEDIA_ID)) {
writer.write(text);
} else if (text.startsWith(PREFIX_REPLACE_NAME) && text.endsWith(SUFFIX_REPLACE_NAME)){
writer.write(text);
} else {
super.writeText(writer, text);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package me.chanjar.weixin.common.util.xml;

public class XStreamReplaceNameConverter extends XStreamCDataConverter {
@Override
public String toString(Object obj) {
return "<ReplaceName>" + super.toString(obj) + "</ReplaceName>";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@
import com.thoughtworks.xstream.annotations.XStreamConverter;
import lombok.Data;
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
import me.chanjar.weixin.cp.bean.outxmlbuilder.ImageBuilder;
import me.chanjar.weixin.cp.bean.outxmlbuilder.NewsBuilder;
import me.chanjar.weixin.cp.bean.outxmlbuilder.TextBuilder;
import me.chanjar.weixin.cp.bean.outxmlbuilder.VideoBuilder;
import me.chanjar.weixin.cp.bean.outxmlbuilder.VoiceBuilder;
import me.chanjar.weixin.cp.bean.outxmlbuilder.*;
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
import me.chanjar.weixin.cp.util.crypto.WxCpCryptUtil;
import me.chanjar.weixin.cp.util.xml.XStreamTransformer;
Expand Down Expand Up @@ -76,6 +72,12 @@ public static NewsBuilder NEWS() {
return new NewsBuilder();
}

/**
* 获得任务卡片消息builder.
*/
public static TaskCardBuilder TASK_CARD() {
return new TaskCardBuilder();
}
protected String toXml() {
return XStreamTransformer.toXml((Class) this.getClass(), this);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package me.chanjar.weixin.cp.bean.message;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import lombok.Data;
import lombok.EqualsAndHashCode;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.util.xml.XStreamReplaceNameConverter;

@XStreamAlias("xml")
@Data
@EqualsAndHashCode(callSuper = false)
public class WxCpXmlOutTaskCardMessage extends WxCpXmlOutMessage {
private static final long serialVersionUID = 7028014900972827324L;

@XStreamAlias("TaskCard")
@XStreamConverter(value = XStreamReplaceNameConverter.class)
private String replaceName;

public WxCpXmlOutTaskCardMessage() {
this.msgType = WxConsts.XmlMsgType.UPDATE_TASKCARD;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package me.chanjar.weixin.cp.bean.outxmlbuilder;

import me.chanjar.weixin.cp.bean.message.WxCpXmlOutTaskCardMessage;

/**
* 任务卡片消息builder
*
* @author tao zhang
*/
public final class TaskCardBuilder extends BaseBuilder<TaskCardBuilder, WxCpXmlOutTaskCardMessage> {

private String replaceName;

public TaskCardBuilder replaceName(String replaceName) {
this.replaceName = replaceName;
return this;
}

@Override
public WxCpXmlOutTaskCardMessage build() {
WxCpXmlOutTaskCardMessage m = new WxCpXmlOutTaskCardMessage();
setCommon(m);
m.setReplaceName(this.replaceName);
return m;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
*/
public class WxCpTpDefaultConfigImpl implements WxCpTpConfigStorage, Serializable {
private static final long serialVersionUID = 6678780920621872824L;
// locker

private final transient Map<String, Lock> providerAccessTokenLocker = new ConcurrentHashMap<>();
private final transient Map<String, Lock> suiteAccessTokenLocker = new ConcurrentHashMap<>();
private final transient Map<String, Lock> accessTokenLocker = new ConcurrentHashMap<>();
Expand Down Expand Up @@ -319,10 +319,10 @@ public String getAuthCorpJsApiTicket(String authCorpId) {
public boolean isAuthCorpJsApiTicketExpired(String authCorpId) {
Long t = this.authCorpJsApiTicketExpireTimeMap.get(authCorpId);
if (t == null) {
return System.currentTimeMillis() > t;
} else {
return true;
}

return System.currentTimeMillis() > t;
}

@Override
Expand All @@ -348,10 +348,10 @@ public String getAuthSuiteJsApiTicket(String authCorpId) {
public boolean isAuthSuiteJsApiTicketExpired(String authCorpId) {
Long t = authSuiteJsApiTicketExpireTimeMap.get(authCorpId);
if (t == null) {
return System.currentTimeMillis() > t;
} else {
return true;
}

return System.currentTimeMillis() > t;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,8 @@

import com.thoughtworks.xstream.XStream;
import me.chanjar.weixin.common.util.xml.XStreamInitializer;
import me.chanjar.weixin.cp.bean.message.WxCpTpXmlMessage;
import me.chanjar.weixin.cp.bean.message.*;
import me.chanjar.weixin.cp.bean.WxCpTpXmlPackage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutImageMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutNewsMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutTextMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutVideoMessage;
import me.chanjar.weixin.cp.bean.message.WxCpXmlOutVoiceMessage;

public class XStreamTransformer {

Expand Down Expand Up @@ -60,6 +53,7 @@ private static Map<Class, XStream> configXStreamInstance() {
map.put(WxCpXmlOutImageMessage.class, configWxCpXmlOutImageMessage());
map.put(WxCpXmlOutVideoMessage.class, configWxCpXmlOutVideoMessage());
map.put(WxCpXmlOutVoiceMessage.class, configWxCpXmlOutVoiceMessage());
map.put(WxCpXmlOutTaskCardMessage.class, configWxCpXmlOutTaskCardMessage());
map.put(WxCpTpXmlPackage.class, configWxCpTpXmlPackage());
map.put(WxCpTpXmlMessage.class, configWxCpTpXmlMessage());
return map;
Expand Down Expand Up @@ -118,6 +112,14 @@ private static XStream configWxCpXmlOutVoiceMessage() {
return xstream;
}

private static XStream configWxCpXmlOutTaskCardMessage() {
XStream xstream = XStreamInitializer.getInstance();

xstream.processAnnotations(WxCpXmlOutMessage.class);
xstream.processAnnotations(WxCpXmlOutTaskCardMessage.class);
return xstream;
}

private static XStream configWxCpTpXmlPackage() {
XStream xstream = XStreamInitializer.getInstance();
xstream.processAnnotations(WxCpTpXmlPackage.class);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package me.chanjar.weixin.cp.bean.message;

import me.chanjar.weixin.cp.bean.message.WxCpXmlOutTaskCardMessage;
import org.testng.Assert;
import org.testng.annotations.Test;

@Test
public class WxCpXmlOutTaskCardMessageTest {

public void test() {
WxCpXmlOutTaskCardMessage m = new WxCpXmlOutTaskCardMessage();
m.setReplaceName("已驳回");
m.setCreateTime(1122L);
m.setFromUserName("from");
m.setToUserName("to");

String expected = "<xml>"
+ "<ToUserName><![CDATA[to]]></ToUserName>"
+ "<FromUserName><![CDATA[from]]></FromUserName>"
+ "<CreateTime>1122</CreateTime>"
+ "<MsgType><![CDATA[update_taskcard]]></MsgType>"
+ "<TaskCard><ReplaceName><![CDATA[已驳回]]></ReplaceName></TaskCard>"
+ "</xml>";
System.out.println(m.toXml());
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", ""));
}

public void testBuild() {
WxCpXmlOutTaskCardMessage m = WxCpXmlOutMessage.TASK_CARD().replaceName("已驳回").fromUser("from").toUser("to").build();
String expected = "<xml>"
+ "<ToUserName><![CDATA[to]]></ToUserName>"
+ "<FromUserName><![CDATA[from]]></FromUserName>"
+ "<CreateTime>1122</CreateTime>"
+ "<MsgType><![CDATA[update_taskcard]]></MsgType>"
+ "<TaskCard><ReplaceName><![CDATA[已驳回]]></ReplaceName></TaskCard>"
+ "</xml>";
System.out.println(m.toXml());
Assert.assertEquals(
m
.toXml()
.replaceAll("\\s", "")
.replaceAll("<CreateTime>.*?</CreateTime>", ""),
expected
.replaceAll("\\s", "")
.replaceAll("<CreateTime>.*?</CreateTime>", "")
);
}

}