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(

http://dive4elements.wald.intevation.org