package com.foxinmy.weixin4j.http.message; import java.io.IOException; import java.io.InputStream; import com.foxinmy.weixin4j.http.HttpHeaders; import com.foxinmy.weixin4j.http.HttpResponse; import com.foxinmy.weixin4j.http.MimeType; import com.foxinmy.weixin4j.util.FileUtil; import com.foxinmy.weixin4j.util.RegexUtil; import com.foxinmy.weixin4j.xml.XmlStream; /** * XML 转换 * * @className XmlMessageConverter * @author jinyu * @date Jul 20, 2016 * @since JDK 1.6 */ public class XmlMessageConverter extends AbstractMessageConverter { public static final XmlMessageConverter GLOBAL = new XmlMessageConverter(); private static final String XML = "xml"; private static final int BRACKET = '<'; public XmlMessageConverter() { super(MimeType.APPLICATION_XML, MimeType.TEXT_XML, new MimeType("application", "*+xml")); } @Override public boolean canConvert(Class<?> clazz, HttpResponse response) { if (!super.canConvert(clazz, response)) { String disposition = response.getHeaders().getFirst(HttpHeaders.CONTENT_DISPOSITION); String fileName = RegexUtil.regexFileNameFromContentDispositionHeader(disposition); return (fileName != null && FileUtil.getFileExtension(fileName).equalsIgnoreCase(XML)); } return true; } @Override protected boolean supports(Class<?> clazz, byte[] content) { return BRACKET == content[0]; } @Override protected <T> T convertInternal(Class<? extends T> clazz, InputStream body) throws IOException { return XmlStream.fromXML(body, clazz); } }