XmlMessageConverter.java
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);
}
}