1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.ibatis.builder.xml;
17
18 import java.io.IOException;
19 import java.io.InputStream;
20 import java.util.Locale;
21
22 import org.apache.ibatis.io.Resources;
23 import org.xml.sax.EntityResolver;
24 import org.xml.sax.InputSource;
25 import org.xml.sax.SAXException;
26
27
28
29
30
31
32
33 public class XMLMapperEntityResolver implements EntityResolver {
34
35 private static final String IBATIS_CONFIG_SYSTEM = "ibatis-3-config.dtd";
36 private static final String IBATIS_MAPPER_SYSTEM = "ibatis-3-mapper.dtd";
37 private static final String MYBATIS_CONFIG_SYSTEM = "mybatis-3-config.dtd";
38 private static final String MYBATIS_MAPPER_SYSTEM = "mybatis-3-mapper.dtd";
39
40 private static final String MYBATIS_CONFIG_DTD = "org/apache/ibatis/builder/xml/mybatis-3-config.dtd";
41 private static final String MYBATIS_MAPPER_DTD = "org/apache/ibatis/builder/xml/mybatis-3-mapper.dtd";
42
43
44
45
46
47
48
49
50
51
52 @Override
53 public InputSource resolveEntity(String publicId, String systemId) throws SAXException {
54 try {
55 if (systemId != null) {
56 String lowerCaseSystemId = systemId.toLowerCase(Locale.ENGLISH);
57 if (lowerCaseSystemId.contains(MYBATIS_CONFIG_SYSTEM) || lowerCaseSystemId.contains(IBATIS_CONFIG_SYSTEM)) {
58 return getInputSource(MYBATIS_CONFIG_DTD, publicId, systemId);
59 } else if (lowerCaseSystemId.contains(MYBATIS_MAPPER_SYSTEM) || lowerCaseSystemId.contains(IBATIS_MAPPER_SYSTEM)) {
60 return getInputSource(MYBATIS_MAPPER_DTD, publicId, systemId);
61 }
62 }
63 return null;
64 } catch (Exception e) {
65 throw new SAXException(e.toString());
66 }
67 }
68
69 private InputSource getInputSource(String path, String publicId, String systemId) {
70 InputSource source = null;
71 if (path != null) {
72 try {
73 InputStream in = Resources.getResourceAsStream(path);
74 source = new InputSource(in);
75 source.setPublicId(publicId);
76 source.setSystemId(systemId);
77 } catch (IOException e) {
78
79 }
80 }
81 return source;
82 }
83
84 }