diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/xml/XmlStream.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/xml/XmlStream.java index 3155adcc..e74f93d0 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/xml/XmlStream.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/xml/XmlStream.java @@ -11,6 +11,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; @@ -44,21 +45,11 @@ import com.foxinmy.weixin4j.util.StringUtil; public final class XmlStream { private final static String ROOT_ELEMENT_XML = "xml"; private final static String XML_VERSION = "1.0"; - private final static ThreadLocal, Unmarshaller>> messageUnmarshaller; - private final static ThreadLocal, Marshaller>> messageMarshaller; + private final static Map, Unmarshaller> messageUnmarshaller; + private final static Map, Marshaller> messageMarshaller; static { - messageUnmarshaller = new ThreadLocal, Unmarshaller>>() { - @Override - protected Map, Unmarshaller> initialValue() { - return new HashMap, Unmarshaller>(); - } - }; - messageMarshaller = new ThreadLocal, Marshaller>>() { - @Override - protected Map, Marshaller> initialValue() { - return new HashMap, Marshaller>(); - } - }; + messageUnmarshaller = new ConcurrentHashMap, Unmarshaller>(); + messageMarshaller = new ConcurrentHashMap, Marshaller>(); } /** @@ -72,26 +63,22 @@ public final class XmlStream { */ @SuppressWarnings("unchecked") public static T fromXML(InputStream content, Class clazz) { - Unmarshaller unmarshaller = messageUnmarshaller.get().get(clazz); + Unmarshaller unmarshaller = messageUnmarshaller.get(clazz); if (unmarshaller == null) { try { JAXBContext jaxbContext = JAXBContext.newInstance(clazz); unmarshaller = jaxbContext.createUnmarshaller(); - messageUnmarshaller.get().put(clazz, unmarshaller); + messageUnmarshaller.put(clazz, unmarshaller); } catch (JAXBException e) { throw new IllegalArgumentException(e); } } try { Source source = new StreamSource(content); - XmlRootElement rootElement = clazz - .getAnnotation(XmlRootElement.class); + XmlRootElement rootElement = clazz.getAnnotation(XmlRootElement.class); if (rootElement == null - || rootElement.name().equals( - XmlRootElement.class.getMethod("name") - .getDefaultValue().toString())) { - JAXBElement jaxbElement = unmarshaller.unmarshal(source, - clazz); + || rootElement.name().equals(XmlRootElement.class.getMethod("name").getDefaultValue().toString())) { + JAXBElement jaxbElement = unmarshaller.unmarshal(source, clazz); return jaxbElement.getValue(); } else { return (T) unmarshaller.unmarshal(source); @@ -119,8 +106,7 @@ public final class XmlStream { * @return */ public static T fromXML(String content, Class clazz) { - return fromXML( - new ByteArrayInputStream(content.getBytes(Consts.UTF_8)), clazz); + return fromXML(new ByteArrayInputStream(content.getBytes(Consts.UTF_8)), clazz); } /** @@ -133,12 +119,10 @@ public final class XmlStream { public static String map2xml(Map map) { StringWriter sw = new StringWriter(); try { - XMLStreamWriter xw = XMLOutputFactory.newInstance() - .createXMLStreamWriter(sw); + XMLStreamWriter xw = XMLOutputFactory.newInstance().createXMLStreamWriter(sw); xw.writeStartDocument(Consts.UTF_8.name(), XML_VERSION); xw.writeStartElement(ROOT_ELEMENT_XML); - for (Iterator> it = map.entrySet().iterator(); it - .hasNext();) { + for (Iterator> it = map.entrySet().iterator(); it.hasNext();) { Entry entry = it.next(); if (StringUtil.isBlank(entry.getValue())) { continue; @@ -172,12 +156,10 @@ public final class XmlStream { public static String map2xml(JSONObject json) { StringWriter sw = new StringWriter(); try { - XMLStreamWriter xw = XMLOutputFactory.newInstance() - .createXMLStreamWriter(sw); + XMLStreamWriter xw = XMLOutputFactory.newInstance().createXMLStreamWriter(sw); xw.writeStartDocument(Consts.UTF_8.name(), XML_VERSION); xw.writeStartElement(ROOT_ELEMENT_XML); - for (Iterator> it = json.entrySet() - .iterator(); it.hasNext();) { + for (Iterator> it = json.entrySet().iterator(); it.hasNext();) { Entry entry = it.next(); if (StringUtil.isBlank(json.getString(entry.getKey()))) { continue; @@ -212,8 +194,7 @@ public final class XmlStream { Map map = new HashMap(); StringReader sr = new StringReader(content); try { - XMLStreamReader xr = XMLInputFactory.newInstance() - .createXMLStreamReader(sr); + XMLStreamReader xr = XMLInputFactory.newInstance().createXMLStreamReader(sr); while (true) { int event = xr.next(); if (event == XMLStreamConstants.END_DOCUMENT) { @@ -266,27 +247,22 @@ public final class XmlStream { @SuppressWarnings("unchecked") public static void toXML(T t, OutputStream os) { Class clazz = (Class) t.getClass(); - Marshaller marshaller = messageMarshaller.get().get(clazz); + Marshaller marshaller = messageMarshaller.get(clazz); if (marshaller == null) { try { JAXBContext jaxbContext = JAXBContext.newInstance(clazz); marshaller = jaxbContext.createMarshaller(); - marshaller.setProperty(Marshaller.JAXB_ENCODING, - Consts.UTF_8.name()); - messageMarshaller.get().put(clazz, marshaller); + marshaller.setProperty(Marshaller.JAXB_ENCODING, Consts.UTF_8.name()); + messageMarshaller.put(clazz, marshaller); } catch (JAXBException e) { throw new IllegalArgumentException(e); } } try { - XmlRootElement rootElement = clazz - .getAnnotation(XmlRootElement.class); + XmlRootElement rootElement = clazz.getAnnotation(XmlRootElement.class); if (rootElement == null - || rootElement.name().equals( - XmlRootElement.class.getMethod("name") - .getDefaultValue().toString())) { - marshaller.marshal(new JAXBElement(new QName( - ROOT_ELEMENT_XML), clazz, t), os); + || rootElement.name().equals(XmlRootElement.class.getMethod("name").getDefaultValue().toString())) { + marshaller.marshal(new JAXBElement(new QName(ROOT_ELEMENT_XML), clazz, t), os); } else { marshaller.marshal(t, os); } diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java index 64719b26..a3771c64 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java @@ -326,8 +326,8 @@ public class WeixinProxy { * 要修改的图文消息的id * @param index * 要更新的文章在图文消息中的位置(多图文消息时,此字段才有意义),第一篇为0 - * @param articles - * 图文列表 + * @param article + * 图文对象 * @return 处理结果 * @throws WeixinException * @see com.foxinmy.weixin4j.mp.api.MediaApi diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java index 95e66087..bdb685ac 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java @@ -346,8 +346,8 @@ public class MediaApi extends MpApi { * 要修改的图文消息的id * @param index * 要更新的文章在图文消息中的位置(多图文消息时,此字段才有意义),第一篇为0 - * @param articles - * 图文列表 + * @param article + * 图文对象 * @return 处理结果 * @throws WeixinException * @see com.foxinmy.weixin4j.tuple.MpArticle