WeixinErrorUtil.java
- package com.foxinmy.weixin4j.util;
- import java.io.ByteArrayInputStream;
- import java.io.IOException;
- import java.util.Map;
- import java.util.concurrent.ConcurrentHashMap;
- import org.xml.sax.Attributes;
- import org.xml.sax.InputSource;
- import org.xml.sax.SAXException;
- import org.xml.sax.XMLReader;
- import org.xml.sax.helpers.DefaultHandler;
- import org.xml.sax.helpers.XMLReaderFactory;
- import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
- /**
- * 接口调用错误获取
- *
- * @author jy
- * @className WeixinErrorUtil
- * @author jinyu(foxinmy@gmail.com)
- * @date 2015年5月12日
- * @see
- * @since JDK 1.6
- */
- public final class WeixinErrorUtil {
- private static byte[] errorXmlByteArray;
- private final static Map<String, String> errorCacheMap;
- static {
- errorCacheMap = new ConcurrentHashMap<String, String>();
- try {
- errorXmlByteArray = IOUtil.toByteArray(WeixinResponse.class.getResourceAsStream("error.xml"));
- } catch (IOException e) {
- ;
- }
- }
- private static class ErrorTextHandler extends DefaultHandler {
- private final String code;
- public ErrorTextHandler(String code) {
- this.code = code;
- }
- private String text;
- private boolean codeElement;
- private boolean textElement;
- private boolean findElement;
- @Override
- public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
- codeElement = qName.equalsIgnoreCase("code");
- textElement = qName.equalsIgnoreCase("text");
- }
- @Override
- public void endElement(String uri, String localName, String qName) throws SAXException {
- }
- @Override
- public void characters(char[] ch, int start, int length) throws SAXException {
- String _text = new String(ch, start, length);
- if (codeElement && _text.equalsIgnoreCase(code)) {
- findElement = true;
- } else if (textElement && findElement) {
- text = _text;
- throw new SAXException("ENOUGH");
- }
- }
- public String getText() {
- return StringUtil.isBlank(text) ? "" : text;
- }
- }
- public static String getText(String code) throws RuntimeException {
- if (StringUtil.isBlank(code)) {
- return "";
- }
- String text = errorCacheMap.get(code);
- if (StringUtil.isBlank(text)) {
- ErrorTextHandler textHandler = new ErrorTextHandler(code);
- try {
- XMLReader xmlReader = XMLReaderFactory.createXMLReader();
- xmlReader.setContentHandler(textHandler);
- xmlReader.parse(new InputSource(new ByteArrayInputStream(errorXmlByteArray)));
- text = textHandler.getText();
- errorCacheMap.put(code, text);
- } catch (IOException e) {
- throw new RuntimeException(e);
- } catch (SAXException e) {
- text = textHandler.getText();
- errorCacheMap.put(code, text);
- }
- }
- return text;
- }
- public static void main(String[] args) {
- System.out.println(getText("30002"));
- System.out.println(getText("30002"));
- System.out.println(getText("88010"));
- }
- }