1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.ibatis.sqlmap.engine.builder.xml;
17
18 import com.ibatis.common.resources.Resources;
19
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.util.HashMap;
23 import java.util.Locale;
24 import java.util.Map;
25
26 import org.xml.sax.EntityResolver;
27 import org.xml.sax.InputSource;
28 import org.xml.sax.SAXException;
29
30
31
32
33 public class SqlMapClasspathEntityResolver implements EntityResolver {
34
35
36 private static final String SQL_MAP_CONFIG_DTD = "com/ibatis/sqlmap/engine/builder/xml/sql-map-config-2.dtd";
37
38
39 private static final String SQL_MAP_DTD = "com/ibatis/sqlmap/engine/builder/xml/sql-map-2.dtd";
40
41
42 private static final Map doctypeMap = new HashMap();
43
44 static {
45 doctypeMap.put("https://ibatis.apache.org/dtd/sql-map-config-2.dtd".toUpperCase(Locale.ROOT), SQL_MAP_CONFIG_DTD);
46 doctypeMap.put("-//ibatis.apache.org//DTD SQL Map Config 2.0//EN".toUpperCase(Locale.ROOT), SQL_MAP_CONFIG_DTD);
47
48 doctypeMap.put("https://ibatis.apache.org/dtd/sql-map-2.dtd".toUpperCase(Locale.ROOT), SQL_MAP_DTD);
49 doctypeMap.put("-//ibatis.apache.org//DTD SQL Map 2.0//EN".toUpperCase(Locale.ROOT), SQL_MAP_DTD);
50 }
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 public InputSource resolveEntity(String publicId, String systemId) throws SAXException {
66
67 if (publicId != null)
68 publicId = publicId.toUpperCase(Locale.ROOT);
69 if (systemId != null)
70 systemId = systemId.toUpperCase(Locale.ROOT);
71
72 InputSource source = null;
73 try {
74 String path = (String) doctypeMap.get(publicId);
75 source = getInputSource(path, source);
76 if (source == null) {
77 path = (String) doctypeMap.get(systemId);
78 source = getInputSource(path, source);
79 }
80 } catch (Exception e) {
81 throw new SAXException(e.toString());
82 }
83 return source;
84 }
85
86
87
88
89
90
91
92
93
94
95
96 private InputSource getInputSource(String path, InputSource source) {
97 if (path != null) {
98 InputStream in = null;
99 try {
100 in = Resources.getResourceAsStream(path);
101 source = new InputSource(in);
102 } catch (IOException e) {
103
104 }
105 }
106 return source;
107 }
108
109 }