Mercurial > dive4elements > river
comparison flys-client/src/main/java/de/intevation/flys/client/server/GCServiceImpl.java @ 1416:16f19f12a962
Improved parsing of Capabilities document - parse '/WMT_MS_Capabilities' as well.
flys-client/trunk@3306 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 23 Nov 2011 09:45:22 +0000 |
parents | 3484cbfaf369 |
children | 42d6cf6e10b7 |
comparison
equal
deleted
inserted
replaced
1415:dfa2d4753fc0 | 1416:16f19f12a962 |
---|---|
41 "error_gc_doc_not_valid"; | 41 "error_gc_doc_not_valid"; |
42 | 42 |
43 public static final String ERR_MALFORMED_URL = | 43 public static final String ERR_MALFORMED_URL = |
44 "error_malformed_url"; | 44 "error_malformed_url"; |
45 | 45 |
46 public static final String XPATH_WMS_CAPS = | |
47 "/WMS_Capabilities"; | |
48 | |
49 public static final String XPATH_WMT_CAPS = | |
50 "/WMT_MS_Capabilities"; | |
51 | |
46 public static final String XPATH_TITLE = | 52 public static final String XPATH_TITLE = |
47 "/WMS_Capabilities/Service/Title/text()"; | 53 "Service/Title/text()"; |
48 | 54 |
49 public static final String XPATH_ONLINE_RESOURCE = | 55 public static final String XPATH_ONLINE_RESOURCE = |
50 "/WMS_Capabilities/Service/OnlineResource/@href"; | 56 "Service/OnlineResource/@href"; |
51 | 57 |
52 public static final String XPATH_CONTACT_INFORMATION = | 58 public static final String XPATH_CONTACT_INFORMATION = |
53 "/WMS_Capabilities/Service/ContactInformation"; | 59 "Service/ContactInformation"; |
54 | 60 |
55 public static final String XPATH_CI_PERSON = | 61 public static final String XPATH_CI_PERSON = |
56 "ContactPersonPrimary/ContactPerson/text()"; | 62 "ContactPersonPrimary/ContactPerson/text()"; |
57 | 63 |
58 public static final String XPATH_CI_ORGANIZATION = | 64 public static final String XPATH_CI_ORGANIZATION = |
72 | 78 |
73 public static final String XPATH_CI_EMAIL = | 79 public static final String XPATH_CI_EMAIL = |
74 "ContactElectronicMailAddress/text()"; | 80 "ContactElectronicMailAddress/text()"; |
75 | 81 |
76 public static final String XPATH_FEES = | 82 public static final String XPATH_FEES = |
77 "/WMS_Capabilities/Service/Fees/text()"; | 83 "Service/Fees/text()"; |
78 | 84 |
79 public static final String XPATH_ACCESS_CONSTRAINTS = | 85 public static final String XPATH_ACCESS_CONSTRAINTS = |
80 "/WMS_Capabilities/Service/AccessConstraints/text()"; | 86 "Service/AccessConstraints/text()"; |
81 | 87 |
82 public static final String XPATH_LAYERS = | 88 public static final String XPATH_LAYERS = |
83 "/WMS_Capabilities/Capability/Layer"; | 89 "Capability/Layer"; |
84 | 90 |
85 | 91 |
86 private Logger logger = Logger.getLogger(GCServiceImpl.class); | 92 private Logger logger = Logger.getLogger(GCServiceImpl.class); |
87 | 93 |
88 | 94 |
124 | 130 |
125 if (doc == null) { | 131 if (doc == null) { |
126 throw new ServerException(ERR_GC_DOC_NOT_VALID); | 132 throw new ServerException(ERR_GC_DOC_NOT_VALID); |
127 } | 133 } |
128 | 134 |
135 Node capabilities = getCapabilitiesNode(doc); | |
136 | |
129 String title = (String) XMLUtils.xpath( | 137 String title = (String) XMLUtils.xpath( |
130 doc, | 138 capabilities, |
131 XPATH_TITLE, | 139 XPATH_TITLE, |
132 XPathConstants.STRING); | 140 XPathConstants.STRING); |
133 | 141 |
134 String onlineResource = (String) XMLUtils.xpath( | 142 String onlineResource = (String) XMLUtils.xpath( |
135 doc, | 143 capabilities, |
136 XPATH_ONLINE_RESOURCE, | 144 XPATH_ONLINE_RESOURCE, |
137 XPathConstants.STRING); | 145 XPathConstants.STRING); |
138 | 146 |
139 String fees = (String) XMLUtils.xpath( | 147 String fees = (String) XMLUtils.xpath( |
140 doc, | 148 capabilities, |
141 XPATH_FEES, | 149 XPATH_FEES, |
142 XPathConstants.STRING); | 150 XPathConstants.STRING); |
143 | 151 |
144 String accessConstraints = (String) XMLUtils.xpath( | 152 String accessConstraints = (String) XMLUtils.xpath( |
145 doc, | 153 capabilities, |
146 XPATH_ACCESS_CONSTRAINTS, | 154 XPATH_ACCESS_CONSTRAINTS, |
147 XPathConstants.STRING); | 155 XPathConstants.STRING); |
148 | 156 |
149 Node contactInformation = (Node) XMLUtils.xpath( | 157 Node contactInformation = (Node) XMLUtils.xpath( |
150 doc, | 158 capabilities, |
151 XPATH_CONTACT_INFORMATION, | 159 XPATH_CONTACT_INFORMATION, |
152 XPathConstants.NODE); | 160 XPathConstants.NODE); |
153 | 161 |
154 ContactInformation ci = parseContactInformation(contactInformation); | 162 ContactInformation ci = parseContactInformation(contactInformation); |
155 | 163 |
156 logger.debug("Found fees: " + fees); | 164 logger.debug("Found fees: " + fees); |
157 logger.debug("Found access constraints: " + accessConstraints); | 165 logger.debug("Found access constraints: " + accessConstraints); |
158 | 166 |
159 NodeList layerNodes = (NodeList) XMLUtils.xpath( | 167 NodeList layerNodes = (NodeList) XMLUtils.xpath( |
160 doc, | 168 capabilities, |
161 XPATH_LAYERS, | 169 XPATH_LAYERS, |
162 XPathConstants.NODESET); | 170 XPathConstants.NODESET); |
163 | 171 |
164 List<WMSLayer> layers = parseLayers(layerNodes, onlineResource); | 172 List<WMSLayer> layers = parseLayers(layerNodes, onlineResource); |
165 | 173 |
168 onlineResource, | 176 onlineResource, |
169 ci, | 177 ci, |
170 fees, | 178 fees, |
171 accessConstraints, | 179 accessConstraints, |
172 layers); | 180 layers); |
181 } | |
182 | |
183 | |
184 protected Node getCapabilitiesNode(Document doc) | |
185 throws ServerException { | |
186 Node capabilities = (Node) XMLUtils.xpath( | |
187 doc, | |
188 XPATH_WMS_CAPS, | |
189 XPathConstants.NODE); | |
190 | |
191 if (capabilities == null) { | |
192 logger.info("No '/WMS_Capabilities' node found."); | |
193 logger.info("Try to find a '/WMT_MS_Capabilities' node."); | |
194 | |
195 capabilities = (Node) XMLUtils.xpath( | |
196 doc, | |
197 XPATH_WMT_CAPS, | |
198 XPathConstants.NODE); | |
199 } | |
200 | |
201 if (capabilities == null) { | |
202 throw new ServerException(ERR_GC_DOC_NOT_VALID); | |
203 } | |
204 | |
205 return capabilities; | |
173 } | 206 } |
174 | 207 |
175 | 208 |
176 protected ContactInformation parseContactInformation(Node node) { | 209 protected ContactInformation parseContactInformation(Node node) { |
177 String person = (String) XMLUtils.xpath( | 210 String person = (String) XMLUtils.xpath( |