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
53
54
55
56 @Override
57 public InputSource resolveEntity(String publicId, String systemId) throws SAXException {
58 try {
59 if (systemId != null) {
60 String lowerCaseSystemId = systemId.toLowerCase(Locale.ENGLISH);
61 if (lowerCaseSystemId.contains(MYBATIS_CONFIG_SYSTEM) || lowerCaseSystemId.contains(IBATIS_CONFIG_SYSTEM)) {
62 return getInputSource(MYBATIS_CONFIG_DTD, publicId, systemId);
63 }
64 if (lowerCaseSystemId.contains(MYBATIS_MAPPER_SYSTEM) || lowerCaseSystemId.contains(IBATIS_MAPPER_SYSTEM)) {
65 return getInputSource(MYBATIS_MAPPER_DTD, publicId, systemId);
66 }
67 }
68 return null;
69 } catch (Exception e) {
70 throw new SAXException(e.toString());
71 }
72 }
73
74 private InputSource getInputSource(String path, String publicId, String systemId) {
75 InputSource source = null;
76 if (path != null) {
77 try {
78 InputStream in = Resources.getResourceAsStream(path);
79 source = new InputSource(in);
80 source.setPublicId(publicId);
81 source.setSystemId(systemId);
82 } catch (IOException e) {
83
84 }
85 }
86 return source;
87 }
88
89 }