From 26f814e4150f9528979bf6dc105067b35fd64dac Mon Sep 17 00:00:00 2001 From: latlon team <info@lat-lon.de> Date: Wed, 15 Jan 2025 11:48:52 +0000 Subject: [PATCH] Code drop - XPLANBOX-3505 - renemad testsuite, added assertion to wmts (356f65c8f) - fixed formatting (1101abd4e) - XPLANBOX-3596 compute xplan-gateway url from request (940aebbf9) - XPLANBOX-3551 /xplan-ows -> /ows (8d9d9a2db) - XPLANBOX-3517 - Implement assertions for HTTP DCP of WMTS 1.0.0 (c95d087b7) - XPLANBOX-3517 - Implement assertions for HTTP DCP of WFS 2.0.0 (f839f2d74) - XPLANBOX-3517 - Implement assertions for HTTP DCP of WFS 1.1.0 (d2d7150cf) - XPLANBOX-3517 - Implement assertions for HTTP DCP of WMS 1.3.0 (e78b2bbb7) - XPLANBOX-3517 - Enhance tests for cache and raster and implement assertions for HTTP DCP of WMS 1.1.1 (829adc24f) - XPLANBOX-3517 - Fix incorrect type and adjust namespace prefixes (6e16d0a06) - XPLANBOX-3071 - fixed deegree version in libs.expected.txt (76858589e) - XPLANBOX-3481 - updated version of validierungsregeln in expected report (82ad87a24) - XPLANBOX-3071 - upgrade deegree version to 3.6.0-pre3.1 (640701dc1) - XPLANBOX-3505 - added routes for each capabilities reqesut to fix broken images (228fab7ae) - XPLANBOX-3505 - fixed and renamed assertions testing the capabilities root element (65050daf8) - XPLANBOX-3517 - Create test for each service type and version and homogenize test names (37d2f1a11) - XPLANBOX-3481 - upgrade xplanung.regeln.version to 1.1.10 (dc6dc6c1b) - XPLANBOX-3505 - added some tests with version param (f82df90aa) - XPLANBOX-3505 - rewrite dcp urls in xplan-gateway (2234c3c72) - XPLANBOX-3559 port 80 by default for xplan-validator-wms (97d794177) - XPLANBOX-3588 - fixed NumberFormatException if crs is null or empty (f00816886) - XPLANBOX-3519 - exclude geltungsbereichWGS84 is null, added description, updated SoapUI-Tests (b82974e46) - XPLANBOX-3519 - defined order of PlanInfo elements (836c7452a) - XPLANBOX-3529 - Write SoapUI tests for query parameter includeGeltungsbereich (840f6ef16) - XPLANBOX-3529 - Write SoapUI tests for geltungsbereichWGS84 (a1b0d1d0c) - XPLANBOX-3519 - added on constraint to fix error when editing a plan (2f80c4673) - XPLANBOX-3560 - upgrade tag in DatabaseVerifier to v_8.0, replaced deprecated methods (b154a48f2) - XPLANBOX-3560 - disabled liquibase analytics in xplan-db-updater (a41422f34) - XPLANBOX-3560 - enabled DatabaseVerifier (c7fd8243b) - XPLANBOX-2519 - replaced creation of geltungsbereichWGS84 with deegree with postgresql trigger; fixed tests (622de2c69) - XPLANBOX-3519 - removed ST_SimplifyPreserveTopology, implemented support of other plan types (fc9cc25df) - XPLANBOX-3519 - added liquibase update change inserting geltungsbereich into xplanmgr.geltungsbereich (abb0467ff) - XPLANBOX-3519 - renamed column and property (e7364a285) - XPLANBOX-3519 - fixed/improved linearization and transformation and added JtsParserTest (4fbbcd20c) - XPLANBOX-3519 - added query param includeGeltungsbereich (17201d099) - XPLANBOX-3519 - added geltungsbereichWgs84 to PlanInfo v1 and v2 objects (21beb194d) - XPLANBOX-3519 - store transformed and lineraized geltungsbereich in db (8b4ccd3f7) Co-authored-by: Dirk Stenger <stenger@lat-lon.de> Co-authored-by: Lyn Elisa Goltz <goltz@lat-lon.de> Co-authored-by: Marc Guillemot <guillemot@lat-lon.de> Co-authored-by: Torsten Friebe <friebe@lat-lon.de> Dropped from commit: eab89027ceca0e794c91724830452861802dfbfa --- pom.xml | 4 +- .../cli/admin/config/CommonContext.java | 8 +- .../cli/manage/config/ManageContext.java | 8 +- .../latlon/xplan/commons/jts/JtsParser.java | 21 +- .../commons/util/FeatureCollectionUtils.java | 21 - .../xplan/jts/MultiSurfaceWithCurve.xml | 32 + .../manager/db/model/Geltungsbereich.java | 88 + .../xplan/core/manager/db/model/Plan.java | 18 + .../repository/GeltungsbereichRepository.java | 36 + .../manager/db/config/HsqlJpaContext.java | 13 +- .../GeltungsbereichRepositoryTest.java | 141 + .../resources/create-geltungsbereich-test.sql | 21 + .../xplan/manager/database/XPlanDao.java | 35 +- .../manager/database/XPlanDbAdapter.java | 38 +- .../evaluation/XPlanRasterEvaluation.java | 19 +- .../evaluation/XPlanRasterEvaluatorTest.java | 18 +- .../core/raster/evaluation/tif_25833.tfw | 6 + .../core/raster/evaluation/tif_25833.tif | Bin 0 -> 40662746 bytes .../jts/JtsToGeoJsonGeometryBuilder.java | 173 + .../validator/wms/MapPreviewManager.java | 2 +- .../jts/JtsToGeoJsonGeometryBuilderTest.java | 182 + .../xplan-database-scripts/Dockerfile | 1 + .../UpdateGeltungsbereichCustomChange.java | 99 + .../resources/8.0/changelog_xplanmgr.yaml | 56 +- .../xplan-docker-volume-init/setupVolumes.sh | 2 +- xplan-gateway/README.md | 2 +- xplan-gateway/pom.xml | 251 +- .../xplanbox/gateway/Configuration.java | 559 +- .../filter/CapabilitiesResponseFilter.java | 75 + .../gateway/filter/XMLStreamWriterFilter.java | 42 + .../filter/XMLStreamWriterFilterBase.java | 192 + .../dcp/DcpCapabilitiesResponseFilter.java | 23 + .../gateway/filter/dcp/DcpUrlFilter.java | 62 + .../WmtsRestCapabilitiesResponseFilter.java | 23 + .../gateway/filter/rest/WmtsRestFilter.java | 61 + .../src/main/resources/application.properties | 4 +- .../xplanbox/gateway/ConfigurationTest.java | 361 +- .../resources/application-test.properties | 3 +- .../test/resources/capabilities_wfs_1.1.0.xml | 252 + .../test/resources/capabilities_wfs_2.0.0.xml | 634 ++ .../test/resources/capabilities_wms_1.1.1.xml | 235 + .../test/resources/capabilities_wms_1.3.0.xml | 272 + .../resources/capabilities_wmts_1.0.0.xml | 422 ++ .../capabilities_wmts_tiles_1.0.0.xml | 392 ++ .../xplanbox/api/manager/PlanInfoBuilder.java | 22 +- .../manager/config/ApplicationContext.java | 13 +- .../manager/{ => db}/DatabaseVerifier.java | 28 +- .../api/manager/handler/PlanHandler.java | 6 + .../xplanbox/api/manager/v1/PlanApi.java | 4 +- .../xplanbox/api/manager/v1/PlansApi.java | 10 +- .../api/manager/v1/model/PlanInfo.java | 41 +- .../xplanbox/api/manager/v2/PlanApi2.java | 4 +- .../xplanbox/api/manager/v2/PlansApi2.java | 10 +- .../api/manager/v2/model/PlanInfo.java | 31 +- .../api/manager/PlanInfoBuilderTest.java | 18 +- .../api/manager/config/TestContext.java | 10 + .../xplanbox/api/manager/v1/PlanApiTest.java | 7 +- .../xplanbox/api/manager/v1/PlansApiTest.java | 26 +- .../api/manager/v2/PlansApi2Test.java | 26 +- .../manager/web/client/utils/WmsUrlUtils.java | 16 +- .../web/spring/config/BasicSpringConfig.java | 9 +- .../web/client/utils/WmsUrlUtilsTest.java | 22 +- .../xplan-gateway-soapui-project.xml | 5449 +++++++++++++++-- .../xplan-manager-api-soapui-project.xml | 278 +- .../executor/handler/ValidationHandler.java | 2 +- .../validator/executor/report1.expected.json | 4 +- .../validator/executor/report2.expected.json | 4 +- .../validator/executor/report3.expected.json | 4 +- .../services/inspireplu/libs.expected.txt | 124 +- .../xplan/services/synwfs/libs.expected.txt | 124 +- .../xplanbox/services/wfs/libs.expected.txt | 124 +- .../xplan/services/wms/libs.expected.txt | 124 +- .../xplan/validator/wms/libs.expected.txt | 124 +- .../src/main/workspace/services/html.gfi | 2 +- 74 files changed, 10239 insertions(+), 1334 deletions(-) create mode 100644 xplan-core/xplan-core-commons/src/test/resources/de/latlon/xplan/jts/MultiSurfaceWithCurve.xml create mode 100644 xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Geltungsbereich.java create mode 100644 xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/repository/GeltungsbereichRepository.java create mode 100644 xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/repository/GeltungsbereichRepositoryTest.java create mode 100644 xplan-core/xplan-core-manager-db/src/test/resources/create-geltungsbereich-test.sql create mode 100644 xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/tif_25833.tfw create mode 100644 xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/tif_25833.tif create mode 100644 xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/geojson/jts/JtsToGeoJsonGeometryBuilder.java create mode 100644 xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/report/geojson/jts/JtsToGeoJsonGeometryBuilderTest.java create mode 100644 xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/UpdateGeltungsbereichCustomChange.java create mode 100644 xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/CapabilitiesResponseFilter.java create mode 100644 xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/XMLStreamWriterFilter.java create mode 100644 xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/XMLStreamWriterFilterBase.java create mode 100644 xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/dcp/DcpCapabilitiesResponseFilter.java create mode 100644 xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/dcp/DcpUrlFilter.java create mode 100644 xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/rest/WmtsRestCapabilitiesResponseFilter.java create mode 100644 xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/rest/WmtsRestFilter.java create mode 100644 xplan-gateway/src/test/resources/capabilities_wfs_1.1.0.xml create mode 100644 xplan-gateway/src/test/resources/capabilities_wfs_2.0.0.xml create mode 100644 xplan-gateway/src/test/resources/capabilities_wms_1.1.1.xml create mode 100644 xplan-gateway/src/test/resources/capabilities_wms_1.3.0.xml create mode 100644 xplan-gateway/src/test/resources/capabilities_wmts_1.0.0.xml create mode 100644 xplan-gateway/src/test/resources/capabilities_wmts_tiles_1.0.0.xml rename xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/{ => db}/DatabaseVerifier.java (86%) diff --git a/pom.xml b/pom.xml index 4abeb6262..e5b2a336b 100644 --- a/pom.xml +++ b/pom.xml @@ -18,8 +18,8 @@ <java.version>17</java.version> <maven.version>3.9.0</maven.version> <!-- version properties --> - <deegree3.version>3.6.0-SNAPSHOT</deegree3.version> - <xplanung.regeln.version>1.1.10-SNAPSHOT</xplanung.regeln.version> + <deegree3.version>3.6.0-pre3.1</deegree3.version> + <xplanung.regeln.version>1.1.10</xplanung.regeln.version> <xplanung.regeln.berlin.version>0.4</xplanung.regeln.berlin.version> <xplanung.regeln.brandenburg.version>0.3</xplanung.regeln.brandenburg.version> <gwt.version>2.12.1</gwt.version> diff --git a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java index 9fcac8abd..18256352c 100644 --- a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java +++ b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/admin/config/CommonContext.java @@ -32,6 +32,7 @@ import de.latlon.xplan.commons.configuration.PropertiesLoader; import de.latlon.xplan.commons.configuration.SystemPropertyPropertiesLoader; import de.latlon.xplan.core.manager.db.config.JpaContext; import de.latlon.xplan.core.manager.db.repository.ArtefactRepository; +import de.latlon.xplan.core.manager.db.repository.GeltungsbereichRepository; import de.latlon.xplan.core.manager.db.repository.PlanRepository; import de.latlon.xplan.core.manager.db.repository.PlanwerkWmsMetadataRepository; import de.latlon.xplan.manager.configuration.ManagerConfiguration; @@ -73,6 +74,10 @@ public class CommonContext { @Lazy private ArtefactRepository artefactRepository; + @Autowired + @Lazy + private GeltungsbereichRepository geltungsbereichRepository; + @Bean public ManagerConfiguration managerConfiguration(PropertiesLoader managerPropertiesLoader) throws ConfigurationException { @@ -81,7 +86,8 @@ public class CommonContext { @Bean public XPlanDbAdapter xPlanDbAdapter() { - return new XPlanDbAdapter(planRepository, planwerkWmsMetadataRepository, artefactRepository); + return new XPlanDbAdapter(planRepository, planwerkWmsMetadataRepository, artefactRepository, + geltungsbereichRepository); } @Bean diff --git a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java index ef446fa0f..42bf86424 100644 --- a/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java +++ b/xplan-cli/src/main/java/de/latlon/xplanbox/cli/manage/config/ManageContext.java @@ -41,6 +41,7 @@ import de.latlon.xplan.commons.configuration.SystemPropertyPropertiesLoader; import de.latlon.xplan.commons.feature.SortPropertyReader; import de.latlon.xplan.core.manager.db.config.JpaContext; import de.latlon.xplan.core.manager.db.repository.ArtefactRepository; +import de.latlon.xplan.core.manager.db.repository.GeltungsbereichRepository; import de.latlon.xplan.core.manager.db.repository.PlanRepository; import de.latlon.xplan.core.manager.db.repository.PlanwerkWmsMetadataRepository; import de.latlon.xplan.manager.XPlanManager; @@ -132,6 +133,10 @@ public class ManageContext { @Lazy private ArtefactRepository artefactRepository; + @Autowired + @Lazy + private GeltungsbereichRepository geltungsbereichRepository; + @Bean public SyntacticValidator syntacticValidator() { return new SyntacticValidatorImpl(); @@ -181,7 +186,8 @@ public class ManageContext { @Bean public XPlanDbAdapter xPlanDbAdapter() { - return new XPlanDbAdapter(planRepository, planwerkWmsMetadataRepository, artefactRepository); + return new XPlanDbAdapter(planRepository, planwerkWmsMetadataRepository, artefactRepository, + geltungsbereichRepository); } @Bean diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/jts/JtsParser.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/jts/JtsParser.java index a83210236..87144caec 100644 --- a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/jts/JtsParser.java +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/jts/JtsParser.java @@ -20,8 +20,12 @@ */ package de.latlon.xplan.commons.jts; +import java.util.LinkedList; +import java.util.List; + import org.deegree.geometry.GeometryFactory; import org.deegree.geometry.linearization.CurveLinearizer; +import org.deegree.geometry.linearization.GeometryLinearizer; import org.deegree.geometry.linearization.LinearizationCriterion; import org.deegree.geometry.linearization.MaxErrorCriterion; import org.deegree.geometry.primitive.Curve; @@ -36,25 +40,28 @@ import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.LineString; import org.locationtech.jts.geom.LinearRing; import org.locationtech.jts.geom.Polygon; - -import java.util.LinkedList; -import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> */ public class JtsParser { + private static final Logger LOG = LoggerFactory.getLogger(JtsParser.class); + private final org.locationtech.jts.geom.GeometryFactory jtsFactory; private final LinearizationCriterion crit; - private final CurveLinearizer linearizer; + private final CurveLinearizer curveLinearizer; + + private final GeometryLinearizer geometryLinearizer = new GeometryLinearizer(); public JtsParser() { this.jtsFactory = new org.locationtech.jts.geom.GeometryFactory(); this.crit = new MaxErrorCriterion(0.1, 500); - this.linearizer = new CurveLinearizer(new GeometryFactory()); + this.curveLinearizer = new CurveLinearizer(new GeometryFactory()); } /** @@ -66,7 +73,7 @@ public class JtsParser { * types than {@link LineStringSegment}, {@link Arc} and {@link Circle} */ public LineString getJTSLineString(Curve curve) { - Curve linearizedCurve = linearizer.linearize(curve, crit); + Curve linearizedCurve = curveLinearizer.linearize(curve, crit); List<Coordinate> coordinates = new LinkedList<>(); Point lastPoint = null; for (CurveSegment segment : linearizedCurve.getCurveSegments()) { @@ -92,7 +99,7 @@ public class JtsParser { * types than {@link LineStringSegment}, {@link Arc} and {@link Circle} */ public LinearRing getJTSRing(Ring ring) { - Ring linearizedRing = (Ring) linearizer.linearize(ring, crit); + Ring linearizedRing = (Ring) curveLinearizer.linearize(ring, crit); return convertToJtsRing(linearizedRing); } diff --git a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/FeatureCollectionUtils.java b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/FeatureCollectionUtils.java index 3e3373f34..52a9f2be0 100644 --- a/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/FeatureCollectionUtils.java +++ b/xplan-core/xplan-core-commons/src/main/java/de/latlon/xplan/commons/util/FeatureCollectionUtils.java @@ -66,27 +66,6 @@ public class FeatureCollectionUtils { throw new IllegalArgumentException("Keine XPlan-FeatureCollection. Kein XP_Plan-Feature enthalten."); } - /** - * Finds the XP_Plan features of a XPlan featureCollection. - * @param fc XPlan featureCollection, never <code>null</code> - * @param type the type of the expected plan feature, never <code>null</code> - * @return list of XPlan features, never <code>null</code> nor empty - * @throws IllegalArgumentException if the feature collection does not contain at - * least one XP_Plan feature - */ - public static List<Feature> findPlanFeatures(FeatureCollection fc, XPlanType type) { - List<Feature> planFeatures = new ArrayList<>(); - for (Feature feature : fc) { - QName featureName = feature.getName(); - if (featureName.getLocalPart().equals(type.name())) { - planFeatures.add(feature); - } - } - if (planFeatures.isEmpty()) - throw new IllegalArgumentException("Keine XPlan-FeatureCollection. Kein XP_Plan-Feature enthalten."); - return planFeatures; - } - /** * Retrieves the rechtsstand of a XPlan-FeatureCollection. * @param fc XPlan-FeatureCollection, never <code>null</code> diff --git a/xplan-core/xplan-core-commons/src/test/resources/de/latlon/xplan/jts/MultiSurfaceWithCurve.xml b/xplan-core/xplan-core-commons/src/test/resources/de/latlon/xplan/jts/MultiSurfaceWithCurve.xml new file mode 100644 index 000000000..c369a9435 --- /dev/null +++ b/xplan-core/xplan-core-commons/src/test/resources/de/latlon/xplan/jts/MultiSurfaceWithCurve.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes"?> +<gml:MultiSurface srsName="EPSG:25832" gml:id="GML_8b32800f-1ff7-4b9c-ab79-8fc8ae4b4600" xmlns:gml="http://www.opengis.net/gml/3.2"> + <gml:surfaceMember> + <gml:Polygon srsName="EPSG:25832" gml:id="GML_e6000682-a5be-4e2a-9c3c-5923fe69cfe4"> + <gml:exterior> + <gml:Ring> + <gml:curveMember> + <gml:Curve srsName="EPSG:25832" gml:id="GML_567e266f-2fe2-42d1-aa27-9eb0bf1f4993"> + <gml:segments> + <gml:LineStringSegment interpolation="linear"> + <gml:posList srsDimension="2" count="4">566018.685 5932818.208 566018.219 5932821.874 565886.529 5932785.604 565886.286 5932786.487 </gml:posList> + </gml:LineStringSegment> + <gml:ArcString interpolation="circularArc3Points"> + <gml:posList srsDimension="2" count="7">565886.286 5932786.487 565884.260 5932786.076 565882.196 5932785.945 565879.536 5932786.709 565877.668 5932788.751 565876.076 5932792.569 565875.090 5932796.586 </gml:posList> + </gml:ArcString> + <gml:LineStringSegment interpolation="linear"> + <gml:posList srsDimension="2" count="30">565875.090 5932796.586 565877.167 5932780.277 565848.013 5932771.824 565846.081 5932786.990 565844.345 5932800.629 565838.579 5932800.871 565817.704 5932801.748 565785.618 5932803.097 565785.411 5932798.091 565785.061 5932789.623 565771.225 5932790.194 565750.221 5932791.062 565725.312 5932792.551 565692.462 5932794.402 565667.474 5932795.494 565643.556 5932796.362 565604.863 5932797.583 565561.744 5932799.532 565544.463 5932800.651 565518.984 5932801.683 565490.864 5932802.354 565490.872 5932803.669 565469.410 5932804.104 565469.269 5932803.990 565466.939 5932787.432 565466.357 5932783.298 565467.303 5932781.812 565619.348 5932722.606 565619.364 5932722.462 565824.500 5932642.091 </gml:posList> + </gml:LineStringSegment> + <gml:ArcString interpolation="circularArc3Points"> + <gml:posList srsDimension="2" count="7">565824.500 5932642.091 565829.381 5932640.364 565834.348 5932638.903 565838.824 5932637.762 565843.378 5932636.991 565848.420 5932636.431 565853.483 5932636.125 </gml:posList> + </gml:ArcString> + <gml:LineStringSegment interpolation="linear"> + <gml:posList srsDimension="2" count="13">565853.483 5932636.125 565895.671 5932634.930 565940.829 5932633.546 565939.582 5932647.538 565939.560 5932649.199 565958.118 5932648.298 566039.903 5932651.651 566032.314 5932711.230 566029.946 5932729.803 566026.381 5932757.798 566020.325 5932805.339 566018.691 5932818.163 566018.685 5932818.208 </gml:posList> + </gml:LineStringSegment> + </gml:segments> + </gml:Curve> + </gml:curveMember> + </gml:Ring> + </gml:exterior> + </gml:Polygon> + </gml:surfaceMember> +</gml:MultiSurface> \ No newline at end of file diff --git a/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Geltungsbereich.java b/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Geltungsbereich.java new file mode 100644 index 000000000..01d7fe14b --- /dev/null +++ b/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Geltungsbereich.java @@ -0,0 +1,88 @@ +package de.latlon.xplan.core.manager.db.model; + +import java.util.Objects; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.MapsId; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import org.locationtech.jts.geom.Geometry; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@Entity +@Table(schema = "xplanmgr", name = "geltungsbereich") +public class Geltungsbereich { + + @Id + @Column(name = "plan") + private Integer id; + + @OneToOne + @JoinColumn(name = "id") + @MapsId("id") + private Plan plan; + + @Column(name = "geltungsbereichwgs84") + private Geometry geltungsbereichWGS84; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Geltungsbereich id(Integer id) { + this.id = id; + return this; + } + + public Geometry getGeltungsbereichWGS84() { + return geltungsbereichWGS84; + } + + public void setGeltungsbereichWGS84(Geometry geltungsbereichWGS84) { + this.geltungsbereichWGS84 = geltungsbereichWGS84; + } + + public Geltungsbereich geltungsbereich(Geometry geltungsbereich) { + this.geltungsbereichWGS84 = geltungsbereich; + return this; + } + + public Plan getPlan() { + return plan; + } + + public void setPlan(Plan plan) { + this.plan = plan; + } + + public Geltungsbereich plan(Plan plan) { + this.plan = plan; + return this; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Geltungsbereich that = (Geltungsbereich) o; + return Objects.equals(id, that.id) && Objects.equals(geltungsbereichWGS84, that.geltungsbereichWGS84); + } + + @Override + public int hashCode() { + return Objects.hash(id, geltungsbereichWGS84); + } + +} diff --git a/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Plan.java b/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Plan.java index 0fc412ed3..b12d41298 100644 --- a/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Plan.java +++ b/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/model/Plan.java @@ -27,6 +27,7 @@ import java.util.Set; import de.latlon.xplan.commons.XPlanType; import de.latlon.xplan.commons.XPlanVersion; +import jakarta.persistence.CascadeType; import jakarta.persistence.CollectionTable; import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; @@ -40,6 +41,7 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.OneToMany; +import jakarta.persistence.OneToOne; import jakarta.persistence.SequenceGenerator; import jakarta.persistence.Table; import jakarta.validation.Valid; @@ -99,6 +101,9 @@ public class Plan { private @Valid Geometry bbox; + @OneToOne(mappedBy = "plan", cascade = CascadeType.ALL) + private @Valid Geltungsbereich geltungsbereich; + @ElementCollection(fetch = FetchType.LAZY) @CollectionTable(schema = "xplanmgr", name = "gemeinden", joinColumns = @JoinColumn(name = "plan"), foreignKey = @ForeignKey(name = "gemeinden_plan_fkey")) @@ -307,6 +312,19 @@ public class Plan { return this; } + public Geltungsbereich getGeltungsbereich() { + return geltungsbereich; + } + + public void setGeltungsbereich(Geltungsbereich geltungsbereich) { + this.geltungsbereich = geltungsbereich; + } + + public Plan geltungsbereich(Geltungsbereich geltungsbereich) { + this.geltungsbereich = geltungsbereich; + return this; + } + public Set<Bereich> getBereiche() { return bereiche; } diff --git a/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/repository/GeltungsbereichRepository.java b/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/repository/GeltungsbereichRepository.java new file mode 100644 index 000000000..3e6810937 --- /dev/null +++ b/xplan-core/xplan-core-manager-db/src/main/java/de/latlon/xplan/core/manager/db/repository/GeltungsbereichRepository.java @@ -0,0 +1,36 @@ +/*- + * #%L + * xplan-core-manager-db - Modul zur Gruppierung der Kernmodule + * %% + * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package de.latlon.xplan.core.manager.db.repository; + +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@Repository +@Transactional +public interface GeltungsbereichRepository extends CrudRepository<Geltungsbereich, Integer> { + +} diff --git a/xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/config/HsqlJpaContext.java b/xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/config/HsqlJpaContext.java index eefc3883b..e1de85c63 100644 --- a/xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/config/HsqlJpaContext.java +++ b/xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/config/HsqlJpaContext.java @@ -20,6 +20,12 @@ */ package de.latlon.xplan.core.manager.db.config; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import javax.sql.DataSource; +import java.sql.SQLException; + import de.latlon.xplan.core.manager.db.DatasourceWrapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; @@ -30,12 +36,6 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; -import javax.sql.DataSource; -import java.sql.SQLException; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - /** * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> * @since 7.0 @@ -56,6 +56,7 @@ public class HsqlJpaContext { public DataSource dataSource() { EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); return builder.addScript("/create-schema.sql") + .addScript("create-geltungsbereich-test.sql") .setType(EmbeddedDatabaseType.HSQL) .ignoreFailedDrops(true) .build(); diff --git a/xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/repository/GeltungsbereichRepositoryTest.java b/xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/repository/GeltungsbereichRepositoryTest.java new file mode 100644 index 000000000..aa5d4845f --- /dev/null +++ b/xplan-core/xplan-core-manager-db/src/test/java/de/latlon/xplan/core/manager/db/repository/GeltungsbereichRepositoryTest.java @@ -0,0 +1,141 @@ +/*- + * #%L + * xplan-core-manager-db - Modul zur Gruppierung der Kernmodule + * %% + * Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package de.latlon.xplan.core.manager.db.repository; + +import static de.latlon.xplan.commons.XPlanType.BP_Plan; +import static de.latlon.xplan.commons.XPlanVersion.XPLAN_51; +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import javax.sql.DataSource; +import java.util.Collections; +import java.util.Date; +import java.util.Optional; + +import de.latlon.xplan.core.manager.db.config.HsqlJpaContext; +import de.latlon.xplan.core.manager.db.config.JpaContext; +import de.latlon.xplan.core.manager.db.config.PostgisJpaContext; +import de.latlon.xplan.core.manager.db.model.Artefact; +import de.latlon.xplan.core.manager.db.model.ArtefactId; +import de.latlon.xplan.core.manager.db.model.ArtefactType; +import de.latlon.xplan.core.manager.db.model.Bereich; +import de.latlon.xplan.core.manager.db.model.Feature; +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; +import de.latlon.xplan.core.manager.db.model.Gemeinde; +import de.latlon.xplan.core.manager.db.model.Plan; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.io.ParseException; +import org.locationtech.jts.io.WKTReader; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Commit; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.transaction.TestTransaction; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +@ExtendWith(SpringExtension.class) +@ActiveProfiles("test-hsql") +@ContextConfiguration(classes = { JpaContext.class, HsqlJpaContext.class, PostgisJpaContext.class }) +@Transactional +class GeltungsbereichRepositoryTest { + + @PersistenceContext + private EntityManager entityManager; + + @Autowired + private DataSource dataSource; + + @Autowired + private PlanRepository planRepository; + + @Autowired + private GeltungsbereichRepository geltungsbereichRepository; + + @Test + void verify_injectedComponentsAreNotNull() { + assertNotNull(dataSource); + assertNotNull(entityManager); + assertNotNull(planRepository); + assertNotNull(geltungsbereichRepository); + } + + @Test + @Commit + void verify_saveAndFindById() throws ParseException { + assertFalse(TestTransaction.isFlaggedForRollback()); + Bereich bereich = new Bereich().nummer("0").name("test"); + Gemeinde gemeinde = new Gemeinde().ags("05465465").rs("856131321").gemeindeName("Test").ortsteilName("teil1"); + Feature feature = new Feature().num(1).fid("123"); + Plan plan = new Plan(); + ArtefactId artefactId = new ArtefactId().plan(plan).filename("test.xml"); + byte[] bytes = "test".getBytes(UTF_8); + Artefact artefact = new Artefact().id(artefactId) + .num(1) + .artefacttype(ArtefactType.XPLANGML) + .mimetype("text/xml") + .length(Long.valueOf(bytes.length)) + .data(bytes); + plan.importDate(new Date()) + .version(XPLAN_51) + .type(BP_Plan) + .hasRaster(false) + .bereiche(Collections.singleton(bereich)) + .gemeinden(Collections.singleton(gemeinde)) + .features(Collections.singleton(feature)) + .artefacts(Collections.singleton(artefact)); + assertNull(plan.getId()); + Plan savedPlan = planRepository.save(plan); + + Geltungsbereich geltungsbereich = geltungsbereich(savedPlan); + geltungsbereichRepository.save(geltungsbereich); + + assertNotNull(savedPlan.getId()); + Optional<Plan> optionalFoundPlan = planRepository.findById(savedPlan.getId()); + assertTrue(optionalFoundPlan.isPresent()); + Plan foundPlan = optionalFoundPlan.get(); + assertNotNull(foundPlan); + assertNotNull(foundPlan.getId()); + + Optional<Geltungsbereich> foundGeltungsbereich = geltungsbereichRepository.findById(savedPlan.getId()); + assertTrue(foundGeltungsbereich.isPresent()); + assertNotNull(foundGeltungsbereich.get().getGeltungsbereichWGS84()); + assertEquals(foundGeltungsbereich.get().getId(), foundPlan.getId()); + } + + private Geltungsbereich geltungsbereich(Plan savedPlan) throws ParseException { + Geometry jtsGeom = new WKTReader().read("POLYGON((0 0,1 0,1 1,0 1,0 0))"); + return new Geltungsbereich().id(savedPlan.getId()).plan(savedPlan).geltungsbereich(jtsGeom); + } + +} diff --git a/xplan-core/xplan-core-manager-db/src/test/resources/create-geltungsbereich-test.sql b/xplan-core/xplan-core-manager-db/src/test/resources/create-geltungsbereich-test.sql new file mode 100644 index 000000000..69fd1067a --- /dev/null +++ b/xplan-core/xplan-core-manager-db/src/test/resources/create-geltungsbereich-test.sql @@ -0,0 +1,21 @@ +--- +-- #%L +-- xplan-core-manager-db - Modul zur Gruppierung der Kernmodule +-- %% +-- Copyright (C) 2008 - 2024 Freie und Hansestadt Hamburg, developed by lat/lon gesellschaft für raumbezogene Informationssysteme mbH +-- %% +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU Affero General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU Affero General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. +-- #L% +--- +create table xplanmgr.geltungsbereich (id integer not null, geltungsbereichwgs84 varbinary(2000), primary key (id)) diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDao.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDao.java index 973fa2573..fc45108df 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDao.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDao.java @@ -20,9 +20,17 @@ */ package de.latlon.xplan.manager.database; +import java.io.InputStream; +import java.sql.SQLException; +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + import de.latlon.xplan.commons.XPlanVersion; import de.latlon.xplan.commons.feature.XPlanFeatureCollection; import de.latlon.xplan.core.manager.db.model.Artefact; +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; import de.latlon.xplan.core.manager.db.model.Gemeinde; import de.latlon.xplan.manager.web.shared.Bereich; import de.latlon.xplan.manager.web.shared.PlanStatus; @@ -33,13 +41,6 @@ import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationEventPublisher; import org.springframework.transaction.annotation.Transactional; -import java.io.InputStream; -import java.sql.SQLException; -import java.util.Date; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - /** * DAO class for xplans. * @@ -238,19 +239,8 @@ public class XPlanDao { return xPlanDbAdapter.selectInternalId(planId); } - /** - * Retrieve internalId by the manager id from xplanmgr.plans. - * @param planId the planId of the plan, never <code>null</code> - * @return the internal id of a plan (if available), <code>null</code> if an error - * occurred - */ - public Date retrieveSortDate(int planId) { - return xPlanDbAdapter.selectSortDate(planId); - } - /** * @param planId of the plan to retrieve the bereiche - * @throws Exception */ public List<Bereich> retrieveBereicheOfPlanWithId(String planId) { int planIdAsInt = getXPlanIdAsInt(planId); @@ -259,13 +249,20 @@ public class XPlanDao { /** * @param planId of the plan to retrieve the bereiche - * @throws Exception */ public List<Gemeinde> retrieveGemeindeOfPlanWithId(String planId) { int planIdAsInt = getXPlanIdAsInt(planId); return xPlanDbAdapter.selectGemeinden(planIdAsInt); } + /** + * @param planId of the plan to retrieve the bereiche + */ + public Geltungsbereich retrieveGeltungsbereichOfPlanWithId(String planId) { + int planIdAsInt = getXPlanIdAsInt(planId); + return xPlanDbAdapter.selectGeltungsbereich(planIdAsInt); + } + /** * @param planId of the plan to set the status * @throws SQLException if the sql could not be executed diff --git a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDbAdapter.java b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDbAdapter.java index 8c32f68ce..ff5ad9341 100644 --- a/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDbAdapter.java +++ b/xplan-core/xplan-core-manager/src/main/java/de/latlon/xplan/manager/database/XPlanDbAdapter.java @@ -62,10 +62,12 @@ import de.latlon.xplan.core.manager.db.model.Artefact; import de.latlon.xplan.core.manager.db.model.ArtefactId; import de.latlon.xplan.core.manager.db.model.ArtefactType; import de.latlon.xplan.core.manager.db.model.Feature; +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; import de.latlon.xplan.core.manager.db.model.Gemeinde; import de.latlon.xplan.core.manager.db.model.Plan; import de.latlon.xplan.core.manager.db.model.PlanwerkWmsMetadata; import de.latlon.xplan.core.manager.db.repository.ArtefactRepository; +import de.latlon.xplan.core.manager.db.repository.GeltungsbereichRepository; import de.latlon.xplan.core.manager.db.repository.PlanRepository; import de.latlon.xplan.core.manager.db.repository.PlanwerkWmsMetadataRepository; import de.latlon.xplan.manager.edit.EditedArtefact; @@ -99,16 +101,19 @@ public class XPlanDbAdapter { private final ArtefactRepository artefactRepository; + private final GeltungsbereichRepository geltungsbereichRepository; + /** * @param planRepository never <code>null</code> * @param planwerkWmsMetadataRepository never <code>null</code> * @param artefactRepository never <code>null</code> */ public XPlanDbAdapter(PlanRepository planRepository, PlanwerkWmsMetadataRepository planwerkWmsMetadataRepository, - ArtefactRepository artefactRepository) { + ArtefactRepository artefactRepository, GeltungsbereichRepository geltungsbereichRepository) { this.planRepository = planRepository; this.planwerkWmsMetadataRepository = planwerkWmsMetadataRepository; this.artefactRepository = artefactRepository; + this.geltungsbereichRepository = geltungsbereichRepository; } @Transactional(propagation = Propagation.MANDATORY) @@ -402,6 +407,17 @@ public class XPlanDbAdapter { return null; } + /** + * Retrieve the Geltungsbereich by the manager id from xplanmgr.geltungsbereich. + * @param planId the planId of the plan, never <code>null</code> + * @return the Geltungsbereich of the plan (if available), otherwise <code>null</code> + */ + @Transactional(readOnly = true) + public Geltungsbereich selectGeltungsbereich(int planId) { + Optional<Geltungsbereich> geltungsbereich = geltungsbereichRepository.findById(planId); + return geltungsbereich.orElse(null); + } + private File retrieveUploadedArtefact(String refFileName, List<File> uploadedArtefacts) { if (uploadedArtefacts != null) { for (File uploadedArtefact : uploadedArtefacts) { @@ -430,10 +446,13 @@ public class XPlanDbAdapter { return bos.toByteArray(); } - private String createWktFromBboxIn4326(XPlanFeatureCollection fc) { + private org.locationtech.jts.geom.Geometry createWktFromBboxIn4326(XPlanFeatureCollection fc) + throws ParseException { Envelope bboxIn4326 = fc.getBboxIn4326(); - if (bboxIn4326 != null) - return WKTWriter.write(bboxIn4326); + if (bboxIn4326 != null) { + String bboxAsWkt = WKTWriter.write(bboxIn4326); + return new org.locationtech.jts.io.WKTReader().read(bboxAsWkt); + } return null; } @@ -500,9 +519,7 @@ public class XPlanDbAdapter { private Plan createPlan(XPlanArchive archive, XPlanFeatureCollection fc, PlanStatus planStatus, Date sortDate, String internalId) throws ParseException { - String wktFromBboxIn4326 = createWktFromBboxIn4326(fc); - org.locationtech.jts.geom.Geometry bbox = new org.locationtech.jts.io.WKTReader().read(wktFromBboxIn4326); - Plan plan = new Plan().importDate(new Date(System.currentTimeMillis())) + return new Plan().importDate(new Date(System.currentTimeMillis())) .version(archive.getVersion()) .type(archive.getType()) .name(fc.getPlanName()) @@ -512,8 +529,7 @@ public class XPlanDbAdapter { .planstatus(retrievePlanStatusMessage(planStatus)) .wmssortdate(sortDate) .internalid(internalId) - .bbox(bbox); - return plan; + .bbox(createWktFromBboxIn4326(fc)); } private Set<de.latlon.xplan.core.manager.db.model.Bereich> createBereiche(FeatureCollection synFc) @@ -638,9 +654,7 @@ public class XPlanDbAdapter { xPlan.setLegislationStatus(plan.getRechtsstand()); xPlan.setReleaseDate(plan.getReleaseDate()); xPlan.setImportDate(plan.getImportDate()); - XPlanEnvelope bbox = convertToXPlanEnvelope(plan); - - xPlan.setBbox(bbox); + xPlan.setBbox(convertToXPlanEnvelope(plan)); xPlan.setPlanStatus(createPlanStatus(plan.getPlanstatus())); xPlan.setInspirePublished(plan.getInspirepublished()); xPlan.setInternalId(plan.getInternalid()); diff --git a/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluation.java b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluation.java index 0d93bcaf8..097b1f656 100644 --- a/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluation.java +++ b/xplan-core/xplan-core-raster/src/main/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluation.java @@ -8,12 +8,12 @@ * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% @@ -102,12 +102,15 @@ public class XPlanRasterEvaluation implements RasterEvaluation { IIOMetadata md = reader.getImageMetadata(0); GeoTiffIIOMetadataAdapter geoTIFFMetaData = new GeoTiffIIOMetadataAdapter(md); - int modelType = Integer.valueOf(geoTIFFMetaData.getGeoKey(1024)); - if (modelType == 1) { - return geoTIFFMetaData.getGeoKey(3072); - } - else if (modelType == 2) { - return geoTIFFMetaData.getGeoKey(2048); + String crsFromTif = geoTIFFMetaData.getGeoKey(1024); + if (crsFromTif != null && !crsFromTif.isEmpty()) { + int modelType = Integer.valueOf(crsFromTif); + if (modelType == 1) { + return geoTIFFMetaData.getGeoKey(3072); + } + else if (modelType == 2) { + return geoTIFFMetaData.getGeoKey(2048); + } } } catch (IOException e) { diff --git a/xplan-core/xplan-core-raster/src/test/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluatorTest.java b/xplan-core/xplan-core-raster/src/test/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluatorTest.java index 8e6b8cb68..2fb73e232 100644 --- a/xplan-core/xplan-core-raster/src/test/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluatorTest.java +++ b/xplan-core/xplan-core-raster/src/test/java/de/latlon/xplanbox/core/raster/evaluation/XPlanRasterEvaluatorTest.java @@ -54,8 +54,6 @@ public class XPlanRasterEvaluatorTest { private static final String TIFF_NO_CRS_NAME = "XPlanRasterManagerTest_noCrs.tiff"; - private static final String PNG_NO_CRS_NAME = "XPlanRasterManagerTest_noCrs.png"; - private static final String PNG_EPSG25833_NAME = "XPlanRasterManagerTest_epsg25833.png"; private static final String PNG_EPSG25833_AUX_NAME = "XPlanRasterManagerTest_epsg25833.png.aux.xml"; @@ -108,6 +106,22 @@ public class XPlanRasterEvaluatorTest { assertThat(result.isSupportedImageFormat()).isTrue(); } + @Test + public void testEvaluateRasterdata_TiffNoCrs() throws Exception { + String tiffNoCrs = "tif_25833.tif"; + XPlanRasterEvaluator xPlanRasterManager = new XPlanRasterEvaluator(new XPlanRasterEvaluation(CONFIGURED_CRS)); + XPlanArchive xPlanArchive = mockArchive(tiffNoCrs, tiffNoCrs); + XPlanFeatureCollection planFeatureCollection = mockFeatureCollection(tiffNoCrs); + List<RasterEvaluationResult> results = xPlanRasterManager.evaluateRasterdata(xPlanArchive, + planFeatureCollection); + RasterEvaluationResult result = results.get(0); + + assertThat(result.getRasterName()).isEqualTo(tiffNoCrs); + assertThat(result.isCrsSet()).isFalse(); + assertThat(result.isConfiguredCrs()).isFalse(); + assertThat(result.isSupportedImageFormat()).isTrue(); + } + @Test public void testEvaluateRasterdataMapserverWithTxt() throws Exception { XPlanRasterEvaluator xPlanRasterManager = new XPlanRasterEvaluator(new XPlanRasterEvaluation("EPSG:25832")); diff --git a/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/tif_25833.tfw b/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/tif_25833.tfw new file mode 100644 index 000000000..344d0394e --- /dev/null +++ b/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/tif_25833.tfw @@ -0,0 +1,6 @@ +0.03710087153868 +0.00000000000000 +0.00000000000000 +-0.03710057799702 +383743.60138097184245 +5824340.47356364782900 diff --git a/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/tif_25833.tif b/xplan-core/xplan-core-raster/src/test/resources/de/latlon/xplanbox/core/raster/evaluation/tif_25833.tif new file mode 100644 index 0000000000000000000000000000000000000000..0486f556e46e7c06096bb58129bbcd99b2885de8 GIT binary patch literal 40662746 zcmeF#d7MvW|1j_~b|Mj#vP`IyX3S=rEXiKki6oj06K0qhYe~x;B}=RJL`q0*tr8Wo zlw`?Lv`I=*cgd1<p7R})?%)0UJ<t8Tp8NUh{hinKI-l>kmUCV2>pJH<=W5&bvY<o| z1m_1qRN){hjBYO-h9~3xVO%JTi-hM}g_(s<o{y9(b}}v$#$}=k1-ap|eV9=$sz^{N zjF*OS`P0f*JQ+vYI_G43dl;X4vi!wiL+3{oE$GAeFuveq{9qVYKCPW9;kC{T>pc;k zuXXZ#7zXj-`7+`0#qdi)7*`16H^R8{X?44Vapd|RhUXU*iV9kU4Q&YHGw&)L6b{dy zQ!WVZ{9EauSQy8Kapt%p1^p=&HkLcCc<^jkws&}b-nbL(96vh<&I|KOocwE@+^bpZ zKCN4{jcL=SSF`5LJ9KW*>#B^*+`*X{1JhITGP0t(X7tM#7~L@^`{s-RdA(Y6Z{4Ry z$AKwXed_gz>lL36Q#UR(rB}<Gei^A*nYq!e+O-U;r=|=Yn$<6NaHQDDB7G9-Hb_j2 z&CBc?1Y0kTq)K5*2-7uTN)OZMFii>5yfCc_)AleO4%69DTQ9ymOfAFIJ50mFbbpv; zg=uM+wuNb5n93B|dhx|!Y8s{<;iw}s`X5XkD+Gtbt3=k-sbe^}(}vl)ZM%-q39<2U zv59fv{Kh5JO^%CCj!%q^YnU9@AUUpKSog$VqoyMUr=$(Y$cs+R=$Dz*xcWcdez$sb zW_si5-RriCYd5%gM*qw<qjEC3jB4LCZPb9YhUwLtHYwF;MDmD1g9l~gr9_VyG%zbS zc|_ytDe2j%8OdQBIbElEbU~540gbEo2>a4JJ0~MLDK;rKE~e#(%wY-Do0N)fl#|{! zxpRwFCz}YrHLl)2FK=*iojSvZ504$57@M8buTFf!h7Ie)CDchshzU!?<c`eBOBoT9 zm0Kgy#ECXqWaOshWDd^D%+89Aw3(8cJv6Uz_3B}M^r`+08r-hkAI)dw#uoH8HZ6Nl zoe?R6>%_;#)fqIX&gnIB^I8rI8#&pbe_129>&U?wbvkF{W)ICt%V;?)BP*}Q=}n}k z{ZW7L(42t<!%0u8lQA%3P*^lKylVVkE*Y7%KWan>`ehCpTu>{-{!7Vlw*SQXOWz_n z1;aVLBVqMF+WkxEQ)4eE9F}U=F1bZ^+R#Y%+O}w1J#ziz^z5|E^yGrDeqzJadg%@N z#w5ihq{k%HOG%4KX^@l@Q$L|^Vp9FojJoL=4Nq&TZB}kxN>*A%q^Yp+*vzn<g!Hte z21)heVp39)5@M42)~z4YATDe%y>H)!ebZAL)=N){Kdp%lIho<AOc{83uOdyQhfSr{ zjcX8>nw}Ap8W$fIla$goJtifgL3&Kxw0ap0GU6Nb%}77doAk8gR@pg&Qo`xX9F)>8 zqfP{=;35(6<Ypb)Hm;r!8~5j#@EMcWH>}aP`n8!^Lr46X(KT~WMwh&l2xol##CrAX z)~(l|VN!VcxVnE9x-KIpH(ZL5HVbaRf}F@DlUsxjwMY|T)_=Vv|18!v(#dNxvijxq zZ(KbwzJ9%b%Icn(UXYUzccRY)ZHH3ftffS5g0OQ1HA1N5<~bQDdD%H#v$F>_uKvek zq2S($ZggVC+hpd3B}PVWr;|5Smy97NzMZ(g24)syMMoFh6UixQCoYnkGAtv#;6h=& z6Ip5fQ?mMHgb$CCtM%0R%zv>G(i<lBtrs7c5|bF8niP|il$a3HFfp-jOhVoGhH0sZ z8TI0lQvcd|Zg$_i;VC&8&H9BS4M!8M&Vq+rbghDEy7aH5hxgBj%s~hp6Bi#7pV&3> z?5mrc)S!0wC=BK5{C^l?{rJ>+8R5E&Ppp>~uF!;VttN$QHLYQTdUfliHcU*2Kd}z~ z0Q`S2#K`0QuS0B9C-PK0HK~p2{FiAzQQ)-4Xh?J7T=;knpZ0bBc-)^fi>#FY;OFFW z`ww0rY}!TsEni%?{w;xjtFYCD>)#Uiw+dTb|IfHe{rSR}krn=<H#~eDJi2DXoNta# zZ+hvMoi=<L9>dqt|M3$$ZhhC|1I}%hxB9kfo9bWJ?9al5o*kGrD7Q%X&N?V7FQ;?s ztD<{c-!r=S58=ydnQ+sfco3hGmOHpv$Bx(jS?8al1Dgw8jDt^NB5nP1?*Ha{ne^~o zGJLa+4$EDcHaI6QjBg6#dc*SuN8-oAxI*|}Zh9EM6vmh5gdGgyPb243PsDp7ale8% zd`S=EoUWalhdV>z&PNd4@3c7ev^cGQ&Y-YNQdp*D`k<_^{X#uX#Oaav)<`^P;Lxyd z1)s>Pf9Z^@Ze7A-%`jCCS_f@|c0tD=I!FzM2ARRYATNjsk6GcF+@N!qf7O3eKitd; z>vs%mrG~XKgS4<liy%7~6r>c?4<d6AmI*(9+UE96Oei=NRr;zRDEei7{%;orLGg!z z;Mo27`A4SZ=O3FM?tpzB1n*`2SwH*PAZV~ZJb(Y6=W0$3g0g=Lcc0$>^IYnqLGb3d zaJT5Q!6`W@1=opeI2Gy}?%?d58SbE69|UKw3xZNNoNx>CBKg5{TY{i#Xm#zHAb9+V zAh@_+*mke~X55jDyg%Ij$1*4VB0DCLPk4Ox#O~jT??F&9I3DhlMZOiB3HRtu9K-J? z<KtmoWN$Fi&GF$%IJGwz**iP6HyDXe?fXT_MHM>H&i!HeLMP+4<-?5db7BuI|I_@h zgR`z~)wWf5p@NPDLH@R&c~GKQvEs#wmMC7lc*&9_N|mlqrt}$Sl&)0%?6MWAoL{YK zmGdiCj;<MdNp$tgYgDdWtNx{z$HgZlB~`nmVdDk~jbam%5+aR6l`L7Z^ckhkD^upY zgbOQQnDB3Z^4|-}l?aYUg@dgg6e<^0xLj2J`$4s^pGBhzJ|~6}8ED}mMT-?LQL@w- zVS(4ribxeMRHSgxqD6{?xue7Uph&r*<u8nHR_yFfDaES~sgQ8T1Jg>>xN82Aik;X0 zQZq3%=gyL)&N=tIO6Om6@g=n`y)3D2z4{FrCO2=<vQ_IgZLjXqwcB;w!{wEhp3%2o z|IC|n^M(!^K4RpkyZ(0f*m3vVJO06k9)4uXqmMoQ#PsK8JpaPX7iZ0W<<-|-f8)&s zZ!KK9?EU2{R<8Qs!wsKo+_ZVir=M-z{>_eWcYgQ%t{-;)y7#wz`wtxa{m|jaxFX{` z^*J%Je;QZ0a9o9o6e(P!cw}5rg@#84Uam;d3*(EGZ`P@J%8;|GC)`n@!c`AUo4=%F zjl|BsR7}lTU+SEiN!u^_H8Qk<k^P?y?9TtIk^M2SKgYE-C|x)zoV>#2f~LWt<Kt^R zTS)p38eFz~@x(8_s(0YkYm@snSUu*lU|!3C%eS{1mi^WXA2t1QX?~E{v*Xbwn`Z>8 z22DSZnb7*%GC|J6-G^uYvN`Rp+!t58Grhs;+h&Yk-(l?G{?!&OdOQ2z)suJiFZ|K2 zd41me<+{7F^MlylDf=Jz^!Ve;`;2S0A?DMho`Yupeb<*AYu=U=_09ZkYw90<amJW~ zU7vV2d;1ruyS|C3_wA9_GFpE(r1!=bUyPd_9H_86*xTmTlJl;axcS%RQ~&W{gQKtZ z?09RvcQQUYxcS$qEjs51+j~FMG8p_ueo$u6!}-CC-3bf!jgOnUw(hKRZ-1@Udu2** zxMk7I!>J2zu2uNrZOhKT=-EOs_0CK__r~vk8@PGGuyxIk&pz*yW19*+KmGPbe_d%C z*X6a{zoyj{Z7SY(MbY#2H~r+Td97djJ+VRdzWd%D{mzV6%l%$@O!D^SeR~Y7y>m|O z#5X1td%nl4FKQmi58k_W@73L|8&+y|k7sT#z2)s2ZjIjXT(x)K9$9wu-)B!=)^P6J zE4F_(Zf2VY>uk-)yXnK;H%@Ew!|k_sf4s}RaS!zV>9Y;5yz|@9re9BOe8UgP6W4Xg zPRWhVnlL}U_^-<|mwml>RQ91EpElh#wA$vyk9PZH(!HbKDt`2upR0YFAH0xIb<Xi0 z8aMv<it*zYPq_H9XD)kiPKSQKkF45t`Zu3vENry&tL-1px$xMr<*!|{XZhs4$6udz z?y_bJD!rc2dhq@ELFWPQ&OSKlgA&UQr99pB-Gj}V<Oh%LxUqV}RZXhynqT(I3m%_* zq;uM#sO~=<t@iA;dOJT^zxG&C-!bc+>iWQ!?X!+PQ1ADsV9kowA1&KoBYXRGFaMm; zcF~KIKAC^d<ui-^eaPDOwF>pf`?2=mBJ~EhD&B7X9oJnM+>|%F<L4h7=)ZDp&51Qy zUH@qGS#4_mbl%FUUo7l$@q)*%on3S5_s9AKcYVCBX+o{SSB;<jTboDYSKi;H@W}Ia zw=Z64)eqOb7)&2u>tCh9@70<<K8U2tZn@_AI+v7dmAt>nBTb%u{>Gb!m#k3k)$9i6 zRjPS7>dVFNE~!>_`ufgSe9<iGt!fF)?_W~3@|$zYuIm2eW8dZdeej~EcdoBG_UuBt zdk#&S{C$2<_@k-Y|8du&&F0^*`o&*|SKr=gT>Px#FT6dz*1V7BH@Nqk%ND*~^`!$# z$Jcr(82j^v3w~@H^YU4ZI>&DA(yR88CQpvqI{K5WjH1)R1-iP&vD==DuC{jZsG@y; z?0NOgn|t^EN9>4?f6rK1>#Oab9yx#i-dopvJ$q}P!e1R-+qBBv2kv{OTKS{h_s{>Z z^I7Meb!GJaV$Y3jo%(BsYL5;%d*GC&&41c6>aNaPcFlkA!Or(B>~~M+#S12FED|-m zLh77JXEwe6yC)C)TH{dPVCAr7Q+7O9ymC&%IiFVgxLE)9_Eo&H-?7)XFBp(<d$4H5 zS)+G;c-N%QDm8t+^?>2u_ilT^wiSO{efzMzgWrDZV3F|~-}`uQtrE|ETdVT-Ge-s4 z51sSN@t#?g$8KBG<X=xfWKvE{!p2vBIq>`~rO#eA@ViPMlv_~r&6~ddC1KQ-A<y1= z$;Q|ZSKnInwSG^1)Fk`Jj-%~v8gaq$oDpNXw0Ys-``T8n{7j2>pA2hUw)s!{=1to( zuf{uXlwZ;Mx!By-4v*<Gt>WH8o6{yNUHxFmng{yLdNeuVV6V~pzq+x}loi9qZJ(HU z<>Yhj|E_b8Idw|Y?Z02Qrb71>U1udf_}!ClHy*Za)7=$1b&P6Rp&%8%;+u9=zFRRf z{qeW&9a8<wM!WKZxA#|R{mm6mEE(JNnTw_*KAdv@fOWMeZh39(o;h!BjIOq;%NzYV z<p-BfJ+fn6)%;-U+|hl?ez$01%FT<bg%8ROdmHt-?Sco6^w@JSKS+4KLZ?1`M=m*e zsZ*Ccbu3(D{o}o(cZ>=?Y8>@((+6gZ9r1m;U*j@<Xp?lq+lO9GAOB_BXQ$M>=cmpi zi{ATj<Hx!Vd*i{aALL|JsJUVF;&uIYUf6BOs%l>x>tAS1g-%yiEoig%bHA)zF**D4 zQSG)pbjKUzJABpW=h3Y@{kUr1yx5sFUdwuULbr`OuWw(X$@I5|Jk}=lhvY8jKRkWo z^gZkMzn@cc{!8~Pd0=d_D$A1>{kVP0#Ivt^^+?R>q6;Qhy=hlMhp(!BH0to#|5!PF z%Xg10y8M?-H(olo)4m=9TMStCc=o1YDJ?5>k6%}zQ_G+reURFAdjA<6SM4Z0BfVUQ z=@b99;pUIN&U$HT%XiM{Tz>P0^sTE_zIc55!77VeuiLOCZFc70cfV1-=b8uJet78a z3CVE>i!GS(+q7q{x#I8V?5=u2;i#2;tFAosZTDT3s%GwAc-x219o+Hz%lW}~xBguF z%w6rjsQT5nZNsZC$_=OV%A$Xy&gIXYRrtp%&$#;8#Mx6ym0Xgx?aPO1Y#tx%zbAV9 z)*@polsvz5t%@J~zWK|G23)_f)+2A$PMZ@odFQd4pPqbQc1+BaN;TRpolrY|$;x-< zX6)|y^om)z-}j2!ad)@#N;Q75(9?f#htpbgO`XmQHViE>FXqYe7k*oH!WFX)RDWl} zFXQf=`}(oiOD0|W#^))MdZf*M^GNd=yW>U=_-@p$Mi+f^{jFEbuKnnkS5~!tV$P-x z{i^QRU#ZHED?d(HKH>QhM+ao@tvjt}*Gtw`d*bJJ*UsO!vtsM3H*Vi_`G)>qw7sn4 z))CSBYJ7SiKlriR?xR0<8j_Xp`QZlb6URS%<0qwRO`q}iQ%}Q}`kb|EWv4r`2HiP# z|2x+X95Z2f^F3pl-?jCP7w7ix{&cDFbL;n=FsIYR{tepvw(H`vS1u?tqx?&AH}x1= z{PV7lJpWC*OXv0*)O%CO>w+6sEPij-*P|vKe{NUp`0H<MereG*t7=TEc(`|;Nn`7c zpH=1X%O4&3@Zp{9+n4|1jBp-?oLbsZU4Q;2rcq8(u@UcQz0f52shht3_0!2KUcN4C z*2tLoUGGkh?ey5dUbl}Z+~}66tHXK97}ThK)Xa;PT+n^ysw*oWZ@R8)yVQ&)I{tc2 z>mdg>4w-Vrq}ILTqJDbfkviXxEL5WFQ#*zYF56)3%a^7vTrg=^`)N-NJakJ&vr0#E ze?QW(@PvUw>ps%$*Vkez6<b$q&;6tBT6OHQ{T=W8x$ooQ@6E_c#jC`XTyfiDM<@0v z_;;%8>AxL?*EOj;V#&TISMA$&Z*cdvv!*l%9{TX?T^%|!-(UA1XSIJc?xp!p%{en6 zuJ!zb^By>S{(<bV@6<bTZJ*B$Zn*7u{BMavhgQyB`{LKtZYrDB=aQ*AdwuXtX3VJk z;PKDyeE&$LoNKm^xhp@o<k-;0J;x_c7+-rwhg(nmLPd^O6)sd_RpXX}w?6Y!-W5O1 znY!o5xMS;oI%DeBhpT?|=<~z772Ww%{R0p7{5*QZj9%q>kG<is4n?nTH}K$%>sL-# zc1!;+o0i{pbkfD+CoF3+b=cOS+s=KY*sh&5j^&KG<;NfMgDtaa@0;B%rDv%bRX%AH z4!HJ};aa)<pVMFe@p<93x1U-1bL}~qrE^;>d0<>x$MtPzY<etfbj7bboU>$J=KN`w zy)y5^v@af<c<ig0MP}_=_0!snK9~P~ORuR{ZYsY!W=*B{ro;_doICZSs?GMa9DU*T zV_9Xg+m9bH<IL*|7yDt+s2y)kt1@|epQxvIW}nezYqMJ>|I&EiyA{WLzV^0f1{~e; z?SM`#D}MdVi=A3l2u`M`$6wAoW6t$IU03e&_lGZuO?-Xvv1Yqk=A8B6+IJduS^dn# zpIx5*?Q>(s4cRkb-JGX>z4-pU<z`=h;ef{;Ex)4a&R0f_S=4al#!374H9Tj){>&q# z=6xQSiW(oR+&*UKz9wV7OI?5M_^wY}^kBWuCnS_<^3J}!cm9i)jlZmvf>rbKviEL_ z8B=!mHAVLR^x7k@oVRb{!u0&$l~L8+JMeOo@hi(+Rq=;~xjo~y41H_=+^0Vu{>JL0 z(PfK_$vfP2|Bh;<kM{p{)xvH+PPu8pJx@JUee(AFVB{^MCQMqo_>n5<6VqFjo{;d; znawI5dO78eXU=?eX3WBB&F*@C_Agt$xgq?;`Dkc`PQ5PaaXQcPAD`%VpyiI<OBc*v zF!00YX2g!UZ`Un{tKRa&+#5HpTRG&6WtSD7xN**<m5Q9dJ@)c%*Ux)r$)$bo-a9Cx z(a(K;e(2ct!;`1Ydt+5%p8?h8bh~Zuwl%{J-PZb!aA8&I-Smv3jow|=v)1%?p55_3 zub7i&#aq`{cG)!-R0#j4eedf#lg~dmb=)(F?fR~|;qzDKE<Nkzw^p2&ADmU~i?l=4 zUYu8C&cgPyhCH`BzV{7NA8(M}xJrj^O;#-0v$oEpdiUM;`;_IM%(|>gw+j~@y>;@O zT`%9V^tPIBZrQis`H8E`FFI%Ukd4(2j2qMIt}hp!e{}2IOFKXLw@ptpnKZG-raPaC z{2*P|ciO36-L9|Sm{8@q<v%@tQHL+v7Vny}Zv5LVyIxYOZTr|Y<vKrgbIYYSB(Cka zy7GptHwJHZ9K1U@ZqKq$cO06uDJHM?h3mH-udwj-_ZGid<b@IC>*O_AdFYN_ADw;q zuf;pI?$~W?sRuSz8$4j&tuqrQ)tmU$`)~G{7d{O)X0*EX!Texc&G1IslyJJ)U+=Kf z*4UYommI(Np=Aqazk0>!DXpsBRQcf=&rKfk)yDMh>!0ZT{F$@TAA0}8&w{6C)_CCl zW<Qts_WVOvExu&?<nb>Lik<Xi><=|sWY%c7>$xc%W_E5|c7EO8Mjq%fr_15@n_Tqn z<DcC9{-Q?vfA1asVBYd{h4I5{rL3E<Vaw8~E&lki4u7;OelX&`tB;gfwtMreBQx`Z z$qP2#R;by}#fxtoU3>0~=!8dVME}xq=uPt<iF@Rco@0LbasHZnm(Bj=&EDgRl*lMO z<E)WIhCe_3@bbJtH|&XjYTLDQFE89^<(&!dwr|xmcIo(I^~>Bdw)(?2FY9~jkL~I` zvnzbkeO~C~z{}=;c4{ZakpKY#1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RsPv9Xb#I00000@_%iF1P2Zr zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxiJ?9hP#00000kpF8VBsg&3z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede z;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQq zIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n? z4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj! z0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^` zz<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!K zaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB) z95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c z2M!!KaNxj!0|yQqIB?*=fddB)95`^`z<~n?4jede;J|?c2M!!KaNxj!0|yQqIB?*= zfddB)VBZdyqsEZ{jPlR<>0DD(xR9O6*kh@!R==&fx?M<Y>G>lhcAEeJ0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N 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�s_aLNZIcJkW%leDx9*}j-hiB`57+`<_1{h#~ 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�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 literal 0 HcmV?d00001 diff --git a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/geojson/jts/JtsToGeoJsonGeometryBuilder.java b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/geojson/jts/JtsToGeoJsonGeometryBuilder.java new file mode 100644 index 000000000..bfdc5a7f0 --- /dev/null +++ b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/report/geojson/jts/JtsToGeoJsonGeometryBuilder.java @@ -0,0 +1,173 @@ +package de.latlon.xplan.validator.report.geojson.jts; + +import static org.locationtech.jts.geom.Geometry.TYPENAME_GEOMETRYCOLLECTION; +import static org.locationtech.jts.geom.Geometry.TYPENAME_LINEARRING; +import static org.locationtech.jts.geom.Geometry.TYPENAME_LINESTRING; +import static org.locationtech.jts.geom.Geometry.TYPENAME_MULTILINESTRING; +import static org.locationtech.jts.geom.Geometry.TYPENAME_MULTIPOINT; +import static org.locationtech.jts.geom.Geometry.TYPENAME_MULTIPOLYGON; +import static org.locationtech.jts.geom.Geometry.TYPENAME_POINT; +import static org.locationtech.jts.geom.Geometry.TYPENAME_POLYGON; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import de.latlon.xplan.validator.report.geojson.model.Geometry; +import de.latlon.xplan.validator.report.geojson.model.GeometryCollection; +import de.latlon.xplan.validator.report.geojson.model.GeometryElement; +import de.latlon.xplan.validator.report.geojson.model.LineString; +import de.latlon.xplan.validator.report.geojson.model.LineStringCoordinates; +import de.latlon.xplan.validator.report.geojson.model.LinearRing; +import de.latlon.xplan.validator.report.geojson.model.MultiLineString; +import de.latlon.xplan.validator.report.geojson.model.MultiPoint; +import de.latlon.xplan.validator.report.geojson.model.MultiPolygon; +import de.latlon.xplan.validator.report.geojson.model.Point; +import de.latlon.xplan.validator.report.geojson.model.Polygon; +import de.latlon.xplan.validator.report.geojson.model.Position; +import org.locationtech.jts.geom.Coordinate; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class JtsToGeoJsonGeometryBuilder { + + private JtsToGeoJsonGeometryBuilder() { + } + + /** + * @param geom may be <code>null</code> + * @return <code>null</code> if the passed geom is <code>null</code> + */ + public static Geometry createGeometry(org.locationtech.jts.geom.Geometry geom) { + if (geom == null) + return null; + return geometry(geom); + } + + private static Geometry geometry(org.locationtech.jts.geom.Geometry geom) { + switch (geom.getGeometryType()) { + case TYPENAME_POINT -> { + return geometry((org.locationtech.jts.geom.Point) geom); + } + case TYPENAME_LINEARRING -> { + return geometry((org.locationtech.jts.geom.LinearRing) geom); + } + case TYPENAME_LINESTRING -> { + return geometry((org.locationtech.jts.geom.LineString) geom); + } + case TYPENAME_POLYGON -> { + return geometry((org.locationtech.jts.geom.Polygon) geom); + } + case TYPENAME_GEOMETRYCOLLECTION -> { + return geometry((org.locationtech.jts.geom.GeometryCollection) geom); + } + case TYPENAME_MULTIPOINT -> { + return geometry((org.locationtech.jts.geom.MultiPoint) geom); + } + case TYPENAME_MULTILINESTRING -> { + return geometry((org.locationtech.jts.geom.MultiLineString) geom); + } + case TYPENAME_MULTIPOLYGON -> { + return geometry((org.locationtech.jts.geom.MultiPolygon) geom); + } + default -> throw new IllegalArgumentException( + "Could not export geometry " + geom.getGeometryType() + " as GeoJSON"); + } + } + + private static GeometryCollection geometry(org.locationtech.jts.geom.GeometryCollection geom) { + GeometryCollection geometryCollection = new GeometryCollection(); + for (int geomIndex = 0; geomIndex < geom.getNumGeometries(); geomIndex++) { + geometryCollection.addGeometriesItem((GeometryElement) geometry(geom.getGeometryN(geomIndex))); + } + return geometryCollection; + } + + private static MultiPoint geometry(org.locationtech.jts.geom.MultiPoint geom) { + MultiPoint multiPoint = new MultiPoint(); + for (int geomIndex = 0; geomIndex < geom.getNumGeometries(); geomIndex++) { + org.locationtech.jts.geom.Point point = (org.locationtech.jts.geom.Point) geom.getGeometryN(geomIndex); + multiPoint.addPositionItem(position(point)); + } + return multiPoint; + } + + private static MultiLineString geometry(org.locationtech.jts.geom.MultiLineString geom) { + MultiLineString multiLineString = new MultiLineString(); + for (int geomIndex = 0; geomIndex < geom.getNumGeometries(); geomIndex++) { + org.locationtech.jts.geom.LineString lineString = (org.locationtech.jts.geom.LineString) geom + .getGeometryN(geomIndex); + multiLineString.addLineStringCoordinate(lineStringCoordinates(lineString)); + } + return multiLineString; + } + + private static MultiPolygon geometry(org.locationtech.jts.geom.MultiPolygon geom) { + MultiPolygon multiPolygon = new MultiPolygon(); + for (int geomIndex = 0; geomIndex < geom.getNumGeometries(); geomIndex++) { + org.locationtech.jts.geom.Polygon polygon = (org.locationtech.jts.geom.Polygon) geom + .getGeometryN(geomIndex); + multiPolygon.addLinearRing(linearRings(polygon)); + } + return multiPolygon; + } + + private static LineString geometry(org.locationtech.jts.geom.LineString geom) { + LineStringCoordinates coordinates = lineStringCoordinates(geom); + return new LineString().coordinates(coordinates); + } + + private static Polygon geometry(org.locationtech.jts.geom.LinearRing ring) { + List<LinearRing> linearRings = Collections.singletonList(linearRing(ring)); + return new Polygon().linearRings(linearRings); + } + + private static Polygon geometry(org.locationtech.jts.geom.Polygon polygon) { + List<LinearRing> linearRings = linearRings(polygon); + return new Polygon().linearRings(linearRings); + } + + private static Point geometry(org.locationtech.jts.geom.Point point) { + return new Point().position(position(point)); + } + + private static List<LinearRing> linearRings(org.locationtech.jts.geom.Polygon polygon) { + List<LinearRing> linearRings = new ArrayList<>(); + linearRings.add(linearRing(polygon.getExteriorRing())); + for (int ringIndex = 0; ringIndex < polygon.getNumInteriorRing(); ringIndex++) { + linearRings.add(linearRing(polygon.getInteriorRingN(ringIndex))); + } + return linearRings; + } + + private static LinearRing linearRing(org.locationtech.jts.geom.LinearRing ring) { + LinearRing linearRing = new LinearRing(); + Arrays.stream(ring.getCoordinates()).forEach(controlPoint -> linearRing.add(position(controlPoint))); + return linearRing; + } + + private static LineStringCoordinates lineStringCoordinates(org.locationtech.jts.geom.LineString geom) { + LineStringCoordinates coordinates = new LineStringCoordinates(); + Arrays.stream(geom.getCoordinates()).forEach(coordinate -> coordinates.add(position(coordinate))); + return coordinates; + } + + private static Position position(Coordinate coordinate) { + Position position = new Position(); + position.add(BigDecimal.valueOf(coordinate.getX())); + position.add(BigDecimal.valueOf(coordinate.getY())); + return position; + } + + private static Position position(org.locationtech.jts.geom.Point point) { + Position position = new Position(); + position.add(BigDecimal.valueOf(point.getX())); + position.add(BigDecimal.valueOf(point.getY())); + return position; + } + +} diff --git a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/MapPreviewManager.java b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/MapPreviewManager.java index 4df136068..b16541f7c 100644 --- a/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/MapPreviewManager.java +++ b/xplan-core/xplan-core-validator/src/main/java/de/latlon/xplan/validator/wms/MapPreviewManager.java @@ -108,7 +108,7 @@ public class MapPreviewManager { private String createValidatorWmsUrl(String xplanGatewayUrl) { if (!xplanGatewayUrl.endsWith("/")) xplanGatewayUrl = xplanGatewayUrl + "/"; - return xplanGatewayUrl + "xplan-ows/validator"; + return xplanGatewayUrl + "ows/validator"; } } diff --git a/xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/report/geojson/jts/JtsToGeoJsonGeometryBuilderTest.java b/xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/report/geojson/jts/JtsToGeoJsonGeometryBuilderTest.java new file mode 100644 index 000000000..7a21b844b --- /dev/null +++ b/xplan-core/xplan-core-validator/src/test/java/de/latlon/xplan/validator/report/geojson/jts/JtsToGeoJsonGeometryBuilderTest.java @@ -0,0 +1,182 @@ +package de.latlon.xplan.validator.report.geojson.jts; + +import static de.latlon.xplan.validator.report.geojson.model.GeoJsonObject.TypeEnum.GEOMETRYCOLLECTION; +import static de.latlon.xplan.validator.report.geojson.model.GeoJsonObject.TypeEnum.LINESTRING; +import static de.latlon.xplan.validator.report.geojson.model.GeoJsonObject.TypeEnum.MULTILINESTRING; +import static de.latlon.xplan.validator.report.geojson.model.GeoJsonObject.TypeEnum.MULTIPOINT; +import static de.latlon.xplan.validator.report.geojson.model.GeoJsonObject.TypeEnum.MULTIPOLYGON; +import static de.latlon.xplan.validator.report.geojson.model.GeoJsonObject.TypeEnum.POINT; +import static de.latlon.xplan.validator.report.geojson.model.GeoJsonObject.TypeEnum.POLYGON; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +import de.latlon.xplan.validator.report.geojson.model.Geometry; +import de.latlon.xplan.validator.report.geojson.model.GeometryCollection; +import de.latlon.xplan.validator.report.geojson.model.LineString; +import de.latlon.xplan.validator.report.geojson.model.MultiLineString; +import de.latlon.xplan.validator.report.geojson.model.MultiPoint; +import de.latlon.xplan.validator.report.geojson.model.MultiPolygon; +import de.latlon.xplan.validator.report.geojson.model.Point; +import de.latlon.xplan.validator.report.geojson.model.Polygon; +import org.junit.jupiter.api.Test; +import org.locationtech.jts.geom.Coordinate; +import org.locationtech.jts.geom.GeometryFactory; +import org.locationtech.jts.geom.LinearRing; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + */ +public class JtsToGeoJsonGeometryBuilderTest { + + private final GeometryFactory geometryFactory = new GeometryFactory(); + + @Test + public void test_Point() { + org.locationtech.jts.geom.Point point = createPoint(5.4, 10.8); + + Geometry geometry = JtsToGeoJsonGeometryBuilder.createGeometry(point); + assertThat(geometry, instanceOf(Point.class)); + assertThat(geometry.getType(), is(POINT)); + assertThat(((Point) geometry).getPosition().get(0).doubleValue(), is(point.getX())); + assertThat(((Point) geometry).getPosition().get(1).doubleValue(), is(point.getY())); + } + + @Test + public void test_MultiPoint() { + org.locationtech.jts.geom.Point point1 = createPoint(5.4, 10.8); + org.locationtech.jts.geom.Point point2 = createPoint(6.4, 10.5); + org.locationtech.jts.geom.Point[] points = { point1, point2 }; + org.locationtech.jts.geom.MultiPoint multiPoint = geometryFactory.createMultiPoint(points); + + Geometry geometry = JtsToGeoJsonGeometryBuilder.createGeometry(multiPoint); + assertThat(geometry, instanceOf(MultiPoint.class)); + assertThat(geometry.getType(), is(MULTIPOINT)); + assertThat(((MultiPoint) geometry).getPositions().size(), is(2)); + assertThat(((MultiPoint) geometry).getPositions().get(0).get(0).doubleValue(), is(point1.getX())); + assertThat(((MultiPoint) geometry).getPositions().get(0).get(1).doubleValue(), is(point1.getY())); + } + + @Test + public void test_LineString() { + org.locationtech.jts.geom.LineString lineString = createLineString1(); + + Geometry geometry = JtsToGeoJsonGeometryBuilder.createGeometry(lineString); + assertThat(geometry, instanceOf(LineString.class)); + assertThat(geometry.getType(), is(LINESTRING)); + assertThat(((LineString) geometry).getCoordinates().size(), is(3)); + assertThat(((LineString) geometry).getCoordinates().get(0).get(0).doubleValue(), + is(lineString.getCoordinate().getX())); + assertThat(((LineString) geometry).getCoordinates().get(0).get(1).doubleValue(), + is(lineString.getCoordinate().getY())); + } + + @Test + public void test_MultiLineString() { + org.locationtech.jts.geom.LineString lineString1 = createLineString1(); + org.locationtech.jts.geom.LineString lineString2 = createLineString2(); + org.locationtech.jts.geom.LineString[] lineStrings = { lineString1, lineString2 }; + org.locationtech.jts.geom.MultiLineString multiLineString = geometryFactory.createMultiLineString(lineStrings); + + Geometry geometry = JtsToGeoJsonGeometryBuilder.createGeometry(multiLineString); + assertThat(geometry, instanceOf(MultiLineString.class)); + assertThat(geometry.getType(), is(MULTILINESTRING)); + assertThat(((MultiLineString) geometry).getLineStringCoordinates().size(), is(2)); + assertThat(((MultiLineString) geometry).getLineStringCoordinates().get(0).get(0).get(0).doubleValue(), + is(lineString1.getCoordinates()[0].getX())); + assertThat(((MultiLineString) geometry).getLineStringCoordinates().get(0).get(0).get(1).doubleValue(), + is(lineString1.getCoordinates()[0].getY())); + } + + @Test + public void test_Polygon() { + org.locationtech.jts.geom.Polygon polygon = createPolygon1(); + + Geometry geometry = JtsToGeoJsonGeometryBuilder.createGeometry(polygon); + assertThat(geometry, instanceOf(Polygon.class)); + assertThat(geometry.getType(), is(POLYGON)); + assertThat(((Polygon) geometry).getLinearRings().size(), is(1)); + assertThat(((Polygon) geometry).getLinearRings().get(0).size(), is(5)); + + assertThat(((Polygon) geometry).getLinearRings().get(0).get(0).get(0).doubleValue(), + is(polygon.getExteriorRing().getCoordinates()[0].getX())); + assertThat(((Polygon) geometry).getLinearRings().get(0).get(0).get(1).doubleValue(), + is(polygon.getExteriorRing().getCoordinates()[0].getY())); + } + + @Test + public void test_MultiPolygon() { + org.locationtech.jts.geom.Polygon polygon1 = createPolygon1(); + org.locationtech.jts.geom.Polygon polygon2 = createPolygon1(); + org.locationtech.jts.geom.Polygon[] polygons = { polygon1, polygon2 }; + org.locationtech.jts.geom.MultiPolygon multiPolygon = geometryFactory.createMultiPolygon(polygons); + + Geometry geometry = JtsToGeoJsonGeometryBuilder.createGeometry(multiPolygon); + assertThat(geometry, instanceOf(MultiPolygon.class)); + assertThat(geometry.getType(), is(MULTIPOLYGON)); + assertThat(((MultiPolygon) geometry).getLinearRings().size(), is(2)); + assertThat(((MultiPolygon) geometry).getLinearRings().get(0).size(), is(1)); + assertThat(((MultiPolygon) geometry).getLinearRings().get(0).get(0).size(), is(5)); + + assertThat(((MultiPolygon) geometry).getLinearRings().get(0).get(0).get(0).get(0).doubleValue(), is( + ((org.locationtech.jts.geom.Polygon) multiPolygon.getGeometryN(0)).getExteriorRing().getCoordinates()[1] + .getX())); + assertThat(((MultiPolygon) geometry).getLinearRings().get(0).get(0).get(0).get(1).doubleValue(), is( + ((org.locationtech.jts.geom.Polygon) multiPolygon.getGeometryN(0)).getExteriorRing().getCoordinates()[0] + .getY())); + } + + @Test + public void test_GeometryCollection() { + org.locationtech.jts.geom.Point point1 = createPoint(5.4, 10.8); + org.locationtech.jts.geom.LineString lineString1 = createLineString1(); + org.locationtech.jts.geom.Polygon polygon1 = createPolygon1(); + org.locationtech.jts.geom.Geometry[] geoms = { point1, lineString1, polygon1 }; + org.locationtech.jts.geom.GeometryCollection multiGeometry = geometryFactory.createGeometryCollection(geoms); + + Geometry geometry = JtsToGeoJsonGeometryBuilder.createGeometry(multiGeometry); + assertThat(geometry, instanceOf(GeometryCollection.class)); + assertThat(geometry.getType(), is(GEOMETRYCOLLECTION)); + assertThat(((GeometryCollection) geometry).getGeometries().size(), is(3)); + assertThat(((GeometryCollection) geometry).getGeometries().get(0), instanceOf(Point.class)); + assertThat(((GeometryCollection) geometry).getGeometries().get(0).getType(), is(POINT)); + assertThat(((GeometryCollection) geometry).getGeometries().get(1), instanceOf(LineString.class)); + assertThat(((GeometryCollection) geometry).getGeometries().get(1).getType(), is(LINESTRING)); + assertThat(((GeometryCollection) geometry).getGeometries().get(2), instanceOf(Polygon.class)); + assertThat(((GeometryCollection) geometry).getGeometries().get(2).getType(), is(POLYGON)); + + assertThat(((Point) ((GeometryCollection) geometry).getGeometries().get(0)).getPosition().get(0).doubleValue(), + is(point1.getX())); + assertThat(((Point) ((GeometryCollection) geometry).getGeometries().get(0)).getPosition().get(1).doubleValue(), + is(point1.getY())); + } + + private org.locationtech.jts.geom.LineString createLineString1() { + org.locationtech.jts.geom.Coordinate[] coordinates = { createCoordinate(5.7, 10.9), createCoordinate(5.7, 11.9), + createCoordinate(5.8, 12.9) }; + return geometryFactory.createLineString(coordinates); + } + + private org.locationtech.jts.geom.LineString createLineString2() { + org.locationtech.jts.geom.Coordinate[] coordinates = { createCoordinate(4.7, 12.9), createCoordinate(4.7, 13.9), + createCoordinate(4.8, 11.9) }; + return geometryFactory.createLineString(coordinates); + } + + private org.locationtech.jts.geom.Polygon createPolygon1() { + org.locationtech.jts.geom.Coordinate[] coordinates = { createCoordinate(5.7, 10.9), createCoordinate(5.7, 11.9), + createCoordinate(5.8, 12.9), createCoordinate(5.7, 11.9), createCoordinate(5.7, 10.9) }; + LinearRing interior = geometryFactory.createLinearRing(coordinates); + return geometryFactory.createPolygon(interior); + } + + private org.locationtech.jts.geom.Point createPoint(double x, double y) { + Coordinate coordinate = new Coordinate(x, y); + return geometryFactory.createPoint(coordinate); + } + + private org.locationtech.jts.geom.Coordinate createCoordinate(double x, double y) { + return new Coordinate(x, y); + } + +} diff --git a/xplan-database/xplan-database-scripts/Dockerfile b/xplan-database/xplan-database-scripts/Dockerfile index 60f34443e..6faa86b7b 100644 --- a/xplan-database/xplan-database-scripts/Dockerfile +++ b/xplan-database/xplan-database-scripts/Dockerfile @@ -20,6 +20,7 @@ LABEL "org.opencontainers.image.created"="$BUILD_DATE" \ ENV LC_ALL= \ LC_TIME=en_US \ TZ=Europe/Berlin \ + LIQUIBASE_ANALYTICS_ENABLED=false \ XPLAN_DB_INIT_PASSWORD=define-me \ XPLAN_DB_INIT_USER=define-me \ XPLAN_DB_USER=define-me \ diff --git a/xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/UpdateGeltungsbereichCustomChange.java b/xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/UpdateGeltungsbereichCustomChange.java new file mode 100644 index 000000000..23c43db2b --- /dev/null +++ b/xplan-database/xplan-database-scripts/src/main/java/de/latlon/xplanbox/database/scripts/custom/v80/UpdateGeltungsbereichCustomChange.java @@ -0,0 +1,99 @@ +package de.latlon.xplanbox.database.scripts.custom.v80; + +import java.sql.PreparedStatement; +import java.sql.SQLException; + +import liquibase.Scope; +import liquibase.change.custom.CustomTaskChange; +import liquibase.database.Database; +import liquibase.database.jvm.JdbcConnection; +import liquibase.exception.CustomChangeException; +import liquibase.exception.DatabaseException; +import liquibase.exception.SetupException; +import liquibase.exception.ValidationErrors; +import liquibase.resource.ResourceAccessor; + +/** + * Insert simplified and transformed (WGS894) geltungsbereich into + * xplanmgr.geltungsbereich. + * + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class UpdateGeltungsbereichCustomChange implements CustomTaskChange { + + @Override + public void execute(Database database) throws CustomChangeException { + JdbcConnection dbConn = (JdbcConnection) database.getConnection(); + try { + Scope.getCurrentScope().getLog(getClass()).info("Insert in xplanmgr.geltungsbereich."); + String insertSql = "INSERT INTO xplanmgr.geltungsbereich (id,geltungsbereichwgs84) " + + "SELECT xplan_mgr_planid as id, ST_Transform(xplan_raeumlichergeltungsbereich,4326) as geltungsbereich " + // BP + + "FROM" + + " (SELECT f.xplan_mgr_planid,f.xplan_raeumlichergeltungsbereich FROM xplansyn.xplan_bp_plan f) bpfix " + + "NATURAL FULL JOIN" + + " (SELECT p.xplan_mgr_planid,p.xplan_raeumlichergeltungsbereich FROM xplansynpre.xplan_bp_plan p) bppre " + + "NATURAL FULL JOIN" + + " (SELECT a.xplan_mgr_planid,a.xplan_raeumlichergeltungsbereich FROM xplansynarchive.xplan_bp_plan a) bparchive " + // FP + + "NATURAL FULL JOIN" + + " (SELECT f.xplan_mgr_planid,f.xplan_raeumlichergeltungsbereich FROM xplansyn.xplan_fp_plan f) fpfix " + + "NATURAL FULL JOIN" + + " (SELECT p.xplan_mgr_planid,p.xplan_raeumlichergeltungsbereich FROM xplansynpre.xplan_fp_plan p) fppre " + + "NATURAL FULL JOIN" + + " (SELECT a.xplan_mgr_planid,a.xplan_raeumlichergeltungsbereich FROM xplansynarchive.xplan_fp_plan a) fparchive " + // RP + + "NATURAL FULL JOIN" + + " (SELECT f.xplan_mgr_planid,f.xplan_raeumlichergeltungsbereich FROM xplansyn.xplan_rp_plan f) rpfix " + + "NATURAL FULL JOIN" + + " (SELECT p.xplan_mgr_planid,p.xplan_raeumlichergeltungsbereich FROM xplansynpre.xplan_rp_plan p) rppre " + + "NATURAL FULL JOIN" + + " (SELECT a.xplan_mgr_planid,a.xplan_raeumlichergeltungsbereich FROM xplansynarchive.xplan_rp_plan a) rparchive " + // LP + + "NATURAL FULL JOIN" + + " (SELECT f.xplan_mgr_planid,f.xplan_raeumlichergeltungsbereich FROM xplansyn.xplan_lp_plan f) lpfix " + + "NATURAL FULL JOIN" + + " (SELECT p.xplan_mgr_planid,p.xplan_raeumlichergeltungsbereich FROM xplansynpre.xplan_lp_plan p) lppre " + + "NATURAL FULL JOIN" + + " (SELECT a.xplan_mgr_planid,a.xplan_raeumlichergeltungsbereich FROM xplansynarchive.xplan_lp_plan a) lparchive " + // SO + + "NATURAL FULL JOIN" + + " (SELECT f.xplan_mgr_planid,f.xplan_raeumlichergeltungsbereich FROM xplansyn.xplan_so_plan f) sofix " + + "NATURAL FULL JOIN" + + " (SELECT p.xplan_mgr_planid,p.xplan_raeumlichergeltungsbereich FROM xplansynpre.xplan_so_plan p) sopre " + + "NATURAL FULL JOIN" + + " (SELECT a.xplan_mgr_planid,a.xplan_raeumlichergeltungsbereich FROM xplansynarchive.xplan_so_plan a) soarchive " + + "ON CONFLICT ON CONSTRAINT id_unique DO NOTHING"; + PreparedStatement psInsert = dbConn.prepareStatement(insertSql); + int noOfInserted = psInsert.executeUpdate(); + Scope.getCurrentScope() + .getLog(getClass()) + .info("Inserted " + noOfInserted + " in xplanmgr.geltungsbereich."); + } + catch (SQLException | DatabaseException e) { + throw new CustomChangeException(e); + } + } + + @Override + public String getConfirmationMessage() { + return "Updated geltungsbereich"; + } + + @Override + public void setUp() throws SetupException { + + } + + @Override + public void setFileOpener(ResourceAccessor resourceAccessor) { + + } + + @Override + public ValidationErrors validate(Database database) { + return new ValidationErrors(); + } + +} diff --git a/xplan-database/xplan-database-scripts/src/main/resources/8.0/changelog_xplanmgr.yaml b/xplan-database/xplan-database-scripts/src/main/resources/8.0/changelog_xplanmgr.yaml index 6be3e4bc4..daab40139 100644 --- a/xplan-database/xplan-database-scripts/src/main/resources/8.0/changelog_xplanmgr.yaml +++ b/xplan-database/xplan-database-scripts/src/main/resources/8.0/changelog_xplanmgr.yaml @@ -39,11 +39,11 @@ databaseChangeLog: id: xplanmgr80-002 author: latlon changes: - - modifyDataType: - columnName: import_date - newDataType: TIMESTAMP WITH TIME ZONE - schemaName: xplanmgr - tableName: plans + - modifyDataType: + columnName: import_date + newDataType: TIMESTAMP WITH TIME ZONE + schemaName: xplanmgr + tableName: plans - changeSet: id: xplanmgr80-003 author: latlon @@ -80,3 +80,49 @@ databaseChangeLog: changes: - customChange: { "class": "de.latlon.xplanbox.database.scripts.custom.v80.UpdateGemeindenCustomChange" } + - changeSet: + id: xplanmgr80-005 + author: latlon + changes: + - createTable: + columns: + - column: + name: id + type: INTEGER + - column: + name: geltungsbereichwgs84 + type: GEOMETRY + remarks: Linearized Geltungsbereich of the plan in WGS84 + remarks: Plan geltungsbereich + schemaName: xplanmgr + tableName: geltungsbereich + - addUniqueConstraint: + constraintName: id_unique + columnNames: id + schemaName: xplanmgr + tableName: geltungsbereich + deferrable: false + - sql: + sql: GRANT SELECT, INSERT, UPDATE, DELETE ON xplanmgr.geltungsbereich TO "${xplan.db.user}"; + - sql: "CREATE OR REPLACE FUNCTION xplanmgr.xplanmgr_geltungsbereich() RETURNS trigger AS ' BEGIN IF TG_OP = ''INSERT'' THEN INSERT INTO xplanmgr.geltungsbereich (id,geltungsbereichwgs84) VALUES(NEW.xplan_mgr_planid, ST_Transform(NEW.xplan_raeumlichergeltungsbereich,4326)) ON CONFLICT ON CONSTRAINT id_unique DO NOTHING; RETURN NEW; END IF; END; ' LANGUAGE plpgsql;" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_bp_fix AFTER INSERT ON xplansyn.xplan_bp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_bp_pre AFTER INSERT ON xplansynpre.xplan_bp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_bp_archive AFTER INSERT ON xplansynarchive.xplan_bp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_fp_fix AFTER INSERT ON xplansyn.xplan_fp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_fp_pre AFTER INSERT ON xplansynpre.xplan_fp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_fp_archive AFTER INSERT ON xplansynarchive.xplan_fp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_rp_fix AFTER INSERT ON xplansyn.xplan_rp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_rp_pre AFTER INSERT ON xplansynpre.xplan_rp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_rp_archive AFTER INSERT ON xplansynarchive.xplan_rp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_lp_fix AFTER INSERT ON xplansyn.xplan_lp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_lp_pre AFTER INSERT ON xplansynpre.xplan_lp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_lp_archive AFTER INSERT ON xplansynarchive.xplan_lp_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_so_fix AFTER INSERT ON xplansyn.xplan_so_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_so_pre AFTER INSERT ON xplansynpre.xplan_so_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - sql: "CREATE TRIGGER xplanmgr_geltungsbereich_so_archive AFTER INSERT ON xplansynarchive.xplan_so_plan FOR EACH ROW EXECUTE PROCEDURE xplanmgr.xplanmgr_geltungsbereich();" + - changeSet: + id: xplanmgr80-006 + author: latlon + changes: + - customChange: { + "class": "de.latlon.xplanbox.database.scripts.custom.v80.UpdateGeltungsbereichCustomChange" } diff --git a/xplan-docker/xplan-docker-volume-init/setupVolumes.sh b/xplan-docker/xplan-docker-volume-init/setupVolumes.sh index 351427721..de0e99f79 100755 --- a/xplan-docker/xplan-docker-volume-init/setupVolumes.sh +++ b/xplan-docker/xplan-docker-volume-init/setupVolumes.sh @@ -119,7 +119,7 @@ sed -i 's|localhost:5432/xplanbox|'$XPLAN_DB'|g' xplan-workspaces/xplan-manager- sed -i 's|name="username" value="xplanbox"|name="username" value="'$XPLAN_DB_USER'"|g' xplan-workspaces/xplan-manager-workspace/jdbc/inspireplucp.xml sed -i 's|name="password" value="xplanbox"|name="password" value="'$XPLAN_DB_PASSWORD'"|g' xplan-workspaces/xplan-manager-workspace/jdbc/inspireplucp.xml -sed -i 's|http://localhost:8080/xplan-ows|'$XPLAN_GATEWAY_URL_PUBLIC'/xplan-ows|g' xplan-workspaces/xplan-services-wms-workspace/services/html.gfi +sed -i 's|http://localhost:8080/xplan-gateway/ows|'$XPLAN_GATEWAY_URL_PUBLIC'/ows|g' xplan-workspaces/xplan-services-wms-workspace/services/html.gfi sed -i 's|localhost:5432/xplanbox|'$XPLAN_DB'|g' xplan-inspireplu-workspaces/xplan-webservices-inspireplu-workspace/jdbc/inspireplu.xml sed -i 's|name="username" value="xplanbox"|name="username" value="'$XPLAN_DB_USER'"|g' xplan-inspireplu-workspaces/xplan-webservices-inspireplu-workspace/jdbc/inspireplu.xml diff --git a/xplan-gateway/README.md b/xplan-gateway/README.md index 156cd2e28..9edf3458f 100644 --- a/xplan-gateway/README.md +++ b/xplan-gateway/README.md @@ -18,7 +18,7 @@ Folgende Umgebungsvariable können für die Konfiguration der Anwendung verwende - `XPLAN_MAPPROXY_URL_INTERNAL`: die interne root Url von `xplan-mapproxy` (Default: `http://xplan-mapproxy:8080`) - `XPLAN_MAPSERVER_URL_INTERNAL`: die interne root Url von `xplan-mapserver` (Default: `http://xplan-mapserver:8080`) - `XPLAN_SERVICES_URL_INTERNAL`: die interne root Url von `xplan-services` (Default: `http://xplan-services`) -- `XPLAN_VALIDATOR_WMS_URL_INTERNAL`: die interne root Url von `xplan-services` (Default: `http://xplan-validator-wms:8080`) +- `XPLAN_VALIDATOR_WMS_URL_INTERNAL`: die interne root Url von `xplan-services` (Default: `http://xplan-validator-wms`) ## Technische Endpoints diff --git a/xplan-gateway/pom.xml b/xplan-gateway/pom.xml index 44f747e3e..caeedb824 100755 --- a/xplan-gateway/pom.xml +++ b/xplan-gateway/pom.xml @@ -1,134 +1,143 @@ <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <artifactId>xplan-gateway</artifactId> - <packaging>war</packaging> + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <artifactId>xplan-gateway</artifactId> + <packaging>war</packaging> - <parent> - <groupId>de.latlon.product.xplanbox</groupId> - <artifactId>xplanbox</artifactId> - <version>8.0-SNAPSHOT</version> - </parent> - - <build> - <resources> - <resource> - <directory>src/main/resources</directory> - <filtering>true</filtering> - <includes> - <include>**/build-info.properties</include> - </includes> - </resource> - <resource> - <directory>src/main/resources</directory> - <filtering>false</filtering> - <excludes> - <exclude>**/build-info.properties</exclude> - </excludes> - </resource> - </resources> - <plugins> - <plugin> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-maven-plugin</artifactId> - <configuration> - <classifier>repackaged</classifier> - </configuration> - <executions> - <execution> - <goals> - <goal>repackage</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin><!-- redeclare here to run *after* spring-boot repackage --> - <groupId>io.fabric8</groupId> - <artifactId>docker-maven-plugin</artifactId> - <executions> - <execution> - <id>context-sources</id> - <goals> - <goal>source</goal> - </goals> - <configuration> - <skip>${docker-image.skip-sources}</skip> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <configuration> - <archive> - <manifest> - <addDefaultImplementationEntries>true</addDefaultImplementationEntries> - </manifest> - </archive> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-war-plugin</artifactId> - <configuration> - <failOnMissingWebXml>false</failOnMissingWebXml> - <archive> - <manifest> - <addDefaultImplementationEntries>true</addDefaultImplementationEntries> - </manifest> - </archive> - </configuration> - </plugin> - </plugins> - </build> + <parent> + <groupId>de.latlon.product.xplanbox</groupId> + <artifactId>xplanbox</artifactId> + <version>8.0-SNAPSHOT</version> + </parent> - <dependencies> - <dependency> - <groupId>org.springframework.cloud</groupId> - <artifactId>spring-cloud-starter-gateway</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-actuator</artifactId> - <exclusions> - <exclusion> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-logging</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-log4j2</artifactId> - </dependency> - <dependency> - <groupId>com.fasterxml.jackson.dataformat</groupId> - <artifactId>jackson-dataformat-yaml</artifactId> - </dependency> - <dependency> - <groupId>org.apache.logging.log4j</groupId> - <artifactId>log4j-layout-template-json</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-thymeleaf</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - </dependency> - </dependencies> + <build> + <resources> + <resource> + <directory>src/main/resources</directory> + <filtering>true</filtering> + <includes> + <include>**/build-info.properties</include> + </includes> + </resource> + <resource> + <directory>src/main/resources</directory> + <filtering>false</filtering> + <excludes> + <exclude>**/build-info.properties</exclude> + </excludes> + </resource> + </resources> + <plugins> + <plugin> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-maven-plugin</artifactId> + <configuration> + <classifier>repackaged</classifier> + </configuration> + <executions> + <execution> + <goals> + <goal>repackage</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin><!-- redeclare here to run *after* spring-boot repackage --> + <groupId>io.fabric8</groupId> + <artifactId>docker-maven-plugin</artifactId> + <executions> + <execution> + <id>context-sources</id> + <goals> + <goal>source</goal> + </goals> + <configuration> + <skip>${docker-image.skip-sources}</skip> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifest> + <addDefaultImplementationEntries>true</addDefaultImplementationEntries> + </manifest> + </archive> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-war-plugin</artifactId> + <configuration> + <failOnMissingWebXml>false</failOnMissingWebXml> + <archive> + <manifest> + <addDefaultImplementationEntries>true</addDefaultImplementationEntries> + </manifest> + </archive> + </configuration> + </plugin> + </plugins> + </build> + + <dependencies> + <dependency> + <groupId>de.latlon</groupId> + <artifactId>deegree-core-commons</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.cloud</groupId> + <artifactId>spring-cloud-starter-gateway</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-actuator</artifactId> + <exclusions> + <exclusion> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-logging</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-log4j2</artifactId> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.dataformat</groupId> + <artifactId>jackson-dataformat-yaml</artifactId> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-layout-template-json</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-thymeleaf</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <scope>test</scope> + </dependency> + </dependencies> <profiles> <profile> <id>docker</id> <properties> <docker-image.skip>false</docker-image.skip> - <docker-contextTarFile.expectedSizeInMat10pct>38</docker-contextTarFile.expectedSizeInMat10pct> + <docker-contextTarFile.expectedSizeInMat10pct>56</docker-contextTarFile.expectedSizeInMat10pct> </properties> <dependencies> <dependency> <!-- faked maven dependency to be after base docker image in the reactor build --> diff --git a/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/Configuration.java b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/Configuration.java index 8770e8640..ae130ea3c 100644 --- a/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/Configuration.java +++ b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/Configuration.java @@ -34,6 +34,9 @@ import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; import org.springframework.context.annotation.Bean; import org.springframework.web.server.ServerWebExchange; +import de.latlon.xplanbox.gateway.filter.dcp.DcpCapabilitiesResponseFilter; +import de.latlon.xplanbox.gateway.filter.rest.WmtsRestCapabilitiesResponseFilter; + /** * @author <a href="mailto:guillemot@lat-lon.de">Marc Guillemot</a> * @since 8.0 @@ -62,210 +65,425 @@ public class Configuration { public RouteLocator customRouteLocator(RouteLocatorBuilder builder) { return builder.routes() // xplan-validator-wms: - // /xplan-ows/validator?SERVICE=WMS -> /xplan-validator-wms/services/wms - .route("/xplan-ows/validator?SERVICE=WMS -> /xplan-validator-wms/services/wms", r -> r - .asyncPredicate(caseInsensitiveServiceParam("WMS")) - .and() - .path(contextPath + "/xplan-ows/validator") - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/validator", "/xplan-validator-wms/services/wms")) - .uri(backendXplanValidatorWms)) + // /ows/validator?SERVICE=WMS -> /xplan-validator-wms/services/wms + .route("/ows/validator?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-validator-wms/services/wms", + r -> r.asyncPredicate(caseInsensitiveServiceParam("WMS").and(caseInsensitiveCapabilitiesParam())) + .and() + .path(contextPath + "/ows/validator") + .filters(f -> f.rewritePath(contextPath + "/ows/validator", "/xplan-validator-wms/services/wms") + .modifyResponseBody(String.class, String.class, + (exchange, bodyAsString) -> DcpCapabilitiesResponseFilter + .filterCapabilities(exchange, bodyAsString, urlWithoutQuery(exchange)))) + .uri(backendXplanValidatorWms)) + .route("/ows/validator?SERVICE=WMS -> /xplan-validator-wms/services/wms", + r -> r.asyncPredicate(caseInsensitiveServiceParam("WMS")) + .and() + .path(contextPath + "/ows/validator") + .filters( + f -> f.rewritePath(contextPath + "/ows/validator", "/xplan-validator-wms/services/wms")) + .uri(backendXplanValidatorWms)) // xplan-services: // getAttachment - temporal route until GetAttachmentHandler is removed - // /xplan-ows/getAttachment -> /xplan-wms/getAttachment - .route("/xplan-ows/getAttachment -> /xplan-wms/getAttachment", r -> r - .path(contextPath + "/xplan-ows/getAttachment") - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/getAttachment", "/xplan-wms/getAttachment")) - .uri(backendXplanServices)) - // /xplan-ows/syn?SERVICE=WMS -> /xplan-wms/services/wms - .route("/xplan-ows/syn?SERVICE=WMS -> /xplan-wms/services/wms", - pathWithWmsServiceToUri("/xplan-ows/syn", "/xplan-wms/services/wms")) - // /xplan-ows/syn-pre?SERVICE=WMS -> /xplan-wms/services/wmspre - .route("/xplan-ows/syn-pre?SERVICE=WMS -> /xplan-wms/services/wmspre", - pathWithWmsServiceToUri("/xplan-ows/syn-pre", "/xplan-wms/services/wmspre")) - // /xplan-ows/syn-archive?SERVICE=WMS-> /xplan-wms/services/wmsarchive - .route("/xplan-ows/syn-archive?SERVICE=WMS -> /xplan-wms/services/wmsarchive", - pathWithWmsServiceToUri("/xplan-ows/syn-archive", "/xplan-wms/services/wmsarchive")) - // /xplan-ows/syn/planart/bp?SERVICE=WMS -> /xplan-wms/services/bpwms (analog: + // /ows/getAttachment -> /xplan-wms/getAttachment + .route("/ows/getAttachment -> /xplan-wms/getAttachment", + r -> r.path(contextPath + "/ows/getAttachment") + .filters(f -> f.rewritePath(contextPath + "/ows/getAttachment", "/xplan-wms/getAttachment")) + .uri(backendXplanServices)) + // /ows/syn?SERVICE=WMS -> /xplan-wms/services/wms + .route("/ows/syn?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/wms", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn", "/xplan-wms/services/wms")) + .route("/ows/syn?SERVICE=WMS -> /xplan-wms/services/wms", + pathWithWmsServiceToUri("/ows/syn", "/xplan-wms/services/wms")) + // /ows/syn-pre?SERVICE=WMS -> /xplan-wms/services/wmspre + .route("/ows/syn-pre?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/wmspre", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-pre", "/xplan-wms/services/wmspre")) + .route("/ows/syn-pre?SERVICE=WMS -> /xplan-wms/services/wmspre", + pathWithWmsServiceToUri("/ows/syn-pre", "/xplan-wms/services/wmspre")) + // /ows/syn-archive?SERVICE=WMS-> /xplan-wms/services/wmsarchive + .route("/ows/syn-archive?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/wmsarchive", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-archive", + "/xplan-wms/services/wmsarchive")) + .route("/ows/syn-archive?SERVICE=WMS -> /xplan-wms/services/wmsarchive", + pathWithWmsServiceToUri("/ows/syn-archive", "/xplan-wms/services/wmsarchive")) + // /ows/syn/planart/bp?SERVICE=WMS -> /xplan-wms/services/bpwms (analog: // fpwms, lpwms, rpwms, sowms) - .route("/xplan-ows/syn/planart/bp?SERVICE=WMS -> /xplan-wms/services/bpwms", - pathWithWmsServiceToUri("/xplan-ows/syn/planart/bp", "/xplan-wms/services/bpwms")) - .route("/xplan-ows/syn/planart/fp?SERVICE=WMS -> /xplan-wms/services/fpwms", - pathWithWmsServiceToUri("/xplan-ows/syn/planart/fp", "/xplan-wms/services/fpwms")) - .route("/xplan-ows/syn/planart/lp?SERVICE=WMS -> /xplan-wms/services/lpwms", - pathWithWmsServiceToUri("/xplan-ows/syn/planart/lp", "/xplan-wms/services/lpwms")) - .route("/xplan-ows/syn/planart/rp?SERVICE=WMS -> /xplan-wms/services/rpwms", - pathWithWmsServiceToUri("/xplan-ows/syn/planart/rp", "/xplan-wms/services/rpwms")) - .route("/xplan-ows/syn/planart/so?SERVICE=WMS -> /xplan-wms/services/sowms", - pathWithWmsServiceToUri("/xplan-ows/syn/planart/so", "/xplan-wms/services/sowms")) - // /xplan-ows/syn-pre/planart/bp?SERVICE=WMS -> /xplan-wms/services/bpwmspre + .route("/ows/syn/planart/bp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/bpwms", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn/planart/bp", + "/xplan-wms/services/bpwms")) + .route("/ows/syn/planart/bp?SERVICE=WMS -> /xplan-wms/services/bpwms", + pathWithWmsServiceToUri("/ows/syn/planart/bp", "/xplan-wms/services/bpwms")) + .route("/ows/syn/planart/fp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/fpwms", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn/planart/fp", + "/xplan-wms/services/fpwms")) + .route("/ows/syn/planart/fp?SERVICE=WMS -> /xplan-wms/services/fpwms", + pathWithWmsServiceToUri("/ows/syn/planart/fp", "/xplan-wms/services/fpwms")) + .route("/ows/syn/planart/lp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/lpwms", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn/planart/lp", + "/xplan-wms/services/lpwms")) + .route("/ows/syn/planart/lp?SERVICE=WMS -> /xplan-wms/services/lpwms", + pathWithWmsServiceToUri("/ows/syn/planart/lp", "/xplan-wms/services/lpwms")) + .route("/ows/syn/planart/rp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/rpwms", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn/planart/rp", + "/xplan-wms/services/rpwms")) + .route("/ows/syn/planart/rp?SERVICE=WMS -> /xplan-wms/services/rpwms", + pathWithWmsServiceToUri("/ows/syn/planart/rp", "/xplan-wms/services/rpwms")) + .route("/ows/syn/planart/so?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/sowms", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn/planart/so", + "/xplan-wms/services/sowms")) + .route("/ows/syn/planart/so?SERVICE=WMS -> /xplan-wms/services/sowms", + pathWithWmsServiceToUri("/ows/syn/planart/so", "/xplan-wms/services/sowms")) + // /ows/syn-pre/planart/bp?SERVICE=WMS -> /xplan-wms/services/bpwmspre // (analog: fpwmspre, lpwmspre, rpwmspre, sowmspre) - .route("/xplan-ows/syn-pre/planart/bp?SERVICE=WMS -> /xplan-wms/services/bpwmspre", - pathWithWmsServiceToUri("/xplan-ows/syn-pre/planart/bp", "/xplan-wms/services/bpwmspre")) - .route("/xplan-ows/syn-pre/planart/fp?SERVICE=WMS -> /xplan-wms/services/fpwmspre", - pathWithWmsServiceToUri("/xplan-ows/syn-pre/planart/fp", "/xplan-wms/services/fpwmspre")) - .route("/xplan-ows/syn-pre/planart/lp?SERVICE=WMS -> /xplan-wms/services/lpwmspre", - pathWithWmsServiceToUri("/xplan-ows/syn-pre/planart/lp", "/xplan-wms/services/lpwmspre")) - .route("/xplan-ows/syn-pre/planart/rp?SERVICE=WMS -> /xplan-wms/services/rpwmspre", - pathWithWmsServiceToUri("/xplan-ows/syn-pre/planart/rp", "/xplan-wms/services/rpwmspre")) - .route("/xplan-ows/syn-pre/planart/so?SERVICE=WMS -> /xplan-wms/services/sowmspre", - pathWithWmsServiceToUri("/xplan-ows/syn-pre/planart/so", "/xplan-wms/services/sowmspre")) - - // /xplan-ows/syn-archive/planart/bp?SERVICE=WMS -> + .route("/ows/syn-pre/planart/bp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/bpwmspre", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-pre/planart/bp", + "/xplan-wms/services/bpwmspre")) + .route("/ows/syn-pre/planart/bp?SERVICE=WMS -> /xplan-wms/services/bpwmspre", + pathWithWmsServiceToUri("/ows/syn-pre/planart/bp", "/xplan-wms/services/bpwmspre")) + .route("/ows/syn-pre/planart/fp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/fpwmspre", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-pre/planart/fp", + "/xplan-wms/services/fpwmspre")) + .route("/ows/syn-pre/planart/fp?SERVICE=WMS -> /xplan-wms/services/fpwmspre", + pathWithWmsServiceToUri("/ows/syn-pre/planart/fp", "/xplan-wms/services/fpwmspre")) + .route("/ows/syn-pre/planart/lp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/lpwmspre", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-pre/planart/lp", + "/xplan-wms/services/lpwmspre")) + .route("/ows/syn-pre/planart/lp?SERVICE=WMS -> /xplan-wms/services/lpwmspre", + pathWithWmsServiceToUri("/ows/syn-pre/planart/lp", "/xplan-wms/services/lpwmspre")) + .route("/ows/syn-pre/planart/rp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/rpwmspre", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-pre/planart/rp", + "/xplan-wms/services/rpwmspre")) + .route("/ows/syn-pre/planart/rp?SERVICE=WMS -> /xplan-wms/services/rpwmspre", + pathWithWmsServiceToUri("/ows/syn-pre/planart/rp", "/xplan-wms/services/rpwmspre")) + .route("/ows/syn-pre/planart/so?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/sowmspre", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-pre/planart/so", + "/xplan-wms/services/sowmspre")) + .route("/ows/syn-pre/planart/so?SERVICE=WMS -> /xplan-wms/services/sowmspre", + pathWithWmsServiceToUri("/ows/syn-pre/planart/so", "/xplan-wms/services/sowmspre")) + + // /ows/syn-archive/planart/bp?SERVICE=WMS -> // /xplan-wms/services/bpwmsarchive (analog: fpwmsarchive, lpwmsarchive, // rpwmsarchive, sowmsarchive) - .route("/xplan-ows/syn-archive/planart/bp?SERVICE=WMS -> /xplan-wms/services/bpwmsarchive", - pathWithWmsServiceToUri("/xplan-ows/syn-archive/planart/bp", "/xplan-wms/services/bpwmsarchive")) - .route("/xplan-ows/syn-archive/planart/fp?SERVICE=WMS -> /xplan-wms/services/fpwmsarchive", - pathWithWmsServiceToUri("/xplan-ows/syn-archive/planart/fp", "/xplan-wms/services/fpwmsarchive")) - .route("/xplan-ows/syn-archive/planart/lp?SERVICE=WMS -> /xplan-wms/services/lpwmsarchive", - pathWithWmsServiceToUri("/xplan-ows/syn-archive/planart/lp", "/xplan-wms/services/lpwmsarchive")) - .route("/xplan-ows/syn-archive/planart/rp?SERVICE=WMS -> /xplan-wms/services/rpwmsarchive", - pathWithWmsServiceToUri("/xplan-ows/syn-archive/planart/rp", "/xplan-wms/services/rpwmsarchive")) - .route("/xplan-ows/syn-archive/planart/so?SERVICE=WMS -> /xplan-wms/services/sowmsarchive", - pathWithWmsServiceToUri("/xplan-ows/syn-archive/planart/so", "/xplan-wms/services/sowmsarchive")) - - // /xplan-ows/syn/planwerk/{planName}?SERVICE=WMS -> + .route("/ows/syn-archive/planart/bp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/bpwmsarchive", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-archive/planart/bp", + "/xplan-wms/services/bpwmsarchive")) + .route("/ows/syn-archive/planart/bp?SERVICE=WMS -> /xplan-wms/services/bpwmsarchive", + pathWithWmsServiceToUri("/ows/syn-archive/planart/bp", "/xplan-wms/services/bpwmsarchive")) + .route("/ows/syn-archive/planart/fp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/fpwmsarchive", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-archive/planart/fp", + "/xplan-wms/services/fpwmsarchive")) + .route("/ows/syn-archive/planart/fp?SERVICE=WMS -> /xplan-wms/services/fpwmsarchive", + pathWithWmsServiceToUri("/ows/syn-archive/planart/fp", "/xplan-wms/services/fpwmsarchive")) + .route("/ows/syn-archive/planart/lp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/lpwmsarchive", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-archive/planart/lp", + "/xplan-wms/services/lpwmsarchive")) + .route("/ows/syn-archive/planart/lp?SERVICE=WMS -> /xplan-wms/services/lpwmsarchive", + pathWithWmsServiceToUri("/ows/syn-archive/planart/lp", "/xplan-wms/services/lpwmsarchive")) + .route("/ows/syn-archive/planart/rp?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/rpwmsarchive", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-archive/planart/rp", + "/xplan-wms/services/rpwmsarchive")) + .route("/ows/syn-archive/planart/rp?SERVICE=WMS -> /xplan-wms/services/rpwmsarchive", + pathWithWmsServiceToUri("/ows/syn-archive/planart/rp", "/xplan-wms/services/rpwmsarchive")) + .route("/ows/syn-archive/planart/so?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/sowmsarchive", + pathWithWmsServiceAndGetCapabilitiesRequestToUri("/ows/syn-archive/planart/so", + "/xplan-wms/services/sowmsarchive")) + .route("/ows/syn-archive/planart/so?SERVICE=WMS -> /xplan-wms/services/sowmsarchive", + pathWithWmsServiceToUri("/ows/syn-archive/planart/so", "/xplan-wms/services/sowmsarchive")) + + // /ows/syn/planwerk/{planName}?SERVICE=WMS -> // /xplan-wms/services/planwerkwms/planname/{planName} - .route("/xplan-ows/syn/planwerk/{planName}?SERVICE=WMS -> /xplan-wms/services/planwerkwms/planname/{planName}", + .route("/ows/syn/planwerk/{planName}?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/planwerkwms/planname/{planName}", + r -> r.asyncPredicate(caseInsensitiveServiceParam("WMS").and(caseInsensitiveCapabilitiesParam())) + .and() + .path(contextPath + "/ows/syn/planwerk/*") + .filters(f -> f + .rewritePath(contextPath + "/ows/syn/planwerk/(?<planName>.*)", + "/xplan-wms/services/planwerkwms/planname/${planName}") + .modifyResponseBody(String.class, String.class, (exchange, bodyAsString) -> { + String urlViaXPlanGateway = urlWithoutQuery(exchange); + return DcpCapabilitiesResponseFilter.filterCapabilities(exchange, bodyAsString, + urlViaXPlanGateway); + })) + .uri(backendXplanServices)) + .route("/ows/syn/planwerk/{planName}?SERVICE=WMS -> /xplan-wms/services/planwerkwms/planname/{planName}", r -> r.asyncPredicate(caseInsensitiveServiceParam("WMS")) .and() - .path(contextPath + "/xplan-ows/syn/planwerk/*") - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/syn/planwerk/(?<planName>.*)", - "/xplan-wms/services/planwerkwms/planname/${planName}")) // + .path(contextPath + "/ows/syn/planwerk/*") + .filters(f -> f.rewritePath(contextPath + "/ows/syn/planwerk/(?<planName>.*)", + "/xplan-wms/services/planwerkwms/planname/${planName}")) .uri(backendXplanServices)) - // /xplan-ows/syn-pre/planwerk/{planName}?SERVICE=WMS -> + // /ows/syn-pre/planwerk/{planName}?SERVICE=WMS -> // /xplan-wms/services/planwerkwmspre/planname/{planName} - .route("/xplan-ows/syn-pre/planwerk/{planName}?SERVICE=WMS -> /xplan-wms/services/planwerkwmspre/planname/{planName}", + .route("/ows/syn-pre/planwerk/{planName}?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/planwerkwmspre/planname/{planName}", + r -> r.asyncPredicate(caseInsensitiveServiceParam("WMS").and(caseInsensitiveCapabilitiesParam())) + .and() + .path(contextPath + "/ows/syn-pre/planwerk/*") + .filters(f -> f + .rewritePath(contextPath + "/ows/syn-pre/planwerk/(?<planName>.*)", + "/xplan-wms/services/planwerkwmspre/planname/${planName}") + .modifyResponseBody(String.class, String.class, (exchange, bodyAsString) -> { + String urlViaXPlanGateway = urlWithoutQuery(exchange); + return DcpCapabilitiesResponseFilter.filterCapabilities(exchange, bodyAsString, + urlViaXPlanGateway); + })) + .uri(backendXplanServices)) + .route("/ows/syn-pre/planwerk/{planName}?SERVICE=WMS -> /xplan-wms/services/planwerkwmspre/planname/{planName}", r -> r.asyncPredicate(caseInsensitiveServiceParam("WMS")) .and() - .path(contextPath + "/xplan-ows/syn-pre/planwerk/*") - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/syn-pre/planwerk/(?<planName>.*)", - "/xplan-wms/services/planwerkwmspre/planname/${planName}")) // + .path(contextPath + "/ows/syn-pre/planwerk/*") + .filters(f -> f.rewritePath(contextPath + "/ows/syn-pre/planwerk/(?<planName>.*)", + "/xplan-wms/services/planwerkwmspre/planname/${planName}")) .uri(backendXplanServices)) - // /xplan-ows/syn-archive/planwerk/{planName}?SERVICE=WMS -> + // /ows/syn-archive/planwerk/{planName}?SERVICE=WMS -> // /xplan-wms/services/planwerkwmsarchive/planname/{planName} - .route("/xplan-ows/syn-archive/planwerk/{planName}?SERVICE=WMS -> /xplan-wms/services/planwerkwmsarchive/planname/{planName}", + .route("/ows/syn-archive/planwerk/{planName}?SERVICE=WMS&REQUEST=GetCapabilities -> /xplan-wms/services/planwerkwmsarchive/planname/{planName}", + r -> r.asyncPredicate(caseInsensitiveServiceParam("WMS").and(caseInsensitiveCapabilitiesParam())) + .and() + .path(contextPath + "/ows/syn-archive/planwerk/*") + .filters(f -> f + .rewritePath(contextPath + "/ows/syn-archive/planwerk/(?<planName>.*)", + "/xplan-wms/services/planwerkwmsarchive/planname/${planName}") + .modifyResponseBody(String.class, String.class, (exchange, bodyAsString) -> { + String urlViaXPlanGateway = urlWithoutQuery(exchange); + return DcpCapabilitiesResponseFilter.filterCapabilities(exchange, bodyAsString, + urlViaXPlanGateway); + })) + .uri(backendXplanServices)) + .route("/ows/syn-archive/planwerk/{planName}?SERVICE=WMS -> /xplan-wms/services/planwerkwmsarchive/planname/{planName}", r -> r.asyncPredicate(caseInsensitiveServiceParam("WMS")) .and() - .path(contextPath + "/xplan-ows/syn-archive/planwerk/*") - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/syn-archive/planwerk/(?<planName>.*)", - "/xplan-wms/services/planwerkwmsarchive/planname/${planName}")) // + .path(contextPath + "/ows/syn-archive/planwerk/*") + .filters(f -> f.rewritePath(contextPath + "/ows/syn-archive/planwerk/(?<planName>.*)", + "/xplan-wms/services/planwerkwmsarchive/planname/${planName}")) .uri(backendXplanServices)) - // /xplan-ows/syn?SERVICE=WFS -> /xplansyn-wfs/services/xplansynwfs - .route("/xplan-ows/syn?SERVICE=WFS -> /xplansyn-wfs/services/xplansynwfs", - pathWithWfsServiceToUri("/xplan-ows/syn", "/xplansyn-wfs/services/xplansynwfs")) - .route("/xplan-ows/syn-pre?SERVICE=WFS -> /xplansyn-wfs/services/xplansynwfspre", - pathWithWfsServiceToUri("/xplan-ows/syn-pre", "/xplansyn-wfs/services/xplansynwfspre")) - // /xplan-ows/syn-archive?SERVICE=WFS -> + // /ows/syn?SERVICE=WFS -> /xplansyn-wfs/services/xplansynwfs + .route("/ows/syn?SERVICE=WFS&REQUEST=GetCapabilities -> /xplansyn-wfs/services/xplansynwfs", + pathWithWfsServiceAndGetCapabilitiesRequestToUri("/ows/syn", "/xplansyn-wfs/services/xplansynwfs")) + .route("/ows/syn?SERVICE=WFS -> /xplansyn-wfs/services/xplansynwfs", + pathWithWfsServiceToUri("/ows/syn", "/xplansyn-wfs/services/xplansynwfs")) + .route("/ows/syn-pre?SERVICE=WFS&REQUEST=GetCapabilities -> /xplansyn-wfs/services/xplansynwfspre", + pathWithWfsServiceAndGetCapabilitiesRequestToUri("/ows/syn-pre", + "/xplansyn-wfs/services/xplansynwfspre")) + .route("/ows/syn-pre?SERVICE=WFS -> /xplansyn-wfs/services/xplansynwfspre", + pathWithWfsServiceToUri("/ows/syn-pre", "/xplansyn-wfs/services/xplansynwfspre")) + // /ows/syn-archive?SERVICE=WFS -> // /xplansyn-wfs/services/xplansynwfsarchive - .route("/xplan-ows/syn-archive?SERVICE=WFS -> /xplansyn-wfs/services/xplansynwfsarchive", - pathWithWfsServiceToUri("/xplan-ows/syn-archive", "/xplansyn-wfs/services/xplansynwfsarchive")) - // /xplan-ows/5.1?SERVICE=WFS etc. -> /xplan-wfs/services/wfs51 (analog: + .route("/ows/syn-archive?SERVICE=WFS&REQUEST=GetCapabilities -> /xplansyn-wfs/services/xplansynwfsarchive", + pathWithWfsServiceAndGetCapabilitiesRequestToUri("/ows/syn-archive", + "/xplansyn-wfs/services/xplansynwfsarchive")) + .route("/ows/syn-archive?SERVICE=WFS -> /xplansyn-wfs/services/xplansynwfsarchive", + pathWithWfsServiceToUri("/ows/syn-archive", "/xplansyn-wfs/services/xplansynwfsarchive")) + // /ows/5.1?SERVICE=WFS etc. -> /xplan-wfs/services/wfs51 (analog: // wfs40,wfs41,wfs50,wfs51,wfs52,wfs53,wfs54,wfs60) - .route("/xplan-ows/4.0?SERVICE=WFS -> /xplan-wfs/services/wfs40", pathWithWfsVersion("4.0")) - .route("/xplan-ows/4.1?SERVICE=WFS -> /xplan-wfs/services/wfs41", pathWithWfsVersion("4.1")) - .route("/xplan-ows/5.0?SERVICE=WFS -> /xplan-wfs/services/wfs50", pathWithWfsVersion("5.0")) - .route("/xplan-ows/5.1?SERVICE=WFS -> /xplan-wfs/services/wfs51", pathWithWfsVersion("5.1")) - .route("/xplan-ows/5.2?SERVICE=WFS -> /xplan-wfs/services/wfs52", pathWithWfsVersion("5.2")) - .route("/xplan-ows/5.3?SERVICE=WFS -> /xplan-wfs/services/wfs53", pathWithWfsVersion("5.3")) - .route("/xplan-ows/5.4?SERVICE=WFS -> /xplan-wfs/services/wfs54", pathWithWfsVersion("5.4")) - .route("/xplan-ows/6.0?SERVICE=WFS -> /xplan-wfs/services/wfs60", pathWithWfsVersion("6.0")) - // /xplan-ows/5.1-pre?SERVICE=WFS etc. -> /xplan-wfs/services/wfs51pre + .route("/ows/4.0?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs40", + pathWithWfsVersionCapabilities("4.0")) + .route("/ows/4.0?SERVICE=WFS -> /xplan-wfs/services/wfs40", pathWithWfsVersion("4.0")) + .route("/ows/4.1?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs41", + pathWithWfsVersionCapabilities("4.1")) + .route("/ows/4.1?SERVICE=WFS -> /xplan-wfs/services/wfs41", pathWithWfsVersion("4.1")) + .route("/ows/5.0?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs50", + pathWithWfsVersionCapabilities("5.0")) + .route("/ows/5.0?SERVICE=WFS -> /xplan-wfs/services/wfs50", pathWithWfsVersion("5.0")) + .route("/ows/5.1?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs51", + pathWithWfsVersionCapabilities("5.1")) + .route("/ows/5.1?SERVICE=WFS -> /xplan-wfs/services/wfs51", pathWithWfsVersion("5.1")) + .route("/ows/5.2?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs52", + pathWithWfsVersionCapabilities("5.2")) + .route("/ows/5.2?SERVICE=WFS -> /xplan-wfs/services/wfs52", pathWithWfsVersion("5.2")) + .route("/ows/5.3?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs53", + pathWithWfsVersionCapabilities("5.3")) + .route("/ows/5.3?SERVICE=WFS -> /xplan-wfs/services/wfs53", pathWithWfsVersion("5.3")) + .route("/ows/5.4?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs54", + pathWithWfsVersionCapabilities("5.4")) + .route("/ows/5.4?SERVICE=WFS -> /xplan-wfs/services/wfs54", pathWithWfsVersion("5.4")) + .route("/ows/6.0?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs60", + pathWithWfsVersionCapabilities("6.0")) + .route("/ows/6.0?SERVICE=WFS -> /xplan-wfs/services/wfs60", pathWithWfsVersion("6.0")) + // /ows/5.1-pre?SERVICE=WFS etc. -> /xplan-wfs/services/wfs51pre // (analog: // wfs40pre,wfs41pre,wfs50pre,wfs51pre,wfs52pre,wfs53pre,wfs54pre,wfs60pre) - .route("/xplan-ows/4.0-pre?SERVICE=WFS -> /xplan-wfs/services/wfs40pre", pathWithWfsVersionPre("4.0")) - .route("/xplan-ows/4.1-pre?SERVICE=WFS -> /xplan-wfs/services/wfs41pre", pathWithWfsVersionPre("4.1")) - .route("/xplan-ows/5.0-pre?SERVICE=WFS -> /xplan-wfs/services/wfs50pre", pathWithWfsVersionPre("5.0")) - .route("/xplan-ows/5.1-pre?SERVICE=WFS -> /xplan-wfs/services/wfs51pre", pathWithWfsVersionPre("5.1")) - .route("/xplan-ows/5.2-pre?SERVICE=WFS -> /xplan-wfs/services/wfs52pre", pathWithWfsVersionPre("5.2")) - .route("/xplan-ows/5.3-pre?SERVICE=WFS -> /xplan-wfs/services/wfs53pre", pathWithWfsVersionPre("5.3")) - .route("/xplan-ows/5.4-pre?SERVICE=WFS -> /xplan-wfs/services/wfs54pre", pathWithWfsVersionPre("5.4")) - .route("/xplan-ows/6.0-pre?SERVICE=WFS -> /xplan-wfs/services/wfs60pre", pathWithWfsVersionPre("6.0")) - // /xplan-ows/5.1-archive?SERVICE=WFS etc. -> /xplan-wfs/services/wfs51archive + .route("/ows/4.0-pre?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs40pre", + pathWithWfsVersionCapabilitiesPre("4.0")) + .route("/ows/4.0-pre?SERVICE=WFS -> /xplan-wfs/services/wfs40pre", pathWithWfsVersionPre("4.0")) + .route("/ows/4.1-pre?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs41pre", + pathWithWfsVersionCapabilitiesPre("4.1")) + .route("/ows/4.1-pre?SERVICE=WFS -> /xplan-wfs/services/wfs41pre", pathWithWfsVersionPre("4.1")) + .route("/ows/5.0-pre?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs50pre", + pathWithWfsVersionCapabilitiesPre("5.0")) + .route("/ows/5.0-pre?SERVICE=WFS -> /xplan-wfs/services/wfs50pre", pathWithWfsVersionPre("5.0")) + .route("/ows/5.1-pre?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs51pre", + pathWithWfsVersionCapabilitiesPre("5.1")) + .route("/ows/5.1-pre?SERVICE=WFS -> /xplan-wfs/services/wfs51pre", pathWithWfsVersionPre("5.1")) + .route("/ows/5.2-pre?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs52pre", + pathWithWfsVersionCapabilitiesPre("5.2")) + .route("/ows/5.2-pre?SERVICE=WFS -> /xplan-wfs/services/wfs52pre", pathWithWfsVersionPre("5.2")) + .route("/ows/5.3-pre?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs53pre", + pathWithWfsVersionCapabilitiesPre("5.3")) + .route("/ows/5.3-pre?SERVICE=WFS -> /xplan-wfs/services/wfs53pre", pathWithWfsVersionPre("5.3")) + .route("/ows/5.4-pre?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs54pre", + pathWithWfsVersionCapabilitiesPre("5.4")) + .route("/ows/5.4-pre?SERVICE=WFS -> /xplan-wfs/services/wfs54pre", pathWithWfsVersionPre("5.4")) + .route("/ows/6.0-pre?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs60pre", + pathWithWfsVersionCapabilitiesPre("6.0")) + .route("/ows/6.0-pre?SERVICE=WFS -> /xplan-wfs/services/wfs60pre", pathWithWfsVersionPre("6.0")) + // /ows/5.1-archive?SERVICE=WFS etc. -> /xplan-wfs/services/wfs51archive // (analog: // wfs40archive,wfs41archive,wfs50archive,wfs51archive,wfs52archive,wfs53archive,wfs54archive,wfs60archive) - .route("/xplan-ows/4.0-archive?SERVICE=WFS -> /xplan-wfs/services/wfs40archive", - pathWithWfsVersionArchive("4.0")) - .route("/xplan-ows/4.1-archive?SERVICE=WFS -> /xplan-wfs/services/wfs41archive", - pathWithWfsVersionArchive("4.1")) - .route("/xplan-ows/5.0-archive?SERVICE=WFS -> /xplan-wfs/services/wfs50archive", - pathWithWfsVersionArchive("5.0")) - .route("/xplan-ows/5.1-archive?SERVICE=WFS -> /xplan-wfs/services/wfs51archive", - pathWithWfsVersionArchive("5.1")) - .route("/xplan-ows/5.2-archive?SERVICE=WFS -> /xplan-wfs/services/wfs52archive", - pathWithWfsVersionArchive("5.2")) - .route("/xplan-ows/5.3-archive?SERVICE=WFS -> /xplan-wfs/services/wfs53archive", - pathWithWfsVersionArchive("5.3")) - .route("/xplan-ows/5.4-archive?SERVICE=WFS -> /xplan-wfs/services/wfs54archive", - pathWithWfsVersionArchive("5.4")) - .route("/xplan-ows/6.0-archive?SERVICE=WFS -> /xplan-wfs/services/wfs60archive", - pathWithWfsVersionArchive("6.0")) + .route("/ows/4.0-archive?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs40archive", + pathWithWfsVersionCapabilitiesArchive("4.0")) + .route("/ows/4.0-archive?SERVICE=WFS -> /xplan-wfs/services/wfs40archive", pathWithWfsVersionArchive("4.0")) + .route("/ows/4.1-archive?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs41archive", + pathWithWfsVersionCapabilitiesArchive("4.1")) + .route("/ows/4.1-archive?SERVICE=WFS -> /xplan-wfs/services/wfs41archive", pathWithWfsVersionArchive("4.1")) + .route("/ows/5.0-archive?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs50archive", + pathWithWfsVersionCapabilitiesArchive("5.0")) + .route("/ows/5.0-archive?SERVICE=WFS -> /xplan-wfs/services/wfs50archive", pathWithWfsVersionArchive("5.0")) + .route("/ows/5.1-archive?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs51archive", + pathWithWfsVersionCapabilitiesArchive("5.1")) + .route("/ows/5.1-archive?SERVICE=WFS -> /xplan-wfs/services/wfs51archive", pathWithWfsVersionArchive("5.1")) + .route("/ows/5.2-archive?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs52archive", + pathWithWfsVersionCapabilitiesArchive("5.2")) + .route("/ows/5.2-archive?SERVICE=WFS -> /xplan-wfs/services/wfs52archive", pathWithWfsVersionArchive("5.2")) + .route("/ows/5.3-archive?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs53archive", + pathWithWfsVersionCapabilitiesArchive("5.3")) + .route("/ows/5.3-archive?SERVICE=WFS -> /xplan-wfs/services/wfs53archive", pathWithWfsVersionArchive("5.3")) + .route("/ows/5.4-archive?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs54archive", + pathWithWfsVersionCapabilitiesArchive("5.4")) + .route("/ows/5.4-archive?SERVICE=WFS -> /xplan-wfs/services/wfs54archive", pathWithWfsVersionArchive("5.4")) + .route("/ows/6.0-archive?SERVICE=WFS&REQUEST=GetCapabilities -> /xplan-wfs/services/wfs60archive", + pathWithWfsVersionCapabilitiesArchive("6.0")) + .route("/ows/6.0-archive?SERVICE=WFS -> /xplan-wfs/services/wfs60archive", pathWithWfsVersionArchive("6.0")) // xplan-mapproxy: - // /xplan-ows/cache/tiles/WMTSCapabilities.xml -> xplan-mapproxy + // /ows/cache/tiles/WMTSCapabilities.xml -> xplan-mapproxy // /wmts/1.0.0/WMTSCapabilities.xml - .route("/xplan-ows/cache/tiles/WMTSCapabilities.xml -> xplan-mapproxy /wmts/1.0.0/WMTSCapabilities.xml", - r -> r.path(contextPath + "/xplan-ows/cache/tiles/WMTSCapabilities.xml") - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/cache/tiles/WMTSCapabilities.xml", - "/wmts/1.0.0/WMTSCapabilities.xml")) // - .uri(backendXplanMapproxy)) - // /xplan-ows/cache/tiles/* -> xplan-mapproxy /wmts/1.0.0/wmts/* - .route("/xplan-ows/cache/tiles/* -> xplan-mapproxy /wmts/1.0.0/wmts/*", - r -> r.path(contextPath + "/xplan-ows/cache/tiles/**") - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/cache/tiles/(.*)", "/wmts/1.0.0/wmts/$1")) // + .route("/ows/cache/tiles/WMTSCapabilities.xml -> xplan-mapproxy /wmts/1.0.0/WMTSCapabilities.xml", r -> r + .path(contextPath + "/ows/cache/tiles/WMTSCapabilities.xml") + .filters(f -> f + .rewritePath(contextPath + "/ows/cache/tiles/WMTSCapabilities.xml", + "/wmts/1.0.0/WMTSCapabilities.xml") + .modifyResponseBody(String.class, String.class, + (exchange, bodyAsString) -> WmtsRestCapabilitiesResponseFilter.filterCapabilities(exchange, + bodyAsString, urlWithPath(exchange, "/ows/cache/tiles")))) + .uri(backendXplanMapproxy)) + // /ows/cache/tiles/* -> xplan-mapproxy /wmts/1.0.0/wmts/* + .route("/ows/cache/tiles/* -> xplan-mapproxy /wmts/1.0.0/wmts/*", + r -> r.path(contextPath + "/ows/cache/tiles/**") + .filters(f -> f.rewritePath(contextPath + "/ows/cache/tiles/(.*)", "/wmts/1.0.0/wmts/$1")) .uri(backendXplanMapproxy)) - // /xplan-ows/cache -> xplan-mapproxy /ows - .route("/xplan-ows/cache -> xplan-mapproxy/ows", r -> r.path(contextPath + "/xplan-ows/cache") // - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/cache", "/ows")) // - .uri(backendXplanMapproxy)) + // /ows/cache -> xplan-mapproxy /ows + .route("/ows/cache?REQUEST=GetCapabilities -> xplan-mapproxy/ows", + r -> r.asyncPredicate(caseInsensitiveCapabilitiesParam()) + .and() + .path(contextPath + "/ows/cache") + .filters(f -> f.rewritePath(contextPath + "/ows/cache", "/ows") + .modifyResponseBody(String.class, String.class, + (exchange, bodyAsString) -> DcpCapabilitiesResponseFilter + .filterCapabilities(exchange, bodyAsString, urlWithoutQuery(exchange)))) + .uri(backendXplanMapproxy)) + .route("/ows/cache -> xplan-mapproxy/ows", + r -> r.path(contextPath + "/ows/cache") + .filters(f -> f.rewritePath(contextPath + "/ows/cache", "/ows")) + .uri(backendXplanMapproxy)) // xplan-mapserver: - // /xplan-ows/raster -> /mapserver - .route("/xplan-ows/raster -> /mapserver", r -> r.path(contextPath + "/xplan-ows/raster") // - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/raster", "/")) // - .uri(backendXplanMapserver)) + // /ows/raster -> /mapserver + .route("/ows/raster?REQUEST=GetCapabilities -> /mapserver", + r -> r.asyncPredicate(caseInsensitiveCapabilitiesParam()) + .and() + .path(contextPath + "/ows/raster") + .filters(f -> f.rewritePath(contextPath + "/ows/raster", "/") + .modifyResponseBody(String.class, String.class, + (exchange, bodyAsString) -> DcpCapabilitiesResponseFilter + .filterCapabilities(exchange, bodyAsString, urlWithoutQuery(exchange)))) + .uri(backendXplanMapserver)) + .route("/ows/raster -> /mapserver", + r -> r.path(contextPath + "/ows/raster") + .filters(f -> f.rewritePath(contextPath + "/ows/raster", "/")) + .uri(backendXplanMapserver)) - // /xplan-ows/raster-pre -> /mapserver - .route("/xplan-ows/raster-pre -> /mapserver", r -> r.path(contextPath + "/xplan-ows/raster-pre") // - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/raster-pre", "/")) // - .uri(backendXplanMapserver)) - // /xplan-ows/raster/planwerk/{planName} → /mapserver?planname={planName} - .route("/xplan-ows/raster/planwerk/{planName} → /mapserver?planname={planName}", - r -> r.path(contextPath + "/xplan-ows/raster/planwerk/*") - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/raster/planwerk/(?<planName>.*)", - "/?planname=${planName}")) // + // /ows/raster-pre -> /mapserver + .route("/ows/raster-pre?REQUEST=GetCapabilities -> /mapserver", + r -> r.asyncPredicate(caseInsensitiveCapabilitiesParam()) + .and() + .path(contextPath + "/ows/raster-pre") + .filters(f -> f.rewritePath(contextPath + "/ows/raster-pre", "/") + .modifyResponseBody(String.class, String.class, + (exchange, bodyAsString) -> DcpCapabilitiesResponseFilter + .filterCapabilities(exchange, bodyAsString, urlWithoutQuery(exchange)))) .uri(backendXplanMapserver)) - // /xplan-ows/raster/planart/{planArt} → /mapserver?planart={planArt} - .route("/xplan-ows/raster/planart/{planArt} → /mapserver?planart={planArt}", - r -> r.path(contextPath + "/xplan-ows/raster/planart/*") - .filters(f -> f.rewritePath(contextPath + "/xplan-ows/raster/planart/(?<planArt>.*)", - "/?planart=${planArt}")) // + .route("/ows/raster-pre -> /mapserver", + r -> r.path(contextPath + "/ows/raster-pre") + .filters(f -> f.rewritePath(contextPath + "/ows/raster-pre", "/")) .uri(backendXplanMapserver)) + // /ows/raster/planwerk/{planName} → /mapserver?planname={planName} + .route("/ows/raster/planwerk/{planName} → /mapserver?planname={planName}", + r -> r.path(contextPath + "/ows/raster/planwerk/*") + .filters(f -> f.rewritePath(contextPath + "/ows/raster/planwerk/(?<planName>.*)", + "/?planname=${planName}")) + .uri(backendXplanMapserver)) + // /ows/raster/planart/{planArt} → /mapserver?planart={planArt} + .route("/ows/raster/planart/{planArt} → /mapserver?planart={planArt}", r -> r + .path(contextPath + "/ows/raster/planart/*") + .filters(f -> f.rewritePath(contextPath + "/ows/raster/planart/(?<planArt>.*)", "/?planart=${planArt}")) + .uri(backendXplanMapserver)) .build(); } + private Function<PredicateSpec, Buildable<Route>> pathWithWfsVersionCapabilitiesArchive(String version) { + String versionWithoutDot = version.replaceAll("\\.", ""); + + return pathWithWfsServiceAndGetCapabilitiesRequestToUri("/ows/" + version + "-archive", + "/xplan-wfs/services/wfs" + versionWithoutDot + "archive"); + } + private Function<PredicateSpec, Buildable<Route>> pathWithWfsVersionArchive(String version) { String versionWithoutDot = version.replaceAll("\\.", ""); - return pathWithWfsServiceToUri("/xplan-ows/" + version + "-archive", + return pathWithWfsServiceToUri("/ows/" + version + "-archive", "/xplan-wfs/services/wfs" + versionWithoutDot + "archive"); } + private Function<PredicateSpec, Buildable<Route>> pathWithWfsVersionCapabilitiesPre(String version) { + String versionWithoutDot = version.replaceAll("\\.", ""); + + return pathWithWfsServiceAndGetCapabilitiesRequestToUri("/ows/" + version + "-pre", + "/xplan-wfs/services/wfs" + versionWithoutDot + "pre"); + } + private Function<PredicateSpec, Buildable<Route>> pathWithWfsVersionPre(String version) { String versionWithoutDot = version.replaceAll("\\.", ""); - return pathWithWfsServiceToUri("/xplan-ows/" + version + "-pre", + return pathWithWfsServiceToUri("/ows/" + version + "-pre", "/xplan-wfs/services/wfs" + versionWithoutDot + "pre"); } + private Function<PredicateSpec, Buildable<Route>> pathWithWfsVersionCapabilities(String version) { + String versionWithoutDot = version.replaceAll("\\.", ""); + + return pathWithWfsServiceAndGetCapabilitiesRequestToUri("/ows/" + version, + "/xplan-wfs/services/wfs" + versionWithoutDot); + } + private Function<PredicateSpec, Buildable<Route>> pathWithWfsVersion(String version) { String versionWithoutDot = version.replaceAll("\\.", ""); - return pathWithWfsServiceToUri("/xplan-ows/" + version, "/xplan-wfs/services/wfs" + versionWithoutDot); + return pathWithWfsServiceToUri("/ows/" + version, "/xplan-wfs/services/wfs" + versionWithoutDot); + } + + private Function<PredicateSpec, Buildable<Route>> pathWithWmsServiceAndGetCapabilitiesRequestToUri(String path, + String newPath) { + return r -> r.asyncPredicate(caseInsensitiveServiceParam("WMS").and(caseInsensitiveCapabilitiesParam())) + .and() + .path(contextPath + path) + .filters(f -> f.rewritePath(contextPath + path, newPath) + .modifyResponseBody(String.class, String.class, + (exchange, bodyAsString) -> DcpCapabilitiesResponseFilter.filterCapabilities(exchange, + bodyAsString, urlWithoutQuery(exchange)))) + .uri(backendXplanServices); } private Function<PredicateSpec, Buildable<Route>> pathWithWmsServiceToUri(String path, String newPath) { @@ -276,6 +494,18 @@ public class Configuration { .uri(backendXplanServices); } + private Function<PredicateSpec, Buildable<Route>> pathWithWfsServiceAndGetCapabilitiesRequestToUri(String path, + String newPath) { + return r -> r.asyncPredicate(caseInsensitiveServiceParam("WFS").and(caseInsensitiveCapabilitiesParam())) + .and() + .path(contextPath + path) + .filters(f -> f.rewritePath(contextPath + path, newPath) + .modifyResponseBody(String.class, String.class, + (exchange, bodyAsString) -> DcpCapabilitiesResponseFilter.filterCapabilities(exchange, + bodyAsString, urlWithoutQuery(exchange)))) + .uri(backendXplanServices); + } + private Function<PredicateSpec, Buildable<Route>> pathWithWfsServiceToUri(String path, String newPath) { return r -> r.asyncPredicate(caseInsensitiveServiceParam("WFS")) .and() @@ -284,8 +514,35 @@ public class Configuration { .uri(backendXplanServices); } - private AsyncPredicate<ServerWebExchange> caseInsensitiveServiceParam(String WMS) { - return caseInsensitiveQueryRoutePredicateFactory.applyAsync((c) -> c.setParam("SERVICE").setRegexp(WMS)); + private AsyncPredicate<ServerWebExchange> caseInsensitiveServiceParam(String service) { + return caseInsensitiveParam("SERVICE", service); + } + + private AsyncPredicate<ServerWebExchange> caseInsensitiveCapabilitiesParam() { + return caseInsensitiveParam("REQUEST", "GetCapabilities"); + } + + private AsyncPredicate<ServerWebExchange> caseInsensitiveParam(String key, String value) { + return caseInsensitiveQueryRoutePredicateFactory.applyAsync((c) -> c.setParam(key).setRegexp(value)); + } + + private String urlWithoutQuery(ServerWebExchange exchange) { + String url = exchange.getRequest().getURI().toString(); + int queryStart = url.indexOf('?'); + if (queryStart != -1) { + url = url.substring(0, queryStart); + } + return url; + } + + private String urlWithPath(ServerWebExchange exchange, String newPath) { + URI uri = exchange.getRequest().getURI(); + String scheme = uri.getScheme(); + String portPart = ""; + if (!(uri.getPort() == 80 && "http".equals(scheme)) && !(uri.getPort() == 446 && "https".equals(scheme))) { + portPart = ":" + uri.getPort(); + } + return scheme + "://" + uri.getHost() + portPart + contextPath + newPath; } } diff --git a/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/CapabilitiesResponseFilter.java b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/CapabilitiesResponseFilter.java new file mode 100644 index 000000000..a327ea26b --- /dev/null +++ b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/CapabilitiesResponseFilter.java @@ -0,0 +1,75 @@ +package de.latlon.xplanbox.gateway.filter; + +import static org.deegree.commons.xml.stax.XMLStreamUtils.copy; + +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLOutputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; + +import org.deegree.commons.xml.stax.XMLStreamUtils; +import org.reactivestreams.Publisher; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.server.ServerWebExchange; +import reactor.core.publisher.Mono; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public abstract class CapabilitiesResponseFilter { + + private static final Logger LOG = LoggerFactory.getLogger(CapabilitiesResponseFilter.class); + + private final XMLStreamWriterFilterBase filter; + + protected CapabilitiesResponseFilter(XMLStreamWriterFilterBase filter) { + this.filter = filter; + } + + public Publisher<String> replaceDcpUrl(ServerWebExchange exchange, String bodyAsString) { + if (bodyAsString == null || bodyAsString.isEmpty()) + return Mono.empty(); + return Mono.just(createCopy(bodyAsString)); + } + + private String createCopy(String xml) { + XMLStreamReader xmlStreamReader = null; + XMLStreamWriter writer = null; + try { + XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory(); + xmlInputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.FALSE); + xmlStreamReader = xmlInputFactory.createXMLStreamReader(new ByteArrayInputStream(xml.getBytes())); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + writer = XMLOutputFactory.newFactory().createXMLStreamWriter(bos); + filter.setDelegate(writer); + copy(filter, xmlStreamReader); + writer.close(); + + return bos.toString(); + } + catch (XMLStreamException e) { + LOG.warn("Could not replace DCP Urls in GetCapabilities response"); + return xml; + } + finally { + XMLStreamUtils.closeQuietly(xmlStreamReader); + closeQuietly(writer); + } + } + + private static void closeQuietly(XMLStreamWriter writer) { + if (writer != null) + try { + writer.close(); + } + catch (XMLStreamException e) { + LOG.info("XMLStreamReader could not be closed: {}", e.getMessage()); + } + } + +} diff --git a/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/XMLStreamWriterFilter.java b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/XMLStreamWriterFilter.java new file mode 100644 index 000000000..797050e8b --- /dev/null +++ b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/XMLStreamWriterFilter.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package de.latlon.xplanbox.gateway.filter; + +import javax.xml.stream.XMLStreamWriter; + +/** + * An interface used to identify a filter class for an XMLStreamWriter The filter receives + * XMLStreamWriter events (and can change or log them). The filter then sends the events + * to the delegate XMLStreamWriter + * + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public interface XMLStreamWriterFilter extends XMLStreamWriter { + + /** + * + * Set a new delegate writer + * @param writer + * + */ + void setDelegate(XMLStreamWriter writer); + +} \ No newline at end of file diff --git a/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/XMLStreamWriterFilterBase.java b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/XMLStreamWriterFilterBase.java new file mode 100644 index 000000000..e6932ae5b --- /dev/null +++ b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/XMLStreamWriterFilterBase.java @@ -0,0 +1,192 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package de.latlon.xplanbox.gateway.filter; + +import javax.xml.namespace.NamespaceContext; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; + +/** + * + * The base class for classes that are XMLStreamWriterFilters Each of the XMLStreamWriter + * events is intercepted and passed to the delegate XMLStreamWriter + * + * Character data is sent to the xmlData abstract method. Derived classes may log or + * change the xml data. + * + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public abstract class XMLStreamWriterFilterBase implements XMLStreamWriterFilter { + + XMLStreamWriter delegate = null; + + public XMLStreamWriterFilterBase() { + } + + public void setDelegate(XMLStreamWriter writer) { + this.delegate = writer; + } + + public XMLStreamWriter getDelegate() { + return delegate; + } + + public void close() throws XMLStreamException { + delegate.close(); + } + + public void flush() throws XMLStreamException { + delegate.flush(); + } + + public NamespaceContext getNamespaceContext() { + return delegate.getNamespaceContext(); + } + + public String getPrefix(String uri) throws XMLStreamException { + return delegate.getPrefix(uri); + } + + public Object getProperty(String name) throws IllegalArgumentException { + return delegate.getProperty(name); + } + + public void setDefaultNamespace(String uri) throws XMLStreamException { + delegate.setDefaultNamespace(uri); + } + + public void setNamespaceContext(NamespaceContext context) throws XMLStreamException { + delegate.setNamespaceContext(context); + } + + public void setPrefix(String prefix, String uri) throws XMLStreamException { + delegate.setPrefix(prefix, uri); + } + + public void writeAttribute(String prefix, String namespaceURI, String localName, String value) + throws XMLStreamException { + delegate.writeAttribute(prefix, namespaceURI, localName, attributeValue(localName, value)); + } + + public void writeAttribute(String namespaceURI, String localName, String value) throws XMLStreamException { + delegate.writeAttribute(namespaceURI, localName, attributeValue(localName, value)); + } + + public void writeAttribute(String localName, String value) throws XMLStreamException { + delegate.writeAttribute(localName, attributeValue(localName, value)); + } + + public void writeCData(String data) throws XMLStreamException { + delegate.writeCData(data); + } + + public void writeCharacters(char[] text, int start, int len) throws XMLStreamException { + // Adapt to writeCharacters that takes a String value + String value = new String(text, start, len); + writeCharacters(value); + } + + public void writeCharacters(String text) throws XMLStreamException { + delegate.writeCharacters(text); + } + + public void writeComment(String data) throws XMLStreamException { + delegate.writeComment(data); + } + + public void writeDTD(String dtd) throws XMLStreamException { + delegate.writeDTD(dtd); + } + + public void writeDefaultNamespace(String namespaceURI) throws XMLStreamException { + delegate.writeDefaultNamespace(namespaceURI); + } + + public void writeEmptyElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { + delegate.writeEmptyElement(prefix, localName, namespaceURI); + } + + public void writeEmptyElement(String namespaceURI, String localName) throws XMLStreamException { + delegate.writeEmptyElement(namespaceURI, localName); + } + + public void writeEmptyElement(String localName) throws XMLStreamException { + delegate.writeEmptyElement(localName); + } + + public void writeEndDocument() throws XMLStreamException { + delegate.writeEndDocument(); + } + + public void writeEndElement() throws XMLStreamException { + delegate.writeEndElement(); + } + + public void writeEntityRef(String name) throws XMLStreamException { + delegate.writeEntityRef(name); + } + + public void writeNamespace(String prefix, String namespaceURI) throws XMLStreamException { + delegate.writeNamespace(prefix, namespaceURI); + } + + public void writeProcessingInstruction(String target, String data) throws XMLStreamException { + delegate.writeProcessingInstruction(target, data); + } + + public void writeProcessingInstruction(String target) throws XMLStreamException { + delegate.writeProcessingInstruction(target); + } + + public void writeStartDocument() throws XMLStreamException { + delegate.writeStartDocument(); + } + + public void writeStartDocument(String encoding, String version) throws XMLStreamException { + delegate.writeStartDocument(encoding, version); + } + + public void writeStartDocument(String version) throws XMLStreamException { + delegate.writeStartDocument(version); + } + + public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { + delegate.writeStartElement(prefix, localName, namespaceURI); + } + + public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException { + delegate.writeStartElement(namespaceURI, localName); + } + + public void writeStartElement(String localName) throws XMLStreamException { + delegate.writeStartElement(localName); + } + + /** + * Derived classes extend the method. A derived class may log or modify the attribute + * value + * @param localName + * @param value + * @return value + */ + protected abstract String attributeValue(String localName, String value); + +} \ No newline at end of file diff --git a/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/dcp/DcpCapabilitiesResponseFilter.java b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/dcp/DcpCapabilitiesResponseFilter.java new file mode 100644 index 000000000..321185298 --- /dev/null +++ b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/dcp/DcpCapabilitiesResponseFilter.java @@ -0,0 +1,23 @@ +package de.latlon.xplanbox.gateway.filter.dcp; + +import de.latlon.xplanbox.gateway.filter.CapabilitiesResponseFilter; +import org.reactivestreams.Publisher; +import org.springframework.web.server.ServerWebExchange; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class DcpCapabilitiesResponseFilter extends CapabilitiesResponseFilter { + + private DcpCapabilitiesResponseFilter(DcpUrlFilter dcpUrlFilter) { + super(dcpUrlFilter); + } + + public static Publisher<String> filterCapabilities(ServerWebExchange exchange, String bodyAsString, + String xplanGatewayUrl) { + DcpUrlFilter dcpUrlFilter = new DcpUrlFilter(xplanGatewayUrl); + return new DcpCapabilitiesResponseFilter(dcpUrlFilter).replaceDcpUrl(exchange, bodyAsString); + } + +} diff --git a/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/dcp/DcpUrlFilter.java b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/dcp/DcpUrlFilter.java new file mode 100644 index 000000000..e8aec9c71 --- /dev/null +++ b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/dcp/DcpUrlFilter.java @@ -0,0 +1,62 @@ +package de.latlon.xplanbox.gateway.filter.dcp; + +import javax.xml.stream.XMLStreamException; + +import de.latlon.xplanbox.gateway.filter.XMLStreamWriterFilterBase; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class DcpUrlFilter extends XMLStreamWriterFilterBase { + + private final String xplanGatewayUrl; + + private String path = ""; + + DcpUrlFilter(String xplanGatewayUrl) { + this.xplanGatewayUrl = xplanGatewayUrl; + } + + @Override + public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { + path += '/' + localName; + super.writeStartElement(prefix, localName, namespaceURI); + } + + @Override + public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException { + path += '/' + localName; + super.writeStartElement(namespaceURI, localName); + } + + @Override + public void writeStartElement(String localName) throws XMLStreamException { + path += '/' + localName; + super.writeStartElement(localName); + } + + @Override + public void writeEndElement() throws XMLStreamException { + path = path.substring(0, path.lastIndexOf("/")); + super.writeEndElement(); + } + + @Override + protected String attributeValue(String localName, String s) { + // WMS 1.1.1, WMS 1.3.0 + // DCPType/HTTP/Get/OnlineResource/@xlink:href + // WFS 1.1.0, WFS 2.0.0 + // DCP/HTTP/Get/xlink:href + // DCP/HTTP/Post/xlink:href + // WMTS 1.0.0 + // DCP/HTTP/Get/xlink:href + + if ("href".equals(localName) && (path.endsWith("DCPType/HTTP/Get/OnlineResource") + || path.endsWith("DCPType/HTTP/Post/OnlineResource") || path.endsWith("DCP/HTTP/Get") + || path.endsWith("DCP/HTTP/Post"))) + return xplanGatewayUrl + (s.endsWith("?") ? "?" : ""); + return s; + } + +} \ No newline at end of file diff --git a/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/rest/WmtsRestCapabilitiesResponseFilter.java b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/rest/WmtsRestCapabilitiesResponseFilter.java new file mode 100644 index 000000000..b0ddbd20b --- /dev/null +++ b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/rest/WmtsRestCapabilitiesResponseFilter.java @@ -0,0 +1,23 @@ +package de.latlon.xplanbox.gateway.filter.rest; + +import de.latlon.xplanbox.gateway.filter.CapabilitiesResponseFilter; +import org.reactivestreams.Publisher; +import org.springframework.web.server.ServerWebExchange; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class WmtsRestCapabilitiesResponseFilter extends CapabilitiesResponseFilter { + + private WmtsRestCapabilitiesResponseFilter(WmtsRestFilter wmtsRestFilter) { + super(wmtsRestFilter); + } + + public static Publisher<String> filterCapabilities(ServerWebExchange exchange, String bodyAsString, + String xplanGatewayUrl) { + WmtsRestFilter filter = new WmtsRestFilter(xplanGatewayUrl); + return new WmtsRestCapabilitiesResponseFilter(filter).replaceDcpUrl(exchange, bodyAsString); + } + +} diff --git a/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/rest/WmtsRestFilter.java b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/rest/WmtsRestFilter.java new file mode 100644 index 000000000..c6d4cb6fa --- /dev/null +++ b/xplan-gateway/src/main/java/de/latlon/xplanbox/gateway/filter/rest/WmtsRestFilter.java @@ -0,0 +1,61 @@ +package de.latlon.xplanbox.gateway.filter.rest; + +import javax.xml.stream.XMLStreamException; + +import de.latlon.xplanbox.gateway.filter.XMLStreamWriterFilterBase; + +/** + * @author <a href="mailto:goltz@lat-lon.de">Lyn Goltz </a> + * @since 8.0 + */ +public class WmtsRestFilter extends XMLStreamWriterFilterBase { + + private final String xplanGatewayUrl; + + private String path; + + public WmtsRestFilter(String xplanGatewayUrl) { + this.xplanGatewayUrl = xplanGatewayUrl; + } + + @Override + public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException { + path += '/' + localName; + super.writeStartElement(prefix, localName, namespaceURI); + } + + @Override + public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException { + path += '/' + localName; + super.writeStartElement(namespaceURI, localName); + } + + @Override + public void writeStartElement(String localName) throws XMLStreamException { + path += '/' + localName; + super.writeStartElement(localName); + } + + @Override + public void writeEndElement() throws XMLStreamException { + path = path.substring(0, path.lastIndexOf("/")); + super.writeEndElement(); + } + + @Override + protected String attributeValue(String localName, String s) { + // Contents/Layer/ResourceURL/@template + // template="http://localhost:8095/wmts/bp_objekte/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png" + if ("template".equals(localName) && path.endsWith("Contents/Layer/ResourceURL")) { + String templatePath = s.substring(s.indexOf("/{")); + return xplanGatewayUrl + templatePath; + } + // Capabilities/ServiceMetadataURL/@href + // xlink:href="http://localhost:8095/wmts/1.0.0/WMTSCapabilities.xml" + if ("href".equals(localName) && path.endsWith("Capabilities/ServiceMetadataURL")) { + return xplanGatewayUrl + "/WMTSCapabilities.xml"; + } + return s; + } + +} diff --git a/xplan-gateway/src/main/resources/application.properties b/xplan-gateway/src/main/resources/application.properties index ff55f2cc7..3d70aee39 100644 --- a/xplan-gateway/src/main/resources/application.properties +++ b/xplan-gateway/src/main/resources/application.properties @@ -29,4 +29,6 @@ spring.main.banner-mode=off xplanbox.gateway.rewrite.backend.xplan-mapserver.uri=${XPLAN_MAPSERVER_URL_INTERNAL:http://xplan-mapserver:8080} xplanbox.gateway.rewrite.backend.xplan-mapproxy.uri=${XPLAN_MAPPROXY_URL_INTERNAL:http://xplan-mapproxy:8080} xplanbox.gateway.rewrite.backend.xplan-services.uri=${XPLAN_SERVICES_URL_INTERNAL:http://xplan-services} -xplanbox.gateway.rewrite.backend.xplan-validator-wms.uri=${XPLAN_VALIDATOR_WMS_URL_INTERNAL:http://xplan-validator-wms:8080} +xplanbox.gateway.rewrite.backend.xplan-validator-wms.uri=${XPLAN_VALIDATOR_WMS_URL_INTERNAL:http://xplan-validator-wms} + +spring.codec.max-in-memory-size: 1000KB diff --git a/xplan-gateway/src/test/java/de/latlon/xplanbox/gateway/ConfigurationTest.java b/xplan-gateway/src/test/java/de/latlon/xplanbox/gateway/ConfigurationTest.java index bc78602f5..8975b5068 100644 --- a/xplan-gateway/src/test/java/de/latlon/xplanbox/gateway/ConfigurationTest.java +++ b/xplan-gateway/src/test/java/de/latlon/xplanbox/gateway/ConfigurationTest.java @@ -1,15 +1,19 @@ package de.latlon.xplanbox.gateway; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; -import com.sun.net.httpserver.HttpServer; import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,11 +25,14 @@ import org.springframework.test.context.DynamicPropertyRegistry; import org.springframework.test.context.DynamicPropertySource; import org.springframework.test.web.reactive.server.WebTestClient; +import com.sun.net.httpserver.HttpServer; + /** * Inspired from https://www.baeldung.com/spring-cloud-gateway-url-rewriting */ @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @ActiveProfiles("test") +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) class ConfigurationTest { @LocalServerPort @@ -34,25 +41,25 @@ class ConfigurationTest { @Autowired private WebTestClient webClient; - private static List<HttpServer> mockServers = new ArrayList<>(); + private static final List<HttpServer> mockServers = new ArrayList<>(); - private static Logger log = LoggerFactory.getLogger(ConfigurationTest.class); + private static final Logger LOG = LoggerFactory.getLogger(ConfigurationTest.class); // Create a running HttpServer that echoes back the request URL. private static HttpServer startTestServer(String hostDescription) { try { - log.info("Starting mock server {}", hostDescription); + LOG.info("Starting mock server {}", hostDescription); HttpServer mockServer = HttpServer.create(); mockServer.bind(new InetSocketAddress(0), 0); mockServer.createContext("/", (xchg) -> { String uri = xchg.getRequestURI().toString(); - log.info("{} backend called: uri={}", hostDescription, uri); + LOG.info("{} backend called: uri={}", hostDescription, uri); xchg.getResponseHeaders().add("Content-Type", "text/plain"); xchg.sendResponseHeaders(200, 0); OutputStream os = xchg.getResponseBody(); - String response = "[" + hostDescription + "]" + uri; - os.write(response.getBytes()); + String response = retrieveResponse(hostDescription, uri); + os.write(response.getBytes(StandardCharsets.UTF_8)); os.flush(); os.close(); }); @@ -60,7 +67,7 @@ class ConfigurationTest { mockServer.start(); mockServers.add(mockServer); InetSocketAddress localAddr = mockServer.getAddress(); - log.info("mock server {} started: local address={}", hostDescription, localAddr); + LOG.info("mock server {} started: local address={}", hostDescription, localAddr); return mockServer; } @@ -70,6 +77,34 @@ class ConfigurationTest { } + private static String retrieveResponse(String hostDescription, String uri) throws IOException { + if (uri.contains("=WFS")) { + if (uri.contains("VERSION=1.1.0")) + return new String( + ConfigurationTest.class.getResourceAsStream("/capabilities_wfs_1.1.0.xml").readAllBytes()); + if (uri.contains("VERSION=2.0.0")) + return new String( + ConfigurationTest.class.getResourceAsStream("/capabilities_wfs_2.0.0.xml").readAllBytes()); + } + else if (uri.contains("=WMS")) { + if (uri.contains("VERSION=1.1.1")) + return new String( + ConfigurationTest.class.getResourceAsStream("/capabilities_wms_1.1.1.xml").readAllBytes()); + if (uri.contains("VERSION=1.3.0")) + return new String( + ConfigurationTest.class.getResourceAsStream("/capabilities_wms_1.3.0.xml").readAllBytes()); + } + else if (uri.contains("=WMTS")) { + return new String( + ConfigurationTest.class.getResourceAsStream("/capabilities_wmts_1.0.0.xml").readAllBytes()); + } + else if (uri.contains("/WMTSCapabilities.xml")) { + return new String( + ConfigurationTest.class.getResourceAsStream("/capabilities_wmts_tiles_1.0.0.xml").readAllBytes()); + } + return "[" + hostDescription + "]" + uri; + } + @DynamicPropertySource static void registerBackendServer(DynamicPropertyRegistry registry) { startAndRegister(registry, "xplan-mapserver"); @@ -87,279 +122,341 @@ class ConfigurationTest { @AfterAll public static void stopMockBackend() throws Exception { - log.info("Shutdown mock http servers"); + LOG.info("Shutdown mock http servers"); mockServers.forEach((s) -> s.stop(1)); } - // /xplan-ows/validator?SERVICE=WMS -> /xplan-validator-wms/services/wms + // /ows/validator?SERVICE=WMS -> /xplan-validator-wms/services/wms @Test void servicesValidatorWms() { testForward( - "/xplan-gateway/xplan-ows/validator?SERVICE=WMS -> [xplan-validator-wms]/xplan-validator-wms/services/wms?SERVICE=WMS"); + "/xplan-gateway/ows/validator?SERVICE=WMS -> [xplan-validator-wms]/xplan-validator-wms/services/wms?SERVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/validator?SERVicE=WMS&foo=123 -> [xplan-validator-wms]/xplan-validator-wms/services/wms?SERVicE=WMS&foo=123"); + "/xplan-gateway/ows/validator?SERVicE=WMS&foo=123 -> [xplan-validator-wms]/xplan-validator-wms/services/wms?SERVicE=WMS&foo=123"); + testDcpUrl("/xplan-gateway/ows/validator?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/validator"); + testDcpUrl("/xplan-gateway/ows/validator?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/validator"); } - // /xplan-ows/getAttachment -> [xplan-services]/xplan-wms/getAttachment + // /ows/getAttachment -> [xplan-services]/xplan-wms/getAttachment @Test void servicesGetAttachment() { - testForward("/xplan-gateway/xplan-ows/getAttachment -> [xplan-services]/xplan-wms/getAttachment"); + testForward("/xplan-gateway/ows/getAttachment -> [xplan-services]/xplan-wms/getAttachment"); } - // /xplan-ows/syn?SERVICE=WMS -> [xplan-services]/xplan-wms/services/wms + // /ows/syn?SERVICE=WMS -> [xplan-services]/xplan-wms/services/wms @Test void servicesSynWms() { - testForward("/xplan-gateway/xplan-ows/syn?SERVICE=WMS -> [xplan-services]/xplan-wms/services/wms?SERVICE=WMS"); + testForward("/xplan-gateway/ows/syn?SERVICE=WMS -> [xplan-services]/xplan-wms/services/wms?SERVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn?ServICE=WMS&foo=123 -> [xplan-services]/xplan-wms/services/wms?ServICE=WMS&foo=123"); + "/xplan-gateway/ows/syn?ServICE=WMS&foo=123 -> [xplan-services]/xplan-wms/services/wms?ServICE=WMS&foo=123"); + testDcpUrl("/xplan-gateway/ows/syn?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/syn"); + testDcpUrl("/xplan-gateway/ows/syn?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/syn"); } - // /xplan-ows/syn-pre?SERVICE=WMS -> [xplan-services]/xplan-wms/services/wmspre + // /ows/syn-pre?SERVICE=WMS -> [xplan-services]/xplan-wms/services/wmspre @Test void servicesSynWmsPreWms() { - testForward( - "/xplan-gateway/xplan-ows/syn-pre?SERVICE=WMS -> [xplan-services]/xplan-wms/services/wmspre?SERVICE=WMS"); - testForward( - "/xplan-gateway/xplan-ows/syn-pre?service=WMS -> [xplan-services]/xplan-wms/services/wmspre?service=WMS"); + testForward("/xplan-gateway/ows/syn-pre?SERVICE=WMS -> [xplan-services]/xplan-wms/services/wmspre?SERVICE=WMS"); + testForward("/xplan-gateway/ows/syn-pre?service=WMS -> [xplan-services]/xplan-wms/services/wmspre?service=WMS"); + testDcpUrl("/xplan-gateway/ows/syn-pre?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/syn-pre"); + testDcpUrl("/xplan-gateway/ows/syn-pre?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/syn-pre"); } - // /xplan-ows/syn-archive?SERVICE=WMS-> [xplan-services]/xplan-wms/services/wmsarchive + // /ows/syn-archive?SERVICE=WMS-> [xplan-services]/xplan-wms/services/wmsarchive @Test void servicesSynWmsArchiveWms() { testForward( - "/xplan-gateway/xplan-ows/syn-archive?SERVICE=WMS -> [xplan-services]/xplan-wms/services/wmsarchive?SERVICE=WMS"); + "/xplan-gateway/ows/syn-archive?SERVICE=WMS -> [xplan-services]/xplan-wms/services/wmsarchive?SERVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn-archive?SErvICE=WMS -> [xplan-services]/xplan-wms/services/wmsarchive?SErvICE=WMS"); + "/xplan-gateway/ows/syn-archive?SErvICE=WMS -> [xplan-services]/xplan-wms/services/wmsarchive?SErvICE=WMS"); + testDcpUrl("/xplan-gateway/ows/syn-archive?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/syn-archive"); + testDcpUrl("/xplan-gateway/ows/syn-archive?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/syn-archive"); } - // /xplan-ows/syn/planart/bp?SERVICE=WMS -> [xplan-services]/xplan-wms/services/bpwms + // /ows/syn/planart/bp?SERVICE=WMS -> [xplan-services]/xplan-wms/services/bpwms // (analog: fpwms, lpwms, rpwms, sowms) @Test void servicesSynWmsPlanart() { testForward( - "/xplan-gateway/xplan-ows/syn/planart/bp?sERVICE=WMS -> [xplan-services]/xplan-wms/services/bpwms?sERVICE=WMS"); + "/xplan-gateway/ows/syn/planart/bp?sERVICE=WMS -> [xplan-services]/xplan-wms/services/bpwms?sERVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn/planart/fp?SeRVICE=WMS -> [xplan-services]/xplan-wms/services/fpwms?SeRVICE=WMS"); + "/xplan-gateway/ows/syn/planart/fp?SeRVICE=WMS -> [xplan-services]/xplan-wms/services/fpwms?SeRVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn/planart/lp?SErVICE=WMS -> [xplan-services]/xplan-wms/services/lpwms?SErVICE=WMS"); + "/xplan-gateway/ows/syn/planart/lp?SErVICE=WMS -> [xplan-services]/xplan-wms/services/lpwms?SErVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn/planart/rp?SERvICE=WMS -> [xplan-services]/xplan-wms/services/rpwms?SERvICE=WMS"); + "/xplan-gateway/ows/syn/planart/rp?SERvICE=WMS -> [xplan-services]/xplan-wms/services/rpwms?SERvICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn/planart/so?SERVicE=WMS -> [xplan-services]/xplan-wms/services/sowms?SERVicE=WMS"); + "/xplan-gateway/ows/syn/planart/so?SERVicE=WMS -> [xplan-services]/xplan-wms/services/sowms?SERVicE=WMS"); + testDcpUrl("/xplan-gateway/ows/syn/planart/so?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/syn/planart/so"); + testDcpUrl("/xplan-gateway/ows/syn/planart/so?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/syn/planart/so"); } - // /xplan-ows/syn-pre/planart/bp?SERVICE=WMS -> + // /ows/syn-pre/planart/bp?SERVICE=WMS -> // [xplan-services]/xplan-wms/services/bpwmspre (analog: fpwmspre, lpwmspre, rpwmspre, // sowmspre) @Test void servicesSynPreWmsPlanart() { testForward( - "/xplan-gateway/xplan-ows/syn-pre/planart/bp?SERVICe=WMS -> [xplan-services]/xplan-wms/services/bpwmspre?SERVICe=WMS"); + "/xplan-gateway/ows/syn-pre/planart/bp?SERVICe=WMS -> [xplan-services]/xplan-wms/services/bpwmspre?SERVICe=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn-pre/planart/fp?SERVIcE=WMS -> [xplan-services]/xplan-wms/services/fpwmspre?SERVIcE=WMS"); + "/xplan-gateway/ows/syn-pre/planart/fp?SERVIcE=WMS -> [xplan-services]/xplan-wms/services/fpwmspre?SERVIcE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn-pre/planart/lp?SERViCE=WMS -> [xplan-services]/xplan-wms/services/lpwmspre?SERViCE=WMS"); + "/xplan-gateway/ows/syn-pre/planart/lp?SERViCE=WMS -> [xplan-services]/xplan-wms/services/lpwmspre?SERViCE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn-pre/planart/rp?SERvICE=WMS -> [xplan-services]/xplan-wms/services/rpwmspre?SERvICE=WMS"); + "/xplan-gateway/ows/syn-pre/planart/rp?SERvICE=WMS -> [xplan-services]/xplan-wms/services/rpwmspre?SERvICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn-pre/planart/so?SErVICE=WMS -> [xplan-services]/xplan-wms/services/sowmspre?SErVICE=WMS"); + "/xplan-gateway/ows/syn-pre/planart/so?SErVICE=WMS -> [xplan-services]/xplan-wms/services/sowmspre?SErVICE=WMS"); + testDcpUrl("/xplan-gateway/ows/syn-pre/planart/so?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/syn-pre/planart/so"); + testDcpUrl("/xplan-gateway/ows/syn-pre/planart/so?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/syn-pre/planart/so"); } - // /xplan-ows/syn-archive/planart/bp?SERVICE=WMS -> + // /ows/syn-archive/planart/bp?SERVICE=WMS -> // [xplan-services]/xplan-wms/services/bpwmsarchive (analog: fpwmsarchive, // lpwmsarchive, rpwmsarchive, sowmsarchive) @Test void servicesSynArchiveWmsPlanart() { testForward( - "/xplan-gateway/xplan-ows/syn-archive/planart/bp?SERVICE=WMS -> [xplan-services]/xplan-wms/services/bpwmsarchive?SERVICE=WMS"); + "/xplan-gateway/ows/syn-archive/planart/bp?SERVICE=WMS -> [xplan-services]/xplan-wms/services/bpwmsarchive?SERVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn-archive/planart/fp?service=WMS -> [xplan-services]/xplan-wms/services/fpwmsarchive?service=WMS"); + "/xplan-gateway/ows/syn-archive/planart/fp?service=WMS -> [xplan-services]/xplan-wms/services/fpwmsarchive?service=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn-archive/planart/lp?SERVICE=WMS -> [xplan-services]/xplan-wms/services/lpwmsarchive?SERVICE=WMS"); + "/xplan-gateway/ows/syn-archive/planart/lp?SERVICE=WMS -> [xplan-services]/xplan-wms/services/lpwmsarchive?SERVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn-archive/planart/rp?SERVICE=WMS -> [xplan-services]/xplan-wms/services/rpwmsarchive?SERVICE=WMS"); + "/xplan-gateway/ows/syn-archive/planart/rp?SERVICE=WMS -> [xplan-services]/xplan-wms/services/rpwmsarchive?SERVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn-archive/planart/so?SERVICE=WMS -> [xplan-services]/xplan-wms/services/sowmsarchive?SERVICE=WMS"); + "/xplan-gateway/ows/syn-archive/planart/so?SERVICE=WMS -> [xplan-services]/xplan-wms/services/sowmsarchive?SERVICE=WMS"); + testDcpUrl("/xplan-gateway/ows/syn-archive/planart/so?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/syn-archive/planart/so"); + testDcpUrl("/xplan-gateway/ows/syn-archive/planart/so?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/syn-archive/planart/so"); } - // /xplan-ows/syn/planwerk/{planName}?SERVICE=WMS -> + // /ows/syn/planwerk/{planName}?SERVICE=WMS -> // [xplan-services]/xplan-wms/services/planwerkwms/planname/{planName} @Test void servicesSynWmsPlanwerk() { testForward( - "/xplan-gateway/xplan-ows/syn/planwerk/foo?SERVICE=WMS -> [xplan-services]/xplan-wms/services/planwerkwms/planname/foo?SERVICE=WMS"); + "/xplan-gateway/ows/syn/planwerk/foo?SERVICE=WMS -> [xplan-services]/xplan-wms/services/planwerkwms/planname/foo?SERVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn/planwerk/foo?service=WMS -> [xplan-services]/xplan-wms/services/planwerkwms/planname/foo?service=WMS"); + "/xplan-gateway/ows/syn/planwerk/foo?service=WMS -> [xplan-services]/xplan-wms/services/planwerkwms/planname/foo?service=WMS"); + testDcpUrl("/xplan-gateway/ows/syn/planwerk/foo?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/syn/planwerk/foo"); + testDcpUrl("/xplan-gateway/ows/syn/planwerk/foo?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/syn/planwerk/foo"); } - // /xplan-ows/syn-pre/planwerk/{planName}?SERVICE=WMS -> + // /ows/syn-pre/planwerk/{planName}?SERVICE=WMS -> // [xplan-services]/xplan-wms/services/planwerkwmspre/planname/{planName} @Test void servicesSynPreWmsPlanwerk() { testForward( - "/xplan-gateway/xplan-ows/syn-pre/planwerk/foo?SERVICE=WMS -> [xplan-services]/xplan-wms/services/planwerkwmspre/planname/foo?SERVICE=WMS"); + "/xplan-gateway/ows/syn-pre/planwerk/foo?SERVICE=WMS -> [xplan-services]/xplan-wms/services/planwerkwmspre/planname/foo?SERVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn-pre/planwerk/foo?SERviCE=WMS -> [xplan-services]/xplan-wms/services/planwerkwmspre/planname/foo?SERviCE=WMS"); + "/xplan-gateway/ows/syn-pre/planwerk/foo?SERviCE=WMS -> [xplan-services]/xplan-wms/services/planwerkwmspre/planname/foo?SERviCE=WMS"); + testDcpUrl("/xplan-gateway/ows/syn-pre/planwerk/foo?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/syn-pre/planwerk/foo"); + testDcpUrl("/xplan-gateway/ows/syn-pre/planwerk/foo?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/syn-pre/planwerk/foo"); } - // /xplan-ows/syn-archive/planwerk/{planName}?SERVICE=WMS -> + // /ows/syn-archive/planwerk/{planName}?SERVICE=WMS -> // [xplan-services]/xplan-wms/services/planwerkwmsarchive/planname/{planName} @Test void servicesSynArchiveWmsPlanwerk() { testForward( - "/xplan-gateway/xplan-ows/syn-archive/planwerk/foo?SERVICE=WMS -> [xplan-services]/xplan-wms/services/planwerkwmsarchive/planname/foo?SERVICE=WMS"); + "/xplan-gateway/ows/syn-archive/planwerk/foo?SERVICE=WMS -> [xplan-services]/xplan-wms/services/planwerkwmsarchive/planname/foo?SERVICE=WMS"); testForward( - "/xplan-gateway/xplan-ows/syn-archive/planwerk/foo?SERVIce=WMS -> [xplan-services]/xplan-wms/services/planwerkwmsarchive/planname/foo?SERVIce=WMS"); + "/xplan-gateway/ows/syn-archive/planwerk/foo?SERVIce=WMS -> [xplan-services]/xplan-wms/services/planwerkwmsarchive/planname/foo?SERVIce=WMS"); + testDcpUrl("/xplan-gateway/ows/syn-archive/planwerk/foo?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/syn-archive/planwerk/foo"); + testDcpUrl("/xplan-gateway/ows/syn-archive/planwerk/foo?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/syn-archive/planwerk/foo"); } - // /xplan-ows/syn?SERVICE=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfs + // /ows/syn?SERVICE=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfs @Test void servicesSynWfs() { testForward( - "/xplan-gateway/xplan-ows/syn?SERVICE=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfs?SERVICE=WFS"); + "/xplan-gateway/ows/syn?SERVICE=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfs?SERVICE=WFS"); testForward( - "/xplan-gateway/xplan-ows/syn?SErVICE=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfs?SErVICE=WFS"); + "/xplan-gateway/ows/syn?SErVICE=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfs?SErVICE=WFS"); + testDcpUrl("/xplan-gateway/ows/syn?SERVICE=WFS&REQUEST=GetCapabilities&VERSION=1.1.0", + "/xplan-gateway/ows/syn"); + testDcpUrl("/xplan-gateway/ows/syn?SERVICE=WFS&reQuest=GetCapabilities&VERSION=2.0.0", + "/xplan-gateway/ows/syn"); } - // /xplan-ows/syn-pre?SERVICE=WFS -> + // /ows/syn-pre?SERVICE=WFS -> // [xplan-services]/xplansyn-wfs/services/xplansynwfspre @Test void servicesSynPreWfs() { testForward( - "/xplan-gateway/xplan-ows/syn-pre?SERVICE=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfspre?SERVICE=WFS"); + "/xplan-gateway/ows/syn-pre?SERVICE=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfspre?SERVICE=WFS"); testForward( - "/xplan-gateway/xplan-ows/syn-pre?service=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfspre?service=WFS"); + "/xplan-gateway/ows/syn-pre?service=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfspre?service=WFS"); + testDcpUrl("/xplan-gateway/ows/syn-pre?SERVICE=WFS&REQUEST=GetCapabilities&VERSION=1.1.0", + "/xplan-gateway/ows/syn-pre"); + testDcpUrl("/xplan-gateway/ows/syn-pre?SERVICE=WFS&reQuest=GetCapabilities&VERSION=2.0.0", + "/xplan-gateway/ows/syn-pre"); } - // /xplan-ows/syn-archive?SERVICE=WFS -> + // /ows/syn-archive?SERVICE=WFS -> // [xplan-services]/xplansyn-wfs/services/xplansynwfsarchive @Test void servicesSynArchiveWfs() { testForward( - "/xplan-gateway/xplan-ows/syn-archive?SERVICE=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfsarchive?SERVICE=WFS"); + "/xplan-gateway/ows/syn-archive?SERVICE=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfsarchive?SERVICE=WFS"); testForward( - "/xplan-gateway/xplan-ows/syn-archive?SERVice=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfsarchive?SERVice=WFS"); + "/xplan-gateway/ows/syn-archive?SERVice=WFS -> [xplan-services]/xplansyn-wfs/services/xplansynwfsarchive?SERVice=WFS"); + testDcpUrl("/xplan-gateway/ows/syn-archive?SERVICE=WFS&REQUEST=GetCapabilities&VERSION=1.1.0", + "/xplan-gateway/ows/syn-archive"); + testDcpUrl("/xplan-gateway/ows/syn-archive?SERVICE=WFS&reQuest=GetCapabilities&VERSION=2.0.0", + "/xplan-gateway/ows/syn-archive"); } - // /xplan-ows/5.1?SERVICE=WFS etc. -> [xplan-services]/xplan-wfs/services/wfs51 + // /ows/5.1?SERVICE=WFS etc. -> [xplan-services]/xplan-wfs/services/wfs51 // (analog: // wfs40,wfs41,wfs50,wfs51,wfs52,wfs53,wfs54,wfs60) @Test void servicesSynVersionWfs() { - testForward( - "/xplan-gateway/xplan-ows/4.0?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs40?SERVICE=WFS"); - testForward( - "/xplan-gateway/xplan-ows/4.1?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs41?SERVICE=WFS"); - testForward( - "/xplan-gateway/xplan-ows/5.0?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs50?SERVICE=WFS"); - testForward( - "/xplan-gateway/xplan-ows/5.1?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs51?SERVICE=WFS"); - testForward( - "/xplan-gateway/xplan-ows/5.2?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs52?SERVICE=WFS"); - testForward( - "/xplan-gateway/xplan-ows/5.3?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs53?SERVICE=WFS"); - testForward( - "/xplan-gateway/xplan-ows/5.4?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs54?SERVICE=WFS"); - testForward( - "/xplan-gateway/xplan-ows/6.0?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs60?SERVICE=WFS"); + testForward("/xplan-gateway/ows/4.0?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs40?SERVICE=WFS"); + testForward("/xplan-gateway/ows/4.1?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs41?SERVICE=WFS"); + testForward("/xplan-gateway/ows/5.0?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs50?SERVICE=WFS"); + testForward("/xplan-gateway/ows/5.1?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs51?SERVICE=WFS"); + testForward("/xplan-gateway/ows/5.2?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs52?SERVICE=WFS"); + testForward("/xplan-gateway/ows/5.3?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs53?SERVICE=WFS"); + testForward("/xplan-gateway/ows/5.4?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs54?SERVICE=WFS"); + testForward("/xplan-gateway/ows/6.0?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs60?SERVICE=WFS"); + testDcpUrl("/xplan-gateway/ows/6.0?SERVICE=WFS&REQUEST=GetCapabilities&VERSION=1.1.0", + "/xplan-gateway/ows/6.0"); + testDcpUrl("/xplan-gateway/ows/6.0?SERVICE=WFS&reQuest=GetCapabilities&VERSION=2.0.0", + "/xplan-gateway/ows/6.0"); } - // /xplan-ows/5.1-pre?SERVICE=WFS etc. -> [xplan-services]/xplan-wfs/services/wfs51pre + // /ows/5.1-pre?SERVICE=WFS etc. -> [xplan-services]/xplan-wfs/services/wfs51pre // (analog: wfs40pre,wfs41pre,wfs50pre,wfs51pre,wfs52pre,wfs53pre,wfs54pre,wfs60pre) @Test void servicesSynPreVersionWfs() { testForward( - "/xplan-gateway/xplan-ows/4.0-pre?sERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs40pre?sERVICE=WFS"); + "/xplan-gateway/ows/4.0-pre?sERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs40pre?sERVICE=WFS"); testForward( - "/xplan-gateway/xplan-ows/4.1-pre?SeRVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs41pre?SeRVICE=WFS"); + "/xplan-gateway/ows/4.1-pre?SeRVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs41pre?SeRVICE=WFS"); testForward( - "/xplan-gateway/xplan-ows/5.0-pre?SErVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs50pre?SErVICE=WFS"); + "/xplan-gateway/ows/5.0-pre?SErVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs50pre?SErVICE=WFS"); testForward( - "/xplan-gateway/xplan-ows/5.1-pre?SERvICE=WFS -> [xplan-services]/xplan-wfs/services/wfs51pre?SERvICE=WFS"); + "/xplan-gateway/ows/5.1-pre?SERvICE=WFS -> [xplan-services]/xplan-wfs/services/wfs51pre?SERvICE=WFS"); testForward( - "/xplan-gateway/xplan-ows/5.2-pre?SERViCE=WFS -> [xplan-services]/xplan-wfs/services/wfs52pre?SERViCE=WFS"); + "/xplan-gateway/ows/5.2-pre?SERViCE=WFS -> [xplan-services]/xplan-wfs/services/wfs52pre?SERViCE=WFS"); testForward( - "/xplan-gateway/xplan-ows/5.3-pre?SERVIcE=WFS -> [xplan-services]/xplan-wfs/services/wfs53pre?SERVIcE=WFS"); + "/xplan-gateway/ows/5.3-pre?SERVIcE=WFS -> [xplan-services]/xplan-wfs/services/wfs53pre?SERVIcE=WFS"); testForward( - "/xplan-gateway/xplan-ows/5.4-pre?SERVICe=WFS -> [xplan-services]/xplan-wfs/services/wfs54pre?SERVICe=WFS"); + "/xplan-gateway/ows/5.4-pre?SERVICe=WFS -> [xplan-services]/xplan-wfs/services/wfs54pre?SERVICe=WFS"); testForward( - "/xplan-gateway/xplan-ows/6.0-pre?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs60pre?SERVICE=WFS"); + "/xplan-gateway/ows/6.0-pre?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs60pre?SERVICE=WFS"); + testDcpUrl("/xplan-gateway/ows/6.0-pre?SERVICE=WFS&REQUEST=GetCapabilities&VERSION=1.1.0", + "/xplan-gateway/ows/6.0-pre"); + testDcpUrl("/xplan-gateway/ows/6.0-pre?SERVICE=WFS&reQuest=GetCapabilities&VERSION=2.0.0", + "/xplan-gateway/ows/6.0-pre"); } - // /xplan-ows/5.1-archive?SERVICE=WFS etc. -> + // /ows/5.1-archive?SERVICE=WFS etc. -> // [xplan-services]/xplan-wfs/services/wfs51archive (analog: // wfs40archive,wfs41archive,wfs50archive,wfs51archive,wfs52archive,wfs53archive,wfs54archive,wfs60archive) @Test void servicesSynArchiveVersionWfs() { testForward( - "/xplan-gateway/xplan-ows/4.0-archive?sERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs40archive?sERVICE=WFS"); + "/xplan-gateway/ows/4.0-archive?sERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs40archive?sERVICE=WFS"); testForward( - "/xplan-gateway/xplan-ows/4.1-archive?SeRVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs41archive?SeRVICE=WFS"); + "/xplan-gateway/ows/4.1-archive?SeRVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs41archive?SeRVICE=WFS"); testForward( - "/xplan-gateway/xplan-ows/5.0-archive?SErVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs50archive?SErVICE=WFS"); + "/xplan-gateway/ows/5.0-archive?SErVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs50archive?SErVICE=WFS"); testForward( - "/xplan-gateway/xplan-ows/5.1-archive?SERvICE=WFS -> [xplan-services]/xplan-wfs/services/wfs51archive?SERvICE=WFS"); + "/xplan-gateway/ows/5.1-archive?SERvICE=WFS -> [xplan-services]/xplan-wfs/services/wfs51archive?SERvICE=WFS"); testForward( - "/xplan-gateway/xplan-ows/5.2-archive?SERViCE=WFS -> [xplan-services]/xplan-wfs/services/wfs52archive?SERViCE=WFS"); + "/xplan-gateway/ows/5.2-archive?SERViCE=WFS -> [xplan-services]/xplan-wfs/services/wfs52archive?SERViCE=WFS"); testForward( - "/xplan-gateway/xplan-ows/5.3-archive?SERVIcE=WFS -> [xplan-services]/xplan-wfs/services/wfs53archive?SERVIcE=WFS"); + "/xplan-gateway/ows/5.3-archive?SERVIcE=WFS -> [xplan-services]/xplan-wfs/services/wfs53archive?SERVIcE=WFS"); testForward( - "/xplan-gateway/xplan-ows/5.4-archive?SERVICe=WFS -> [xplan-services]/xplan-wfs/services/wfs54archive?SERVICe=WFS"); + "/xplan-gateway/ows/5.4-archive?SERVICe=WFS -> [xplan-services]/xplan-wfs/services/wfs54archive?SERVICe=WFS"); testForward( - "/xplan-gateway/xplan-ows/6.0-archive?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs60archive?SERVICE=WFS"); + "/xplan-gateway/ows/6.0-archive?SERVICE=WFS -> [xplan-services]/xplan-wfs/services/wfs60archive?SERVICE=WFS"); + testDcpUrl("/xplan-gateway/ows/6.0-archive?SERVICE=WFS&REQUEST=GetCapabilities&VERSION=1.1.0", + "/xplan-gateway/ows/6.0-archive"); + testDcpUrl("/xplan-gateway/ows/6.0-archive?SERVICE=WFS&reQuest=GetCapabilities&VERSION=2.0.0", + "/xplan-gateway/ows/6.0-archive"); } // xplan-mapproxy: - // /xplan-ows/cache/tiles/* -> xplan-mapproxy /wmts/1.0.0/* + // /ows/cache/tiles/* -> xplan-mapproxy /wmts/1.0.0/* @Test void mapProxyCacheTilesCapabilities() { - testForward( - "/xplan-gateway/xplan-ows/cache/tiles/WMTSCapabilities.xml -> [xplan-mapproxy]/wmts/1.0.0/WMTSCapabilities.xml"); + testDcpUrlWmtsRest("/xplan-gateway/ows/cache/tiles/WMTSCapabilities.xml", "/xplan-gateway/ows/cache/tiles"); } - // /xplan-ows/cache/tiles/* -> xplan-mapproxy /wmts/1.0.0/wmts/* + // /ows/cache/tiles/* -> xplan-mapproxy /wmts/1.0.0/wmts/* @Test void mapProxyCacheTiles() { - testForward("/xplan-gateway/xplan-ows/cache/tiles/foo -> [xplan-mapproxy]/wmts/1.0.0/wmts/foo"); - testForward("/xplan-gateway/xplan-ows/cache/tiles/foo?x=o -> [xplan-mapproxy]/wmts/1.0.0/wmts/foo?x=o"); + testForward("/xplan-gateway/ows/cache/tiles/foo -> [xplan-mapproxy]/wmts/1.0.0/wmts/foo"); + testForward("/xplan-gateway/ows/cache/tiles/foo?x=o -> [xplan-mapproxy]/wmts/1.0.0/wmts/foo?x=o"); testForward( - "/xplan-gateway/xplan-ows/cache/tiles/bp_raster/TileMatrixSet/TileMatrix/TileCol/TileRow.png -> [xplan-mapproxy]/wmts/1.0.0/wmts/bp_raster/TileMatrixSet/TileMatrix/TileCol/TileRow.png"); + "/xplan-gateway/ows/cache/tiles/bp_raster/TileMatrixSet/TileMatrix/TileCol/TileRow.png -> [xplan-mapproxy]/wmts/1.0.0/wmts/bp_raster/TileMatrixSet/TileMatrix/TileCol/TileRow.png"); } - // /xplan-ows/cache -> xplan-mapproxy /ows + // /ows/cache -> xplan-mapproxy /ows @Test void mapProxyCache() { - testForward("/xplan-gateway/xplan-ows/cache -> [xplan-mapproxy]/ows"); - testForward("/xplan-gateway/xplan-ows/cache?x=y -> [xplan-mapproxy]/ows?x=y"); - + testForward("/xplan-gateway/ows/cache -> [xplan-mapproxy]/ows"); + testForward("/xplan-gateway/ows/cache?x=y -> [xplan-mapproxy]/ows?x=y"); + testDcpUrl("/xplan-gateway/ows/cache?SERVICE=WMTS&reQuest=GetCapabilities&VERSION=1.0.0", + "/xplan-gateway/ows/cache"); // not matched - testNotFound("/xplan-gateway/xplan-ows/cache/foo"); + testNotFound("/xplan-gateway/ows/cache/foo"); } // xplan-mapserver: - // /xplan-ows/raster -> /mapserver + // /ows/raster -> /mapserver @Test void mapServerRaster() { - testForward("/xplan-gateway/xplan-ows/raster -> [xplan-mapserver]/"); - testForward("/xplan-gateway/xplan-ows/raster?foo=456 -> [xplan-mapserver]/?foo=456"); + testForward("/xplan-gateway/ows/raster -> [xplan-mapserver]/"); + testForward("/xplan-gateway/ows/raster?foo=456 -> [xplan-mapserver]/?foo=456"); + testDcpUrl("/xplan-gateway/ows/raster?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/raster"); + testDcpUrl("/xplan-gateway/ows/raster?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/raster"); } - // /xplan-ows/raster-pre -> /mapserver + // /ows/raster-pre -> /mapserver @Test void mapServerRasterPre() { - testForward("/xplan-gateway/xplan-ows/raster-pre -> [xplan-mapserver]/"); + testForward("/xplan-gateway/ows/raster-pre -> [xplan-mapserver]/"); + testDcpUrl("/xplan-gateway/ows/raster-pre?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.1.1", + "/xplan-gateway/ows/raster-pre"); + testDcpUrl("/xplan-gateway/ows/raster-pre?SERVICE=WMS&reQuest=GetCapabilities&VERSION=1.3.0", + "/xplan-gateway/ows/raster-pre"); } - // /xplan-ows/raster/planwerk/{planName} → /mapserver?planname={planName} + // /ows/raster/planwerk/{planName} → /mapserver?planname={planName} @Test void mapServerRasterPlanwerk() { - testForward("/xplan-gateway/xplan-ows/raster/planwerk/myPlan -> [xplan-mapserver]/?planname=myPlan"); + testForward("/xplan-gateway/ows/raster/planwerk/myPlan -> [xplan-mapserver]/?planname=myPlan"); } - // /xplan-ows/raster/planart/{planArt} → /mapserver?planart={planArt} + // /ows/raster/planart/{planArt} → /mapserver?planart={planArt} @Test void mapServerRasterPlanart() { - testForward("/xplan-gateway/xplan-ows/raster/planart/myPlanArt -> [xplan-mapserver]/?planart=myPlanArt"); + testForward("/xplan-gateway/ows/raster/planart/myPlanArt -> [xplan-mapserver]/?planart=myPlanArt"); } /** @@ -370,14 +467,40 @@ class ConfigurationTest { testForward(parts[0].trim(), parts[1].trim()); } + private void testDcpUrl(String requested, String expectedDcpUrlPath) { + webClient.get() + .uri("http://localhost:" + localPort + requested) + .exchange() + .expectBody() + .consumeWith((result) -> { + String body = new String(result.getResponseBody(), StandardCharsets.UTF_8); + String expectedDcpUrl = "http://localhost:" + localPort + expectedDcpUrlPath; + assertThat(body).contains(expectedDcpUrl); + }); + } + + private void testDcpUrlWmtsRest(String requested, String expectedDcpUrlPath) { + webClient.get() + .uri("http://localhost:" + localPort + requested) + .exchange() + .expectBody() + .consumeWith((result) -> { + String body = new String(result.getResponseBody(), StandardCharsets.UTF_8); + String expectedDcpUrl = "http://localhost:" + localPort + expectedDcpUrlPath; + assertThat(body).contains("xlink:href=\"" + expectedDcpUrl + "/WMTSCapabilities.xml\""); + assertThat(body).contains( + "template=\"" + expectedDcpUrl + "/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png\""); + }); + } + private void testForward(String requested, String targetted) { webClient.get() .uri("http://localhost:" + localPort + requested) .exchange() .expectBody() .consumeWith((result) -> { - String body = new String(result.getResponseBody()); - log.info("body={}", body); + String body = new String(result.getResponseBody(), StandardCharsets.UTF_8); + LOG.info("body={}", body); assertEquals(targetted, body); }); } diff --git a/xplan-gateway/src/test/resources/application-test.properties b/xplan-gateway/src/test/resources/application-test.properties index 2f759cdf3..0082a2ee1 100644 --- a/xplan-gateway/src/test/resources/application-test.properties +++ b/xplan-gateway/src/test/resources/application-test.properties @@ -19,5 +19,6 @@ # #L% ### - logging.level.root=error + +xplanbox.gateway.rewrite.public.uri=http://localhost:8095/xplan-gateway \ No newline at end of file diff --git a/xplan-gateway/src/test/resources/capabilities_wfs_1.1.0.xml b/xplan-gateway/src/test/resources/capabilities_wfs_1.1.0.xml new file mode 100644 index 000000000..c186969bf --- /dev/null +++ b/xplan-gateway/src/test/resources/capabilities_wfs_1.1.0.xml @@ -0,0 +1,252 @@ +<WFS_Capabilities version="1.1.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" xmlns="http://www.opengis.net/wfs" xmlns:ows="http://www.opengis.net/ows" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <ows:ServiceIdentification> + <ows:Title>XPlanSynWFS</ows:Title> + <ows:Abstract>Dieser WFS Dienst stellt versionsübergreifende auf dem Standard XPlanung basierende FeatureTypes bereit.</ows:Abstract> + <ows:Keywords> + <ows:Keyword>XPlanung</ows:Keyword> + <ows:Keyword>XPlanGML 6.0</ows:Keyword> + <ows:Keyword>XPlanGML 5.4</ows:Keyword> + <ows:Keyword>XPlanGML 5.3</ows:Keyword> + <ows:Keyword>XPlanGML 5.2</ows:Keyword> + <ows:Keyword>XPlanGML 5.1</ows:Keyword> + <ows:Keyword>XPlanGML 5.0</ows:Keyword> + <ows:Keyword>XPlanGML 4.1</ows:Keyword> + <ows:Keyword>XPlanGML 4.0</ows:Keyword> + <ows:Keyword>WFS</ows:Keyword> + <ows:Keyword>xPlanBox Version 8.0-SNAPSHOT</ows:Keyword> + </ows:Keywords> + <ows:ServiceType>WFS</ows:ServiceType> + <ows:ServiceTypeVersion>2.0.0</ows:ServiceTypeVersion> + <ows:ServiceTypeVersion>1.1.0</ows:ServiceTypeVersion> + <ows:Fees>15</ows:Fees> + <ows:AccessConstraints>16</ows:AccessConstraints> + </ows:ServiceIdentification> + <ows:ServiceProvider> + <ows:ProviderName>1</ows:ProviderName> + <ows:ProviderSite xlink:href="2"/> + <ows:ServiceContact> + <ows:IndividualName>3</ows:IndividualName> + <ows:PositionName>4</ows:PositionName> + <ows:ContactInfo> + <ows:Phone> + <ows:Voice>5</ows:Voice> + <ows:Facsimile/> + </ows:Phone> + <ows:Address> + <ows:DeliveryPoint>7</ows:DeliveryPoint> + <ows:City>8</ows:City> + <ows:AdministrativeArea>9</ows:AdministrativeArea> + <ows:PostalCode>10</ows:PostalCode> + <ows:Country>11</ows:Country> + <ows:ElectronicMailAddress>6</ows:ElectronicMailAddress> + </ows:Address> + <ows:HoursOfService>13</ows:HoursOfService> + <ows:ContactInstructions>14</ows:ContactInstructions> + </ows:ContactInfo> + <ows:Role>PointOfContact</ows:Role> + </ows:ServiceContact> + </ows:ServiceProvider> + <ows:OperationsMetadata> + <ows:Operation name="DescribeFeatureType"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs?"/> + <ows:Post xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs"/> + </ows:HTTP> + </ows:DCP> + <ows:Parameter name="outputFormat"> + <ows:Value>text/xml; subtype="gml/3.2.2"</ows:Value> + <ows:Value>text/xml; subtype="gml/3.1.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/2.1.2</ows:Value> + <ows:Value>text/xml; subtype="gml/3.2.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/3.2.1</ows:Value> + <ows:Value>text/xml; subtype=gml/3.2.2</ows:Value> + <ows:Value>text/xml; subtype=gml/3.0.1</ows:Value> + <ows:Value>text/xml; subtype="gml/3.0.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/3.1.1</ows:Value> + <ows:Value>application/gml+xml; version=2.1</ows:Value> + <ows:Value>application/gml+xml; version=3.0</ows:Value> + <ows:Value>application/gml+xml; version=3.1</ows:Value> + <ows:Value>application/gml+xml; version=3.2</ows:Value> + <ows:Value>text/xml; subtype="gml/2.1.2"</ows:Value> + <ows:Value>text/csv</ows:Value> + <ows:Value>application/geo+json</ows:Value> + </ows:Parameter> + </ows:Operation> + <ows:Operation name="GetCapabilities"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs?"/> + <ows:Post xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs"/> + </ows:HTTP> + </ows:DCP> + <ows:Parameter name="AcceptVersions"> + <ows:Value>2.0.0</ows:Value> + <ows:Value>1.1.0</ows:Value> + </ows:Parameter> + <ows:Parameter name="AcceptFormats"> + <ows:Value>text/xml</ows:Value> + </ows:Parameter> + </ows:Operation> + <ows:Operation name="GetFeature"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs?"/> + <ows:Post xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs"/> + </ows:HTTP> + </ows:DCP> + <ows:Parameter name="resultType"> + <ows:Value>results</ows:Value> + <ows:Value>hits</ows:Value> + </ows:Parameter> + <ows:Parameter name="outputFormat"> + <ows:Value>text/xml; subtype="gml/3.2.2"</ows:Value> + <ows:Value>text/xml; subtype="gml/3.1.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/2.1.2</ows:Value> + <ows:Value>text/xml; subtype="gml/3.2.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/3.2.1</ows:Value> + <ows:Value>text/xml; subtype=gml/3.2.2</ows:Value> + <ows:Value>text/xml; subtype=gml/3.0.1</ows:Value> + <ows:Value>text/xml; subtype="gml/3.0.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/3.1.1</ows:Value> + <ows:Value>application/gml+xml; version=2.1</ows:Value> + <ows:Value>application/gml+xml; version=3.0</ows:Value> + <ows:Value>application/gml+xml; version=3.1</ows:Value> + <ows:Value>application/gml+xml; version=3.2</ows:Value> + <ows:Value>text/xml; subtype="gml/2.1.2"</ows:Value> + <ows:Value>text/csv</ows:Value> + <ows:Value>application/geo+json</ows:Value> + </ows:Parameter> + </ows:Operation> + <ows:Operation name="GetGmlObject"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs?"/> + <ows:Post xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs"/> + </ows:HTTP> + </ows:DCP> + <ows:Parameter name="outputFormat"> + <ows:Value>text/xml; subtype="gml/3.2.2"</ows:Value> + <ows:Value>text/xml; subtype="gml/3.1.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/2.1.2</ows:Value> + <ows:Value>text/xml; subtype="gml/3.2.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/3.2.1</ows:Value> + <ows:Value>text/xml; subtype=gml/3.2.2</ows:Value> + <ows:Value>text/xml; subtype=gml/3.0.1</ows:Value> + <ows:Value>text/xml; subtype="gml/3.0.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/3.1.1</ows:Value> + <ows:Value>application/gml+xml; version=2.1</ows:Value> + <ows:Value>application/gml+xml; version=3.0</ows:Value> + <ows:Value>application/gml+xml; version=3.1</ows:Value> + <ows:Value>application/gml+xml; version=3.2</ows:Value> + <ows:Value>text/xml; subtype="gml/2.1.2"</ows:Value> + <ows:Value>text/csv</ows:Value> + <ows:Value>application/geo+json</ows:Value> + </ows:Parameter> + </ows:Operation> + </ows:OperationsMetadata> + <FeatureTypeList> + <FeatureType> + <Name xmlns:xplan="http://www.deegree.org/xplanung/1/0">xplan:FP_VorbehalteFlaeche</Name> + <Title>FP_VorbehalteFlaeche</Title> + <DefaultSRS>EPSG:25832</DefaultSRS> + <OtherSRS>EPSG:25833</OtherSRS> + <OtherSRS>EPSG:3857</OtherSRS> + <OtherSRS>EPSG:4326</OtherSRS> + <OutputFormats> + <Format>text/xml; subtype="gml/3.2.2"</Format> + <Format>text/xml; subtype="gml/3.1.1"</Format> + <Format>text/xml; subtype=gml/2.1.2</Format> + <Format>text/xml; subtype="gml/3.2.1"</Format> + <Format>text/xml; subtype=gml/3.2.1</Format> + <Format>text/xml; subtype=gml/3.2.2</Format> + <Format>text/xml; subtype=gml/3.0.1</Format> + <Format>text/xml; subtype="gml/3.0.1"</Format> + <Format>text/xml; subtype=gml/3.1.1</Format> + <Format>application/gml+xml; version=2.1</Format> + <Format>application/gml+xml; version=3.0</Format> + <Format>application/gml+xml; version=3.1</Format> + <Format>application/gml+xml; version=3.2</Format> + <Format>text/xml; subtype="gml/2.1.2"</Format> + <Format>text/csv</Format> + <Format>application/geo+json</Format> + </OutputFormats> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.700000 47.200000</ows:LowerCorner> + <ows:UpperCorner>15.100000 55.100000</ows:UpperCorner> + </ows:WGS84BoundingBox> + <MetadataURL type="19139" format="text/xml">http://test/GetRecords?id=17</MetadataURL> + </FeatureType> + </FeatureTypeList> + <ogc:Filter_Capabilities> + <ogc:Spatial_Capabilities> + <ogc:GeometryOperands> + <ogc:GeometryOperand>gml:Envelope</ogc:GeometryOperand> + <ogc:GeometryOperand>gml:Point</ogc:GeometryOperand> + <ogc:GeometryOperand>gml:LineString</ogc:GeometryOperand> + <ogc:GeometryOperand>gml:Polygon</ogc:GeometryOperand> + <ogc:GeometryOperand>gml:ArcByCenterPoint</ogc:GeometryOperand> + <ogc:GeometryOperand>gml:CircleByCenterPoint</ogc:GeometryOperand> + <ogc:GeometryOperand>gml:Arc</ogc:GeometryOperand> + <ogc:GeometryOperand>gml:Circle</ogc:GeometryOperand> + <ogc:GeometryOperand>gml:ArcByBulge</ogc:GeometryOperand> + </ogc:GeometryOperands> + <ogc:SpatialOperators> + <ogc:SpatialOperator name="BBOX"/> + <ogc:SpatialOperator name="Equals"/> + <ogc:SpatialOperator name="Disjoint"/> + <ogc:SpatialOperator name="Intersects"/> + <ogc:SpatialOperator name="Touches"/> + <ogc:SpatialOperator name="Crosses"/> + <ogc:SpatialOperator name="Within"/> + <ogc:SpatialOperator name="Contains"/> + <ogc:SpatialOperator name="Overlaps"/> + <ogc:SpatialOperator name="Beyond"/> + <ogc:SpatialOperator name="DWithin"/> + </ogc:SpatialOperators> + </ogc:Spatial_Capabilities> + <ogc:Scalar_Capabilities> + <ogc:LogicalOperators/> + <ogc:ComparisonOperators> + <ogc:ComparisonOperator>LessThan</ogc:ComparisonOperator> + <ogc:ComparisonOperator>GreaterThan</ogc:ComparisonOperator> + <ogc:ComparisonOperator>LessThanEqualTo</ogc:ComparisonOperator> + <ogc:ComparisonOperator>GreaterThanEqualTo</ogc:ComparisonOperator> + <ogc:ComparisonOperator>EqualTo</ogc:ComparisonOperator> + <ogc:ComparisonOperator>NotEqualTo</ogc:ComparisonOperator> + <ogc:ComparisonOperator>Like</ogc:ComparisonOperator> + <ogc:ComparisonOperator>Between</ogc:ComparisonOperator> + <ogc:ComparisonOperator>NullCheck</ogc:ComparisonOperator> + </ogc:ComparisonOperators> + <ogc:ArithmeticOperators> + <ogc:SimpleArithmetic/> + <ogc:Functions> + <ogc:FunctionNames> + <ogc:FunctionName nArgs="1">Area</ogc:FunctionName> + <ogc:FunctionName nArgs="1">Centroid</ogc:FunctionName> + <ogc:FunctionName nArgs="2">env</ogc:FunctionName> + <ogc:FunctionName nArgs="1">ExtraProp</ogc:FunctionName> + <ogc:FunctionName nArgs="2">GeometryFromWKT</ogc:FunctionName> + <ogc:FunctionName nArgs="0">GetCurrentScale</ogc:FunctionName> + <ogc:FunctionName nArgs="2">HatchingDistance</ogc:FunctionName> + <ogc:FunctionName nArgs="2">IDiv</ogc:FunctionName> + <ogc:FunctionName nArgs="2">IMod</ogc:FunctionName> + <ogc:FunctionName nArgs="1">InteriorPoint</ogc:FunctionName> + <ogc:FunctionName nArgs="1">IsCurve</ogc:FunctionName> + <ogc:FunctionName nArgs="1">IsPoint</ogc:FunctionName> + <ogc:FunctionName nArgs="1">IsSurface</ogc:FunctionName> + <ogc:FunctionName nArgs="1">Length</ogc:FunctionName> + <ogc:FunctionName nArgs="1">Lower</ogc:FunctionName> + <ogc:FunctionName nArgs="1">MoveGeometry</ogc:FunctionName> + <ogc:FunctionName nArgs="0">Now</ogc:FunctionName> + <ogc:FunctionName nArgs="1">Upper</ogc:FunctionName> + </ogc:FunctionNames> + </ogc:Functions> + </ogc:ArithmeticOperators> + </ogc:Scalar_Capabilities> + <ogc:Id_Capabilities> + <ogc:EID/> + <ogc:FID/> + </ogc:Id_Capabilities> + </ogc:Filter_Capabilities> +</WFS_Capabilities> \ No newline at end of file diff --git a/xplan-gateway/src/test/resources/capabilities_wfs_2.0.0.xml b/xplan-gateway/src/test/resources/capabilities_wfs_2.0.0.xml new file mode 100644 index 000000000..9c790d35e --- /dev/null +++ b/xplan-gateway/src/test/resources/capabilities_wfs_2.0.0.xml @@ -0,0 +1,634 @@ +<WFS_Capabilities version="2.0.0" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd" xmlns="http://www.opengis.net/wfs/2.0" xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:ogc="http://www.opengis.net/ogc" xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <ows:ServiceIdentification> + <ows:Title>XPlanSynWFS</ows:Title> + <ows:Abstract>Dieser WFS Dienst stellt versionsübergreifende auf dem Standard XPlanung basierende FeatureTypes bereit.</ows:Abstract> + <ows:Keywords> + <ows:Keyword>XPlanung</ows:Keyword> + <ows:Keyword>XPlanGML 6.0</ows:Keyword> + <ows:Keyword>XPlanGML 5.4</ows:Keyword> + <ows:Keyword>XPlanGML 5.3</ows:Keyword> + <ows:Keyword>XPlanGML 5.2</ows:Keyword> + <ows:Keyword>XPlanGML 5.1</ows:Keyword> + <ows:Keyword>XPlanGML 5.0</ows:Keyword> + <ows:Keyword>XPlanGML 4.1</ows:Keyword> + <ows:Keyword>XPlanGML 4.0</ows:Keyword> + <ows:Keyword>WFS</ows:Keyword> + <ows:Keyword>xPlanBox Version 8.0-SNAPSHOT</ows:Keyword> + </ows:Keywords> + <ows:ServiceType codeSpace="http://www.opengeospatial.org/">WFS</ows:ServiceType> + <ows:ServiceTypeVersion>2.0.0</ows:ServiceTypeVersion> + <ows:ServiceTypeVersion>1.1.0</ows:ServiceTypeVersion> + <ows:Fees>15</ows:Fees> + <ows:AccessConstraints>16</ows:AccessConstraints> + </ows:ServiceIdentification> + <ows:ServiceProvider> + <ows:ProviderName>1</ows:ProviderName> + <ows:ProviderSite xlink:href="2"/> + <ows:ServiceContact> + <ows:IndividualName>3</ows:IndividualName> + <ows:PositionName>4</ows:PositionName> + <ows:ContactInfo> + <ows:Phone> + <ows:Voice>5</ows:Voice> + <ows:Facsimile/> + </ows:Phone> + <ows:Address> + <ows:DeliveryPoint>7</ows:DeliveryPoint> + <ows:City>8</ows:City> + <ows:AdministrativeArea>9</ows:AdministrativeArea> + <ows:PostalCode>10</ows:PostalCode> + <ows:Country>11</ows:Country> + <ows:ElectronicMailAddress>6</ows:ElectronicMailAddress> + </ows:Address> + <ows:HoursOfService>13</ows:HoursOfService> + <ows:ContactInstructions>14</ows:ContactInstructions> + </ows:ContactInfo> + <ows:Role>PointOfContact</ows:Role> + </ows:ServiceContact> + </ows:ServiceProvider> + <ows:OperationsMetadata> + <ows:Operation name="GetCapabilities"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs?"/> + <ows:Post xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs"/> + </ows:HTTP> + </ows:DCP> + <ows:Parameter name="AcceptVersions"> + <ows:AllowedValues> + <ows:Value>2.0.0</ows:Value> + <ows:Value>1.1.0</ows:Value> + </ows:AllowedValues> + </ows:Parameter> + <ows:Parameter name="AcceptFormats"> + <ows:AllowedValues> + <ows:Value>text/xml</ows:Value> + </ows:AllowedValues> + </ows:Parameter> + <ows:Parameter name="Sections"> + <ows:AllowedValues> + <ows:Value>ServiceIdentification</ows:Value> + <ows:Value>ServiceProvider</ows:Value> + <ows:Value>OperationsMetadata</ows:Value> + <ows:Value>FeatureTypeList</ows:Value> + <ows:Value>Filter_Capabilities</ows:Value> + </ows:AllowedValues> + </ows:Parameter> + </ows:Operation> + <ows:Operation name="DescribeFeatureType"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs?"/> + <ows:Post xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs"/> + </ows:HTTP> + </ows:DCP> + </ows:Operation> + <ows:Operation name="ListStoredQueries"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs?"/> + <ows:Post xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs"/> + </ows:HTTP> + </ows:DCP> + </ows:Operation> + <ows:Operation name="DescribeStoredQueries"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs?"/> + <ows:Post xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs"/> + </ows:HTTP> + </ows:DCP> + </ows:Operation> + <ows:Operation name="GetFeature"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs?"/> + <ows:Post xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs"/> + </ows:HTTP> + </ows:DCP> + </ows:Operation> + <ows:Operation name="GetPropertyValue"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs?"/> + <ows:Post xlink:href="http://localhost:8095/xplansyn-wfs/services/xplansynwfs"/> + </ows:HTTP> + </ows:DCP> + </ows:Operation> + <ows:Parameter name="version"> + <ows:AllowedValues> + <ows:Value>2.0.0</ows:Value> + <ows:Value>1.1.0</ows:Value> + </ows:AllowedValues> + </ows:Parameter> + <ows:Parameter name="srsName"> + <ows:AllowedValues> + <ows:Value>EPSG:25832</ows:Value> + <ows:Value>EPSG:25833</ows:Value> + <ows:Value>EPSG:3857</ows:Value> + <ows:Value>EPSG:4326</ows:Value> + </ows:AllowedValues> + </ows:Parameter> + <ows:Parameter name="outputFormat"> + <ows:AllowedValues> + <ows:Value>text/xml; subtype="gml/3.2.2"</ows:Value> + <ows:Value>text/xml; subtype="gml/3.1.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/2.1.2</ows:Value> + <ows:Value>text/xml; subtype="gml/3.2.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/3.2.1</ows:Value> + <ows:Value>text/xml; subtype=gml/3.2.2</ows:Value> + <ows:Value>text/xml; subtype=gml/3.0.1</ows:Value> + <ows:Value>text/xml; subtype="gml/3.0.1"</ows:Value> + <ows:Value>text/xml; subtype=gml/3.1.1</ows:Value> + <ows:Value>application/gml+xml; version=2.1</ows:Value> + <ows:Value>application/gml+xml; version=3.0</ows:Value> + <ows:Value>application/gml+xml; version=3.1</ows:Value> + <ows:Value>application/gml+xml; version=3.2</ows:Value> + <ows:Value>text/xml; subtype="gml/2.1.2"</ows:Value> + <ows:Value>text/csv</ows:Value> + <ows:Value>application/geo+json</ows:Value> + </ows:AllowedValues> + </ows:Parameter> + <ows:Parameter name="resolve"> + <ows:AllowedValues> + <ows:Value>none</ows:Value> + <ows:Value>local</ows:Value> + <ows:Value>remote</ows:Value> + <ows:Value>all</ows:Value> + </ows:AllowedValues> + </ows:Parameter> + <ows:Constraint name="ImplementsSimpleWFS"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ImplementsBasicWFS"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ImplementsTransactionalWFS"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ImplementsLockingWFS"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="KVPEncoding"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="XMLEncoding"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="SOAPEncoding"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ImplementsInheritance"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ImplementsRemoteResolve"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ImplementsResultPaging"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ImplementsStandardJoins"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ImplementsSpatialJoins"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ImplementsTemporalJoins"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ImplementsFeatureVersioning"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ManageStoredQueries"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="CountDefault"> + <ows:NoValues/> + <ows:DefaultValue>15000</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="ResolveLocalScope"> + <ows:NoValues/> + <ows:DefaultValue>*</ows:DefaultValue> + </ows:Constraint> + <ows:Constraint name="QueryExpressions"> + <ows:AllowedValues> + <ows:Value>wfs:Query</ows:Value> + <ows:Value>wfs:StoredQuery</ows:Value> + </ows:AllowedValues> + </ows:Constraint> + </ows:OperationsMetadata> + <FeatureTypeList> + <FeatureType> + <Name xmlns:xplan="http://www.deegree.org/xplanung/1/0">xplan:FP_VorbehalteFlaeche</Name> + <Title>FP_VorbehalteFlaeche</Title> + <DefaultCRS>EPSG:25832</DefaultCRS> + <OtherCRS>EPSG:25833</OtherCRS> + <OtherCRS>EPSG:3857</OtherCRS> + <OtherCRS>EPSG:4326</OtherCRS> + <OutputFormats> + <Format>text/xml; subtype="gml/3.2.2"</Format> + <Format>text/xml; subtype="gml/3.1.1"</Format> + <Format>text/xml; subtype=gml/2.1.2</Format> + <Format>text/xml; subtype="gml/3.2.1"</Format> + <Format>text/xml; subtype=gml/3.2.1</Format> + <Format>text/xml; subtype=gml/3.2.2</Format> + <Format>text/xml; subtype=gml/3.0.1</Format> + <Format>text/xml; subtype="gml/3.0.1"</Format> + <Format>text/xml; subtype=gml/3.1.1</Format> + <Format>application/gml+xml; version=2.1</Format> + <Format>application/gml+xml; version=3.0</Format> + <Format>application/gml+xml; version=3.1</Format> + <Format>application/gml+xml; version=3.2</Format> + <Format>text/xml; subtype="gml/2.1.2"</Format> + <Format>text/csv</Format> + <Format>application/geo+json</Format> + </OutputFormats> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.700000 47.200000</ows:LowerCorner> + <ows:UpperCorner>15.100000 55.100000</ows:UpperCorner> + </ows:WGS84BoundingBox> + <MetadataURL xlink:href="http://test/GetRecords?id=17"/> + </FeatureType> + </FeatureTypeList> + <fes:Filter_Capabilities> + <fes:Conformance> + <fes:Constraint name="ImplementsQuery"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsAdHocQuery"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsFunctions"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsResourceId"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsMinStandardFilter"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsStandardFilter"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsMinSpatialFilter"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsSpatialFilter"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsMinTemporalFilter"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsTemporalFilter"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsVersionNav"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsSorting"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsExtendedOperators"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsMinimumXPath"> + <ows:NoValues/> + <ows:DefaultValue>TRUE</ows:DefaultValue> + </fes:Constraint> + <fes:Constraint name="ImplementsSchemaElementFunc"> + <ows:NoValues/> + <ows:DefaultValue>FALSE</ows:DefaultValue> + </fes:Constraint> + </fes:Conformance> + <fes:Id_Capabilities> + <fes:ResourceIdentifier name="fes:ResourceId"/> + </fes:Id_Capabilities> + <fes:Scalar_Capabilities> + <fes:LogicalOperators/> + <fes:ComparisonOperators> + <fes:ComparisonOperator name="PropertyIsEqualTo"/> + <fes:ComparisonOperator name="PropertyIsNotEqualTo"/> + <fes:ComparisonOperator name="PropertyIsLessThan"/> + <fes:ComparisonOperator name="PropertyIsGreaterThan"/> + <fes:ComparisonOperator name="PropertyIsLessThanOrEqualTo"/> + <fes:ComparisonOperator name="PropertyIsGreaterThanOrEqualTo"/> + <fes:ComparisonOperator name="PropertyIsLike"/> + <fes:ComparisonOperator name="PropertyIsNull"/> + <fes:ComparisonOperator name="PropertyIsNil"/> + <fes:ComparisonOperator name="PropertyIsBetween"/> + </fes:ComparisonOperators> + </fes:Scalar_Capabilities> + <fes:Spatial_Capabilities> + <fes:GeometryOperands xmlns:gml32="http://www.opengis.net/gml/3.2"> + <fes:GeometryOperand name="gml:Box"/> + <fes:GeometryOperand name="gml:Envelope"/> + <fes:GeometryOperand name="gml:Point"/> + <fes:GeometryOperand name="gml:LineString"/> + <fes:GeometryOperand name="gml:Curve"/> + <fes:GeometryOperand name="gml:Polygon"/> + <fes:GeometryOperand name="gml:Surface"/> + <fes:GeometryOperand name="gml:MultiPoint"/> + <fes:GeometryOperand name="gml:MultiLineString"/> + <fes:GeometryOperand name="gml:MultiCurve"/> + <fes:GeometryOperand name="gml:MultiPolygon"/> + <fes:GeometryOperand name="gml:MultiSurface"/> + <fes:GeometryOperand name="gml:CompositeCurve"/> + <fes:GeometryOperand name="gml:CompositeSurface"/> + <fes:GeometryOperand name="gml32:Envelope"/> + <fes:GeometryOperand name="gml32:Point"/> + <fes:GeometryOperand name="gml32:LineString"/> + <fes:GeometryOperand name="gml32:Curve"/> + <fes:GeometryOperand name="gml32:Polygon"/> + <fes:GeometryOperand name="gml32:Surface"/> + <fes:GeometryOperand name="gml32:MultiPoint"/> + <fes:GeometryOperand name="gml32:MultiLineString"/> + <fes:GeometryOperand name="gml32:MultiCurve"/> + <fes:GeometryOperand name="gml32:MultiPolygon"/> + <fes:GeometryOperand name="gml32:MultiSurface"/> + <fes:GeometryOperand name="gml32:CompositeCurve"/> + <fes:GeometryOperand name="gml32:CompositeSurface"/> + </fes:GeometryOperands> + <fes:SpatialOperators> + <fes:SpatialOperator name="BBOX"/> + <fes:SpatialOperator name="Equals"/> + <fes:SpatialOperator name="Disjoint"/> + <fes:SpatialOperator name="Intersects"/> + <fes:SpatialOperator name="Touches"/> + <fes:SpatialOperator name="Crosses"/> + <fes:SpatialOperator name="Within"/> + <fes:SpatialOperator name="Contains"/> + <fes:SpatialOperator name="Overlaps"/> + <fes:SpatialOperator name="Beyond"/> + <fes:SpatialOperator name="DWithin"/> + </fes:SpatialOperators> + </fes:Spatial_Capabilities> + <fes:Temporal_Capabilities> + <fes:TemporalOperands xmlns:gml32="http://www.opengis.net/gml/3.2"> + <fes:TemporalOperand name="gml:TimeInstant"/> + <fes:TemporalOperand name="gml:TimePeriod"/> + <fes:TemporalOperand name="gml32:TimeInstant"/> + <fes:TemporalOperand name="gml32:TimePeriod"/> + </fes:TemporalOperands> + <fes:TemporalOperators> + <fes:TemporalOperator name="After"/> + <fes:TemporalOperator name="Before"/> + <fes:TemporalOperator name="During"/> + <fes:TemporalOperator name="TEquals"/> + </fes:TemporalOperators> + </fes:Temporal_Capabilities> + <fes:Functions> + <fes:Function name="Area"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type>gml:_Geometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="Area"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:gml32="http://www.opengis.net/gml/3.2">gml32:AbstractGeometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="Centroid"> + <fes:Returns>gml:Point</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type>gml:_Geometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="Centroid"> + <fes:Returns xmlns:gml32="http://www.opengis.net/gml/3.2">gml32:Point</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:gml32="http://www.opengis.net/gml/3.2">gml32:AbstractGeometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="env"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:anyType</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:string</fes:Type> + </fes:Argument> + <fes:Argument name="arg2"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:anyType</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="ExtraProp"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:anyType</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:string</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="GeometryFromWKT"> + <fes:Returns>gml:_Geometry</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:string</fes:Type> + </fes:Argument> + <fes:Argument name="arg2"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:string</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="GeometryFromWKT"> + <fes:Returns xmlns:gml32="http://www.opengis.net/gml/3.2">gml32:AbstractGeometry</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:string</fes:Type> + </fes:Argument> + <fes:Argument name="arg2"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:string</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="GetCurrentScale"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Returns> + </fes:Function> + <fes:Function name="HatchingDistance"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Type> + </fes:Argument> + <fes:Argument name="arg2"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="IDiv"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:integer</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:integer</fes:Type> + </fes:Argument> + <fes:Argument name="arg2"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:integer</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="IMod"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:integer</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:integer</fes:Type> + </fes:Argument> + <fes:Argument name="arg2"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:integer</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="InteriorPoint"> + <fes:Returns>gml:Point</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type>gml:_Geometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="InteriorPoint"> + <fes:Returns xmlns:gml32="http://www.opengis.net/gml/3.2">gml32:Point</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:gml32="http://www.opengis.net/gml/3.2">gml32:AbstractGeometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="IsCurve"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:boolean</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type>gml:_Geometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="IsCurve"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:boolean</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:gml32="http://www.opengis.net/gml/3.2">gml32:AbstractGeometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="IsPoint"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:boolean</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type>gml:_Geometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="IsPoint"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:boolean</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:gml32="http://www.opengis.net/gml/3.2">gml32:AbstractGeometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="IsSurface"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:boolean</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type>gml:_Geometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="IsSurface"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:boolean</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:gml32="http://www.opengis.net/gml/3.2">gml32:AbstractGeometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="Length"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type>gml:_Geometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="Length"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:gml32="http://www.opengis.net/gml/3.2">gml32:AbstractGeometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="Lower"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:integer</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="MoveGeometry"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type>gml:_Geometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="MoveGeometry"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:gml32="http://www.opengis.net/gml/3.2">gml32:AbstractGeometry</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + <fes:Function name="Now"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:anyType</fes:Returns> + </fes:Function> + <fes:Function name="Upper"> + <fes:Returns xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:integer</fes:Returns> + <fes:Arguments> + <fes:Argument name="arg1"> + <fes:Type xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:double</fes:Type> + </fes:Argument> + </fes:Arguments> + </fes:Function> + </fes:Functions> + </fes:Filter_Capabilities> +</WFS_Capabilities> \ No newline at end of file diff --git a/xplan-gateway/src/test/resources/capabilities_wms_1.1.1.xml b/xplan-gateway/src/test/resources/capabilities_wms_1.1.1.xml new file mode 100644 index 000000000..bfd72eecf --- /dev/null +++ b/xplan-gateway/src/test/resources/capabilities_wms_1.1.1.xml @@ -0,0 +1,235 @@ +<!DOCTYPE WMT_MS_Capabilities SYSTEM "http://localhost:8095/xplan-validator-wms/services/wms?request=DTD"> +<WMT_MS_Capabilities version="1.1.1" updateSequence="0"> + <Service> + <Name>OGC:WMS</Name> + <Title>My own OGC service</Title> + <Abstract>An OGC service with unconfigured metadata (needs configuration)</Abstract> + <OnlineResource xlink:type="simple" xlink:href="https://www.deegree.org" + xmlns:xlink="http://www.w3.org/1999/xlink"/> + <ContactInformation> + <ContactPersonPrimary> + <ContactPerson>Gerhard Mercator</ContactPerson> + <ContactOrganization>deegree</ContactOrganization> + </ContactPersonPrimary> + <ContactPosition>Geographer</ContactPosition> + <ContactAddress> + <AddressType>postal</AddressType> + <Address>9450 SW Gemini Dr #42523</Address> + <City>Beaverton</City> + <StateOrProvince>OR</StateOrProvince> + <PostCode>97008</PostCode> + <Country>USA</Country> + </ContactAddress> + <ContactVoiceTelephone>0000/000000</ContactVoiceTelephone> + <ContactFacsimileTelephone>0000/000000</ContactFacsimileTelephone> + <ContactElectronicMailAddress>info@example.com</ContactElectronicMailAddress> + </ContactInformation> + </Service> + <Capability> + <Request> + <GetCapabilities> + <Format>application/vnd.ogc.wms_xml</Format> + <DCPType> + <HTTP> + <Get> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?" + xmlns:xlink="http://www.w3.org/1999/xlink"/> + </Get> + </HTTP> + </DCPType> + </GetCapabilities> + <GetMap> + <Format>image/png</Format> + <Format>image/png; subtype=8bit</Format> + <Format>image/png; mode=8bit</Format> + <Format>image/gif</Format> + <Format>image/jpeg</Format> + <Format>image/tiff</Format> + <Format>image/x-ms-bmp</Format> + <Format>image/svg+xml</Format> + <DCPType> + <HTTP> + <Get> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?" + xmlns:xlink="http://www.w3.org/1999/xlink"/> + </Get> + </HTTP> + </DCPType> + </GetMap> + <GetFeatureInfo> + <Format>application/vnd.ogc.gml</Format> + <Format>text/xml</Format> + <Format>text/plain</Format> + <Format>text/html</Format> + <Format>application/gml+xml; version=2.1</Format> + <Format>application/gml+xml; version=3.0</Format> + <Format>application/gml+xml; version=3.1</Format> + <Format>application/gml+xml; version=3.2</Format> + <Format>text/xml; subtype=gml/2.1.2</Format> + <Format>text/xml; subtype=gml/3.0.1</Format> + <Format>text/xml; subtype=gml/3.1.1</Format> + <Format>text/xml; subtype=gml/3.2.1</Format> + <DCPType> + <HTTP> + <Get> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?" + xmlns:xlink="http://www.w3.org/1999/xlink"/> + </Get> + </HTTP> + </DCPType> + </GetFeatureInfo> + <GetLegendGraphic> + <Format>image/png</Format> + <Format>image/png; subtype=8bit</Format> + <Format>image/png; mode=8bit</Format> + <Format>image/gif</Format> + <Format>image/jpeg</Format> + <Format>image/tiff</Format> + <Format>image/x-ms-bmp</Format> + <Format>image/svg+xml</Format> + <DCPType> + <HTTP> + <Get> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?" + xmlns:xlink="http://www.w3.org/1999/xlink"/> + </Get> + </HTTP> + </DCPType> + </GetLegendGraphic> + </Request> + <Exception> + <Format>application/vnd.ogc.se_blank</Format> + <Format>application/vnd.ogc.se_xml</Format> + <Format>application/vnd.ogc.se_inimage</Format> + </Exception> + <Layer queryable="1" cascaded="0" opaque="0" noSubsets="0" fixedWidth="0" fixedHeight="0"> + <Name>vektordaten</Name> + <Title>Vektordaten</Title> + <Abstract>RP_Plan</Abstract> + <SRS>EPSG:25832</SRS> + <SRS>EPSG:25833</SRS> + <SRS>EPSG:31466</SRS> + <SRS>EPSG:31467</SRS> + <SRS>EPSG:31468</SRS> + <SRS>EPSG:31469</SRS> + <SRS>EPSG:4258</SRS> + <SRS>EPSG:4326</SRS> + <SRS>CRS:84</SRS> + <SRS>EPSG:4839</SRS> + <LatLonBoundingBox minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="EPSG:25832" minx="250063.80760146" miny="5227492.39570412" maxx="961955.35698518" + maxy="6122928.56399645"/> + <BoundingBox SRS="EPSG:25833" minx="-204149.38879392" miny="5227394.62429754" maxx="507574.14116822" + maxy="6145502.65351213"/> + <BoundingBox SRS="EPSG:31466" minx="2477313.97691046" miny="5229085.18660450" maxx="3189339.76716774" + maxy="6145840.30975845"/> + <BoundingBox SRS="EPSG:31467" minx="3250040.42709215" miny="5229144.12350925" maxx="3962218.19360996" + maxy="6124942.70282722"/> + <BoundingBox SRS="EPSG:31468" minx="4022820.18429920" miny="5229250.38502155" maxx="4734992.65094137" + maxy="6126068.72270925"/> + <BoundingBox SRS="EPSG:31469" minx="4795707.79828440" miny="5229041.40993566" maxx="5507717.12548004" + maxy="6147512.02121381"/> + <BoundingBox SRS="EPSG:4258" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="EPSG:4326" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="CRS:84" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="EPSG:4839" minx="-422188.91820422" miny="-363956.39118610" maxx="466200.59842974" + maxy="348811.76160559"/> + <Layer queryable="1" cascaded="0" opaque="0" noSubsets="0" fixedWidth="0" fixedHeight="0"> + <Name>bp_objekte</Name> + <Title>BP Objekte</Title> + <Abstract>BP_RasterplanAenderung</Abstract> + <SRS>EPSG:25832</SRS> + <SRS>EPSG:25833</SRS> + <SRS>EPSG:31466</SRS> + <SRS>EPSG:31467</SRS> + <SRS>EPSG:31468</SRS> + <SRS>EPSG:31469</SRS> + <SRS>EPSG:4258</SRS> + <SRS>EPSG:4326</SRS> + <SRS>CRS:84</SRS> + <SRS>EPSG:4839</SRS> + <LatLonBoundingBox minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="EPSG:25832" minx="250063.80760146" miny="5227492.39570412" maxx="961955.35698518" + maxy="6122928.56399645"/> + <BoundingBox SRS="EPSG:25833" minx="-204149.38879392" miny="5227394.62429754" maxx="507574.14116822" + maxy="6145502.65351213"/> + <BoundingBox SRS="EPSG:31466" minx="2477313.97691046" miny="5229085.18660450" maxx="3189339.76716774" + maxy="6145840.30975845"/> + <BoundingBox SRS="EPSG:31467" minx="3250040.42709215" miny="5229144.12350925" maxx="3962218.19360996" + maxy="6124942.70282722"/> + <BoundingBox SRS="EPSG:31468" minx="4022820.18429920" miny="5229250.38502155" maxx="4734992.65094137" + maxy="6126068.72270925"/> + <BoundingBox SRS="EPSG:31469" minx="4795707.79828440" miny="5229041.40993566" maxx="5507717.12548004" + maxy="6147512.02121381"/> + <BoundingBox SRS="EPSG:4258" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="EPSG:4326" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="CRS:84" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="EPSG:4839" minx="-422188.91820422" miny="-363956.39118610" maxx="466200.59842974" + maxy="348811.76160559"/> + <Layer queryable="1" cascaded="0" opaque="0" noSubsets="0" fixedWidth="0" fixedHeight="0"> + <Name>bp_rasterplanaenderung</Name> + <Title>BP_RasterplanAenderung</Title> + <Abstract>BP_RasterplanAenderung</Abstract> + <SRS>EPSG:25832</SRS> + <SRS>EPSG:25833</SRS> + <SRS>EPSG:31466</SRS> + <SRS>EPSG:31467</SRS> + <SRS>EPSG:31468</SRS> + <SRS>EPSG:31469</SRS> + <SRS>EPSG:4258</SRS> + <SRS>EPSG:4326</SRS> + <SRS>CRS:84</SRS> + <SRS>EPSG:4839</SRS> + <LatLonBoundingBox minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="EPSG:25832" minx="250063.80760146" miny="5227492.39570412" maxx="961955.35698518" + maxy="6122928.56399645"/> + <BoundingBox SRS="EPSG:25833" minx="-204149.38879392" miny="5227394.62429754" maxx="507574.14116822" + maxy="6145502.65351213"/> + <BoundingBox SRS="EPSG:31466" minx="2477313.97691046" miny="5229085.18660450" maxx="3189339.76716774" + maxy="6145840.30975845"/> + <BoundingBox SRS="EPSG:31467" minx="3250040.42709215" miny="5229144.12350925" maxx="3962218.19360996" + maxy="6124942.70282722"/> + <BoundingBox SRS="EPSG:31468" minx="4022820.18429920" miny="5229250.38502155" maxx="4734992.65094137" + maxy="6126068.72270925"/> + <BoundingBox SRS="EPSG:31469" minx="4795707.79828440" miny="5229041.40993566" maxx="5507717.12548004" + maxy="6147512.02121381"/> + <BoundingBox SRS="EPSG:4258" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="EPSG:4326" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="CRS:84" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox SRS="EPSG:4839" minx="-422188.91820422" miny="-363956.39118610" maxx="466200.59842974" + maxy="348811.76160559"/> + <Style> + <Name>vollflaechig</Name> + <Title>vollflaechig</Title> + <LegendURL width="190" height="27"> + <Format>image/png</Format> + <OnlineResource xlink:type="simple" + xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?request=GetLegendGraphic&version=1.1.1&service=WMS&layer=bp_rasterplanaenderung&style=vollflaechig&format=image/png" + xmlns:xlink="http://www.w3.org/1999/xlink"/> + </LegendURL> + </Style> + <Style> + <Name>transparent</Name> + <Title>transparent</Title> + <LegendURL width="32" height="81"> + <Format>image/png</Format> + <OnlineResource xlink:type="simple" + xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?request=GetLegendGraphic&version=1.1.1&service=WMS&layer=bp_rasterplanaenderung&style=transparent&format=image/png" + xmlns:xlink="http://www.w3.org/1999/xlink"/> + </LegendURL> + </Style> + <Style> + <Name>default</Name> + <Title>default</Title> + <LegendURL width="190" height="27"> + <Format>image/png</Format> + <OnlineResource xlink:type="simple" + xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?request=GetLegendGraphic&version=1.1.1&service=WMS&layer=bp_rasterplanaenderung&style=vollflaechig&format=image/png" + xmlns:xlink="http://www.w3.org/1999/xlink"/> + </LegendURL> + </Style> + </Layer> + </Layer> + </Layer> + </Capability> +</WMT_MS_Capabilities> \ No newline at end of file diff --git a/xplan-gateway/src/test/resources/capabilities_wms_1.3.0.xml b/xplan-gateway/src/test/resources/capabilities_wms_1.3.0.xml new file mode 100644 index 000000000..d679a45bb --- /dev/null +++ b/xplan-gateway/src/test/resources/capabilities_wms_1.3.0.xml @@ -0,0 +1,272 @@ +<WMS_Capabilities version="1.3.0" updateSequence="0" + xsi:schemaLocation="http://www.opengis.net/wms https://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd http://www.opengis.net/sld https://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd" + xmlns="http://www.opengis.net/wms" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sld="http://www.opengis.net/sld"> + <Service> + <Name>WMS</Name> + <Title>My own OGC service</Title> + <Abstract>An OGC service with unconfigured metadata (needs configuration)</Abstract> + <OnlineResource xlink:type="simple" xlink:href="https://www.deegree.org"/> + <ContactInformation> + <ContactPersonPrimary> + <ContactPerson>Gerhard Mercator</ContactPerson> + <ContactOrganization>deegree</ContactOrganization> + </ContactPersonPrimary> + <ContactPosition>Geographer</ContactPosition> + <ContactAddress> + <AddressType>postal</AddressType> + <Address>9450 SW Gemini Dr #42523</Address> + <City>Beaverton</City> + <StateOrProvince>OR</StateOrProvince> + <PostCode>97008</PostCode> + <Country>USA</Country> + </ContactAddress> + <ContactVoiceTelephone>0000/000000</ContactVoiceTelephone> + <ContactFacsimileTelephone>0000/000000</ContactFacsimileTelephone> + <ContactElectronicMailAddress>info@example.com</ContactElectronicMailAddress> + </ContactInformation> + <MaxWidth>3840</MaxWidth> + <MaxHeight>2160</MaxHeight> + </Service> + <Capability> + <Request> + <GetCapabilities> + <Format>text/xml</Format> + <DCPType> + <HTTP> + <Get> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?"/> + </Get> + <Post> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms"/> + </Post> + </HTTP> + </DCPType> + </GetCapabilities> + <GetMap> + <Format>image/png</Format> + <Format>image/png; subtype=8bit</Format> + <Format>image/png; mode=8bit</Format> + <Format>image/gif</Format> + <Format>image/jpeg</Format> + <Format>image/tiff</Format> + <Format>image/x-ms-bmp</Format> + <Format>image/svg+xml</Format> + <DCPType> + <HTTP> + <Get> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?"/> + </Get> + <Post> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms"/> + </Post> + </HTTP> + </DCPType> + </GetMap> + <GetFeatureInfo> + <Format>application/vnd.ogc.gml</Format> + <Format>text/xml</Format> + <Format>text/plain</Format> + <Format>text/html</Format> + <Format>application/gml+xml; version=2.1</Format> + <Format>application/gml+xml; version=3.0</Format> + <Format>application/gml+xml; version=3.1</Format> + <Format>application/gml+xml; version=3.2</Format> + <Format>text/xml; subtype=gml/2.1.2</Format> + <Format>text/xml; subtype=gml/3.0.1</Format> + <Format>text/xml; subtype=gml/3.1.1</Format> + <Format>text/xml; subtype=gml/3.2.1</Format> + <DCPType> + <HTTP> + <Get> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?"/> + </Get> + <Post> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms"/> + </Post> + </HTTP> + </DCPType> + </GetFeatureInfo> + <sld:GetLegendGraphic> + <Format>image/png</Format> + <Format>image/png; subtype=8bit</Format> + <Format>image/png; mode=8bit</Format> + <Format>image/gif</Format> + <Format>image/jpeg</Format> + <Format>image/tiff</Format> + <Format>image/x-ms-bmp</Format> + <Format>image/svg+xml</Format> + <DCPType> + <HTTP> + <Get> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?"/> + </Get> + </HTTP> + </DCPType> + </sld:GetLegendGraphic> + </Request> + <Exception> + <Format>BLANK</Format> + <Format>XML</Format> + <Format>INIMAGE</Format> + </Exception> + <soapwms:ExtendedCapabilities + xsi:schemaLocation="https://schemas.deegree.org/extensions/services/wms/1.3.0 https://schemas.deegree.org/core/3.5/extensions/services/wms/soapwms.xsd" + xmlns:soapwms="https://schemas.deegree.org/extensions/services/wms/1.3.0" + > + <soapwms:SOAP> + <OnlineResource xlink:type="simple" xlink:href="http://localhost:8095/xplan-validator-wms/services/wms"/> + <soapwms:Constraint name="SOAPVersion"> + <soapwms:Value>1.1</soapwms:Value> + <soapwms:Value>1.2</soapwms:Value> + </soapwms:Constraint> + <soapwms:SupportedOperations> + <soapwms:Operation name="GetCapabilities"/> + <soapwms:Operation name="GetMap"/> + <soapwms:Operation name="GetFeatureInfo"/> + </soapwms:SupportedOperations> + </soapwms:SOAP> + </soapwms:ExtendedCapabilities> + <Layer queryable="1" cascaded="0" opaque="0" noSubsets="0" fixedWidth="0" fixedHeight="0"> + <Name>vektordaten</Name> + <Title>Vektordaten</Title> + <Abstract>RP_Plan</Abstract> + <CRS>EPSG:25832</CRS> + <CRS>EPSG:25833</CRS> + <CRS>EPSG:31466</CRS> + <CRS>EPSG:31467</CRS> + <CRS>EPSG:31468</CRS> + <CRS>EPSG:31469</CRS> + <CRS>EPSG:4258</CRS> + <CRS>EPSG:4326</CRS> + <CRS>CRS:84</CRS> + <CRS>EPSG:4839</CRS> + <EX_GeographicBoundingBox> + <westBoundLongitude>5.70000000</westBoundLongitude> + <eastBoundLongitude>15.10000000</eastBoundLongitude> + <southBoundLatitude>47.20000000</southBoundLatitude> + <northBoundLatitude>55.10000000</northBoundLatitude> + </EX_GeographicBoundingBox> + <BoundingBox CRS="EPSG:25832" minx="250063.80760146" miny="5227492.39570412" maxx="961955.35698518" + maxy="6122928.56399645"/> + <BoundingBox CRS="EPSG:25833" minx="-204149.38879392" miny="5227394.62429754" maxx="507574.14116822" + maxy="6145502.65351213"/> + <BoundingBox CRS="EPSG:31466" minx="5229085.18660450" miny="2477313.97691046" maxx="6145840.30975845" + maxy="3189339.76716774"/> + <BoundingBox CRS="EPSG:31467" minx="5229144.12350925" miny="3250040.42709215" maxx="6124942.70282722" + maxy="3962218.19360996"/> + <BoundingBox CRS="EPSG:31468" minx="5229250.38502155" miny="4022820.18429920" maxx="6126068.72270925" + maxy="4734992.65094137"/> + <BoundingBox CRS="EPSG:31469" minx="5229041.40993566" miny="4795707.79828440" maxx="6147512.02121381" + maxy="5507717.12548004"/> + <BoundingBox CRS="EPSG:4258" minx="47.20000000" miny="5.70000000" maxx="55.10000000" maxy="15.10000000"/> + <BoundingBox CRS="EPSG:4326" minx="47.20000000" miny="5.70000000" maxx="55.10000000" maxy="15.10000000"/> + <BoundingBox CRS="CRS:84" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox CRS="EPSG:4839" minx="-363956.39118610" miny="-422188.91820422" maxx="348811.76160559" + maxy="466200.59842974"/> + <Layer queryable="1" cascaded="0" opaque="0" noSubsets="0" fixedWidth="0" fixedHeight="0"> + <Name>bp_objekte</Name> + <Title>BP Objekte</Title> + <Abstract>BP_RasterplanAenderung</Abstract> + <CRS>EPSG:25832</CRS> + <CRS>EPSG:25833</CRS> + <CRS>EPSG:31466</CRS> + <CRS>EPSG:31467</CRS> + <CRS>EPSG:31468</CRS> + <CRS>EPSG:31469</CRS> + <CRS>EPSG:4258</CRS> + <CRS>EPSG:4326</CRS> + <CRS>CRS:84</CRS> + <CRS>EPSG:4839</CRS> + <EX_GeographicBoundingBox> + <westBoundLongitude>5.70000000</westBoundLongitude> + <eastBoundLongitude>15.10000000</eastBoundLongitude> + <southBoundLatitude>47.20000000</southBoundLatitude> + <northBoundLatitude>55.10000000</northBoundLatitude> + </EX_GeographicBoundingBox> + <BoundingBox CRS="EPSG:25832" minx="250063.80760146" miny="5227492.39570412" maxx="961955.35698518" + maxy="6122928.56399645"/> + <BoundingBox CRS="EPSG:25833" minx="-204149.38879392" miny="5227394.62429754" maxx="507574.14116822" + maxy="6145502.65351213"/> + <BoundingBox CRS="EPSG:31466" minx="5229085.18660450" miny="2477313.97691046" maxx="6145840.30975845" + maxy="3189339.76716774"/> + <BoundingBox CRS="EPSG:31467" minx="5229144.12350925" miny="3250040.42709215" maxx="6124942.70282722" + maxy="3962218.19360996"/> + <BoundingBox CRS="EPSG:31468" minx="5229250.38502155" miny="4022820.18429920" maxx="6126068.72270925" + maxy="4734992.65094137"/> + <BoundingBox CRS="EPSG:31469" minx="5229041.40993566" miny="4795707.79828440" maxx="6147512.02121381" + maxy="5507717.12548004"/> + <BoundingBox CRS="EPSG:4258" minx="47.20000000" miny="5.70000000" maxx="55.10000000" maxy="15.10000000"/> + <BoundingBox CRS="EPSG:4326" minx="47.20000000" miny="5.70000000" maxx="55.10000000" maxy="15.10000000"/> + <BoundingBox CRS="CRS:84" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox CRS="EPSG:4839" minx="-363956.39118610" miny="-422188.91820422" maxx="348811.76160559" + maxy="466200.59842974"/> + <Layer queryable="1" cascaded="0" opaque="0" noSubsets="0" fixedWidth="0" fixedHeight="0"> + <Name>bp_rasterplanaenderung</Name> + <Title>BP_RasterplanAenderung</Title> + <Abstract>BP_RasterplanAenderung</Abstract> + <CRS>EPSG:25832</CRS> + <CRS>EPSG:25833</CRS> + <CRS>EPSG:31466</CRS> + <CRS>EPSG:31467</CRS> + <CRS>EPSG:31468</CRS> + <CRS>EPSG:31469</CRS> + <CRS>EPSG:4258</CRS> + <CRS>EPSG:4326</CRS> + <CRS>CRS:84</CRS> + <CRS>EPSG:4839</CRS> + <EX_GeographicBoundingBox> + <westBoundLongitude>5.70000000</westBoundLongitude> + <eastBoundLongitude>15.10000000</eastBoundLongitude> + <southBoundLatitude>47.20000000</southBoundLatitude> + <northBoundLatitude>55.10000000</northBoundLatitude> + </EX_GeographicBoundingBox> + <BoundingBox CRS="EPSG:25832" minx="250063.80760146" miny="5227492.39570412" maxx="961955.35698518" + maxy="6122928.56399645"/> + <BoundingBox CRS="EPSG:25833" minx="-204149.38879392" miny="5227394.62429754" maxx="507574.14116822" + maxy="6145502.65351213"/> + <BoundingBox CRS="EPSG:31466" minx="5229085.18660450" miny="2477313.97691046" maxx="6145840.30975845" + maxy="3189339.76716774"/> + <BoundingBox CRS="EPSG:31467" minx="5229144.12350925" miny="3250040.42709215" maxx="6124942.70282722" + maxy="3962218.19360996"/> + <BoundingBox CRS="EPSG:31468" minx="5229250.38502155" miny="4022820.18429920" maxx="6126068.72270925" + maxy="4734992.65094137"/> + <BoundingBox CRS="EPSG:31469" minx="5229041.40993566" miny="4795707.79828440" maxx="6147512.02121381" + maxy="5507717.12548004"/> + <BoundingBox CRS="EPSG:4258" minx="47.20000000" miny="5.70000000" maxx="55.10000000" maxy="15.10000000"/> + <BoundingBox CRS="EPSG:4326" minx="47.20000000" miny="5.70000000" maxx="55.10000000" maxy="15.10000000"/> + <BoundingBox CRS="CRS:84" minx="5.70000000" miny="47.20000000" maxx="15.10000000" maxy="55.10000000"/> + <BoundingBox CRS="EPSG:4839" minx="-363956.39118610" miny="-422188.91820422" maxx="348811.76160559" + maxy="466200.59842974"/> + <Style> + <Name>vollflaechig</Name> + <Title>vollflaechig</Title> + <LegendURL width="190" height="27"> + <Format>image/png</Format> + <OnlineResource xlink:type="simple" + xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?request=GetLegendGraphic&version=1.3.0&service=WMS&layer=bp_rasterplanaenderung&style=vollflaechig&format=image/png"/> + </LegendURL> + </Style> + <Style> + <Name>transparent</Name> + <Title>transparent</Title> + <LegendURL width="32" height="81"> + <Format>image/png</Format> + <OnlineResource xlink:type="simple" + xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?request=GetLegendGraphic&version=1.3.0&service=WMS&layer=bp_rasterplanaenderung&style=transparent&format=image/png"/> + </LegendURL> + </Style> + <Style> + <Name>default</Name> + <Title>default</Title> + <LegendURL width="190" height="27"> + <Format>image/png</Format> + <OnlineResource xlink:type="simple" + xlink:href="http://localhost:8095/xplan-validator-wms/services/wms?request=GetLegendGraphic&version=1.3.0&service=WMS&layer=bp_rasterplanaenderung&style=vollflaechig&format=image/png"/> + </LegendURL> + </Style> + </Layer> + </Layer> + </Layer> + </Capability> +</WMS_Capabilities> \ No newline at end of file diff --git a/xplan-gateway/src/test/resources/capabilities_wmts_1.0.0.xml b/xplan-gateway/src/test/resources/capabilities_wmts_1.0.0.xml new file mode 100644 index 000000000..6931b0c3f --- /dev/null +++ b/xplan-gateway/src/test/resources/capabilities_wmts_1.0.0.xml @@ -0,0 +1,422 @@ +<Capabilities xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd" version="1.0.0" xmlns="http://www.opengis.net/wmts/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml"> + <ows:ServiceIdentification> + <ows:Title>WMTS XPlanung</ows:Title> + <ows:Abstract>WMTS zur Visualisierung von XPlanungsdaten</ows:Abstract> + <ows:Keywords> + <ows:Keyword vocabulary="GEMET">land use</ows:Keyword> + <ows:Keyword vocabulary="GEMET">land use plan</ows:Keyword> + <ows:Keyword>Bodennutzung</ows:Keyword> + <ows:Keyword>XPlanung</ows:Keyword> + </ows:Keywords> + <ows:ServiceType>OGC WMTS</ows:ServiceType> + <ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion> + <ows:Fees>15</ows:Fees> + <ows:AccessConstraints>16</ows:AccessConstraints> + </ows:ServiceIdentification> + <ows:ServiceProvider> + <ows:ProviderName>1</ows:ProviderName> + <ows:ProviderSite xlink:href="12"/> + <ows:ServiceContact> + <ows:IndividualName>3</ows:IndividualName> + <ows:PositionName>4</ows:PositionName> + <ows:ContactInfo> + <ows:Phone> + <ows:Voice>5</ows:Voice> + <ows:Facsimile/> + </ows:Phone> + <ows:Address> + <ows:DeliveryPoint>1</ows:DeliveryPoint> + <ows:City>8</ows:City> + <ows:PostalCode>10</ows:PostalCode> + <ows:Country>11</ows:Country> + <ows:ElectronicMailAddress>6</ows:ElectronicMailAddress> + </ows:Address> + </ows:ContactInfo> + </ows:ServiceContact> + </ows:ServiceProvider> + <ows:OperationsMetadata> + <ows:Operation name="GetCapabilities"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/ows?"> + <ows:Constraint name="GetEncoding"> + <ows:AllowedValues> + <ows:Value>KVP</ows:Value> + </ows:AllowedValues> + </ows:Constraint> + </ows:Get> + </ows:HTTP> + </ows:DCP> + </ows:Operation> + <ows:Operation name="GetTile"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/ows?"> + <ows:Constraint name="GetEncoding"> + <ows:AllowedValues> + <ows:Value>KVP</ows:Value> + </ows:AllowedValues> + </ows:Constraint> + </ows:Get> + </ows:HTTP> + </ows:DCP> + </ows:Operation> + <ows:Operation name="GetFeatureInfo"> + <ows:DCP> + <ows:HTTP> + <ows:Get xlink:href="http://localhost:8095/ows?"> + <ows:Constraint name="GetEncoding"> + <ows:AllowedValues> + <ows:Value>KVP</ows:Value> + </ows:AllowedValues> + </ows:Constraint> + </ows:Get> + </ows:HTTP> + </ows:DCP> + </ows:Operation> + </ows:OperationsMetadata> + <Contents> + <Layer> + <ows:Title>Rasterdarstellung der Bebauungspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>bp_raster</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + </Layer> + <Layer> + <ows:Title>Vektordarstellung der Bebauungspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>bp_objekte</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + </Layer> + <Layer> + <ows:Title>Rasterdarstellung der Flächennutzungspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>fp_raster</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + </Layer> + <Layer> + <ows:Title>Vektordarstellung der Flächennutzungspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>fp_objekte</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + </Layer> + <Layer> + <ows:Title>Rasterdarstellung der Landschaftspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>lp_raster</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + </Layer> + <Layer> + <ows:Title>Vektordarstellung der Landschaftspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>lp_objekte</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + </Layer> + <Layer> + <ows:Title>Rasterdarstellung der Regionalpläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>rp_raster</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + </Layer> + <Layer> + <ows:Title>Vektordarstellung der Regionalpläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>rp_objekte</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + </Layer> + <Layer> + <ows:Title>Rasterdarstellung der sonstigen raumbezogenen Pläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>so_raster</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + </Layer> + <Layer> + <ows:Title>Vektordarstellung der sonstigen raumbezogenen Pläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>so_objekte</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + </Layer> + <TileMatrixSet> + <ows:Identifier>gdi_de_25832</ows:Identifier> + <ows:SupportedCRS>EPSG:25832</ows:SupportedCRS> + <TileMatrix> + <ows:Identifier>00</ows:Identifier> + <ScaleDenominator>99999.99999999999</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>48</MatrixWidth> + <MatrixHeight>61</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>01</ows:Identifier> + <ScaleDenominator>49999.99999999999</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>96</MatrixWidth> + <MatrixHeight>122</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>02</ows:Identifier> + <ScaleDenominator>24999.999999999996</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>191</MatrixWidth> + <MatrixHeight>243</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>03</ows:Identifier> + <ScaleDenominator>9999.999999999998</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>477</MatrixWidth> + <MatrixHeight>608</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>04</ows:Identifier> + <ScaleDenominator>4999.999999999999</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>953</MatrixWidth> + <MatrixHeight>1215</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>05</ows:Identifier> + <ScaleDenominator>2499.9999999999995</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>1905</MatrixWidth> + <MatrixHeight>2429</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>06</ows:Identifier> + <ScaleDenominator>1000.0</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>4761</MatrixWidth> + <MatrixHeight>6072</MatrixHeight> + </TileMatrix> + </TileMatrixSet> + <TileMatrixSet> + <ows:Identifier>GoogleMapsCompatible</ows:Identifier> + <ows:SupportedCRS>EPSG:3857</ows:SupportedCRS> + <TileMatrix> + <ows:Identifier>00</ows:Identifier> + <ScaleDenominator>136494.69336638614</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>52</MatrixWidth> + <MatrixHeight>70</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>01</ows:Identifier> + <ScaleDenominator>68247.34668319306</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>103</MatrixWidth> + <MatrixHeight>140</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>02</ows:Identifier> + <ScaleDenominator>34123.673341596535</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>206</MatrixWidth> + <MatrixHeight>280</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>03</ows:Identifier> + <ScaleDenominator>17061.83667079827</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>411</MatrixWidth> + <MatrixHeight>559</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>04</ows:Identifier> + <ScaleDenominator>8530.918335399136</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>822</MatrixWidth> + <MatrixHeight>1118</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>05</ows:Identifier> + <ScaleDenominator>4265.459167699568</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>1644</MatrixWidth> + <MatrixHeight>2236</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>06</ows:Identifier> + <ScaleDenominator>2132.729583849785</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>3288</MatrixWidth> + <MatrixHeight>4471</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>07</ows:Identifier> + <ScaleDenominator>1066.3647919248929</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>6575</MatrixWidth> + <MatrixHeight>8942</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>08</ows:Identifier> + <ScaleDenominator>533.1823959624463</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>13149</MatrixWidth> + <MatrixHeight>17884</MatrixHeight> + </TileMatrix> + </TileMatrixSet> + </Contents> +</Capabilities> \ No newline at end of file diff --git a/xplan-gateway/src/test/resources/capabilities_wmts_tiles_1.0.0.xml b/xplan-gateway/src/test/resources/capabilities_wmts_tiles_1.0.0.xml new file mode 100644 index 000000000..a36c3126a --- /dev/null +++ b/xplan-gateway/src/test/resources/capabilities_wmts_tiles_1.0.0.xml @@ -0,0 +1,392 @@ +<Capabilities xsi:schemaLocation="http://www.opengis.net/wmts/1.0 http://schemas.opengis.net/wmts/1.0/wmtsGetCapabilities_response.xsd" version="1.0.0" xmlns="http://www.opengis.net/wmts/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gml="http://www.opengis.net/gml"> + <ows:ServiceIdentification> + <ows:Title>WMTS XPlanung</ows:Title> + <ows:Abstract>WMTS zur Visualisierung von XPlanungsdaten</ows:Abstract> + <ows:Keywords> + <ows:Keyword vocabulary="GEMET">land use</ows:Keyword> + <ows:Keyword vocabulary="GEMET">land use plan</ows:Keyword> + <ows:Keyword>Bodennutzung</ows:Keyword> + <ows:Keyword>XPlanung</ows:Keyword> + </ows:Keywords> + <ows:ServiceType>OGC WMTS</ows:ServiceType> + <ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion> + <ows:Fees>15</ows:Fees> + <ows:AccessConstraints>16</ows:AccessConstraints> + </ows:ServiceIdentification> + <ows:ServiceProvider> + <ows:ProviderName>1</ows:ProviderName> + <ows:ProviderSite xlink:href="12"/> + <ows:ServiceContact> + <ows:IndividualName>3</ows:IndividualName> + <ows:PositionName>4</ows:PositionName> + <ows:ContactInfo> + <ows:Phone> + <ows:Voice>5</ows:Voice> + <ows:Facsimile/> + </ows:Phone> + <ows:Address> + <ows:DeliveryPoint>1</ows:DeliveryPoint> + <ows:City>8</ows:City> + <ows:PostalCode>10</ows:PostalCode> + <ows:Country>11</ows:Country> + <ows:ElectronicMailAddress>6</ows:ElectronicMailAddress> + </ows:Address> + </ows:ContactInfo> + </ows:ServiceContact> + </ows:ServiceProvider> + <Contents> + <Layer> + <ows:Title>Rasterdarstellung der Bebauungspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>bp_raster</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + <ResourceURL format="image/png" resourceType="tile" template="http://localhost:8095/wmts/bp_raster/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png"/> + </Layer> + <Layer> + <ows:Title>Vektordarstellung der Bebauungspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>bp_objekte</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + <ResourceURL format="image/png" resourceType="tile" template="http://localhost:8095/wmts/bp_objekte/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png"/> + </Layer> + <Layer> + <ows:Title>Rasterdarstellung der Flächennutzungspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>fp_raster</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + <ResourceURL format="image/png" resourceType="tile" template="http://localhost:8095/wmts/fp_raster/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png"/> + </Layer> + <Layer> + <ows:Title>Vektordarstellung der Flächennutzungspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>fp_objekte</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + <ResourceURL format="image/png" resourceType="tile" template="http://localhost:8095/wmts/fp_objekte/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png"/> + </Layer> + <Layer> + <ows:Title>Rasterdarstellung der Landschaftspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>lp_raster</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + <ResourceURL format="image/png" resourceType="tile" template="http://localhost:8095/wmts/lp_raster/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png"/> + </Layer> + <Layer> + <ows:Title>Vektordarstellung der Landschaftspläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>lp_objekte</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + <ResourceURL format="image/png" resourceType="tile" template="http://localhost:8095/wmts/lp_objekte/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png"/> + </Layer> + <Layer> + <ows:Title>Rasterdarstellung der Regionalpläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>rp_raster</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + <ResourceURL format="image/png" resourceType="tile" template="http://localhost:8095/wmts/rp_raster/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png"/> + </Layer> + <Layer> + <ows:Title>Vektordarstellung der Regionalpläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>rp_objekte</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + <ResourceURL format="image/png" resourceType="tile" template="http://localhost:8095/wmts/rp_objekte/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png"/> + </Layer> + <Layer> + <ows:Title>Rasterdarstellung der sonstigen raumbezogenen Pläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>so_raster</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + <ResourceURL format="image/png" resourceType="tile" template="http://localhost:8095/wmts/so_raster/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png"/> + </Layer> + <Layer> + <ows:Title>Vektordarstellung der sonstigen raumbezogenen Pläne</ows:Title> + <ows:Abstract/> + <ows:WGS84BoundingBox> + <ows:LowerCorner>5.98865807458 47.3024876979</ows:LowerCorner> + <ows:UpperCorner>15.0169958839 54.983104153</ows:UpperCorner> + </ows:WGS84BoundingBox> + <ows:Identifier>so_objekte</ows:Identifier> + <Style> + <ows:Identifier>default</ows:Identifier> + </Style> + <Format>image/png</Format> + <TileMatrixSetLink> + <TileMatrixSet>gdi_de_25832</TileMatrixSet> + </TileMatrixSetLink> + <TileMatrixSetLink> + <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet> + </TileMatrixSetLink> + <ResourceURL format="image/png" resourceType="tile" template="http://localhost:8095/wmts/so_objekte/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png"/> + </Layer> + <TileMatrixSet> + <ows:Identifier>gdi_de_25832</ows:Identifier> + <ows:SupportedCRS>EPSG:25832</ows:SupportedCRS> + <TileMatrix> + <ows:Identifier>00</ows:Identifier> + <ScaleDenominator>99999.99999999999</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>48</MatrixWidth> + <MatrixHeight>61</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>01</ows:Identifier> + <ScaleDenominator>49999.99999999999</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>96</MatrixWidth> + <MatrixHeight>122</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>02</ows:Identifier> + <ScaleDenominator>24999.999999999996</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>191</MatrixWidth> + <MatrixHeight>243</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>03</ows:Identifier> + <ScaleDenominator>9999.999999999998</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>477</MatrixWidth> + <MatrixHeight>608</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>04</ows:Identifier> + <ScaleDenominator>4999.999999999999</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>953</MatrixWidth> + <MatrixHeight>1215</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>05</ows:Identifier> + <ScaleDenominator>2499.9999999999995</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>1905</MatrixWidth> + <MatrixHeight>2429</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>06</ows:Identifier> + <ScaleDenominator>1000.0</ScaleDenominator> + <TopLeftCorner>272364.59649115754 6109485.044960364</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>4761</MatrixWidth> + <MatrixHeight>6072</MatrixHeight> + </TileMatrix> + </TileMatrixSet> + <TileMatrixSet> + <ows:Identifier>GoogleMapsCompatible</ows:Identifier> + <ows:SupportedCRS>EPSG:3857</ows:SupportedCRS> + <TileMatrix> + <ows:Identifier>00</ows:Identifier> + <ScaleDenominator>136494.69336638614</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>52</MatrixWidth> + <MatrixHeight>70</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>01</ows:Identifier> + <ScaleDenominator>68247.34668319306</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>103</MatrixWidth> + <MatrixHeight>140</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>02</ows:Identifier> + <ScaleDenominator>34123.673341596535</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>206</MatrixWidth> + <MatrixHeight>280</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>03</ows:Identifier> + <ScaleDenominator>17061.83667079827</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>411</MatrixWidth> + <MatrixHeight>559</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>04</ows:Identifier> + <ScaleDenominator>8530.918335399136</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>822</MatrixWidth> + <MatrixHeight>1118</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>05</ows:Identifier> + <ScaleDenominator>4265.459167699568</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>1644</MatrixWidth> + <MatrixHeight>2236</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>06</ows:Identifier> + <ScaleDenominator>2132.729583849785</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>3288</MatrixWidth> + <MatrixHeight>4471</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>07</ows:Identifier> + <ScaleDenominator>1066.3647919248929</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>6575</MatrixWidth> + <MatrixHeight>8942</MatrixHeight> + </TileMatrix> + <TileMatrix> + <ows:Identifier>08</ows:Identifier> + <ScaleDenominator>533.1823959624463</ScaleDenominator> + <TopLeftCorner>666654.3673972717 7358587.663916558</TopLeftCorner> + <TileWidth>512</TileWidth> + <TileHeight>512</TileHeight> + <MatrixWidth>13149</MatrixWidth> + <MatrixHeight>17884</MatrixHeight> + </TileMatrix> + </TileMatrixSet> + </Contents> + <ServiceMetadataURL xlink:href="http://localhost:8095/wmts/1.0.0/WMTSCapabilities.xml"/> +</Capabilities> \ No newline at end of file diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/PlanInfoBuilder.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/PlanInfoBuilder.java index 3191335f5..0fa3faff2 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/PlanInfoBuilder.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/PlanInfoBuilder.java @@ -38,8 +38,11 @@ import java.util.Date; import java.util.List; import java.util.stream.Collectors; +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; import de.latlon.xplan.manager.web.shared.PlanStatus; import de.latlon.xplan.manager.web.shared.XPlan; +import de.latlon.xplan.validator.report.geojson.jts.JtsToGeoJsonGeometryBuilder; +import de.latlon.xplan.validator.report.geojson.model.Geometry; import de.latlon.xplan.validator.web.shared.XPlanEnvelope; import de.latlon.xplanbox.api.commons.v1.model.PlanInfoBbox; import de.latlon.xplanbox.api.commons.v1.model.VersionEnum; @@ -68,6 +71,8 @@ public class PlanInfoBuilder { private final List<Gemeinde> gemeinden; + private final Geltungsbereich geltungsbereich; + private final ManagerApiConfiguration managerApiConfiguration; private final List<String> alternateMediaTypes = new ArrayList<>(); @@ -75,10 +80,11 @@ public class PlanInfoBuilder { private String selfMediaType; public PlanInfoBuilder(XPlan xPlan, List<Bereich> bereiche, List<Gemeinde> gemeinden, - ManagerApiConfiguration managerApiConfiguration) { + Geltungsbereich geltungsbereich, ManagerApiConfiguration managerApiConfiguration) { this.xPlan = xPlan; this.bereiche = bereiche; this.gemeinden = gemeinden; + this.geltungsbereich = geltungsbereich; this.managerApiConfiguration = managerApiConfiguration; } @@ -132,6 +138,7 @@ public class PlanInfoBuilder { .version(version()) .planStatus(planStatus()) .bbox(bbox()) + .geltungsbereichWGS84(geltungsbereichWgs84()) .links(links(ApiV1Config.APP_PATH)) .type(xPlan.getType()) .xplanModelData(xPlanModelData()); @@ -146,6 +153,7 @@ public class PlanInfoBuilder { .version(version()) .planStatus(planStatus()) .bbox(bbox()) + .geltungsbereichWGS84(geltungsbereichWgs84()) .links(links(ApiV2Config.APP_PATH)) .type(xPlan.getType()) .xplanModelData(xPlanModelDataV2()); @@ -247,8 +255,8 @@ public class PlanInfoBuilder { private List<String> createPathSegments(URIBuilder uriBuilder) { List<String> pathSegments = new ArrayList<>(uriBuilder.getPathSegments()); - // /xplan-ows/syn/planwerk/{planName} - pathSegments.add("xplan-ows"); + // /ows/syn/planwerk/{planName} + pathSegments.add("ows"); pathSegments.add(detectSynPathSegmentWithPlanStatus()); pathSegments.add("planwerk"); pathSegments.add(xPlan.getName().replace("/", "")); @@ -267,6 +275,14 @@ public class PlanInfoBuilder { return null; } + private Geometry geltungsbereichWgs84() { + if (geltungsbereich != null) { + org.locationtech.jts.geom.Geometry geltungsbereichGeom = geltungsbereich.getGeltungsbereichWGS84(); + return JtsToGeoJsonGeometryBuilder.createGeometry(geltungsbereichGeom); + } + return null; + } + private String detectSynPathSegmentWithPlanStatus() { if (xPlan.getPlanStatus() != null) switch (xPlan.getPlanStatus()) { diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java index fb2e3f222..fe2a9406c 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/config/ApplicationContext.java @@ -35,6 +35,7 @@ import de.latlon.xplan.commons.configuration.SystemPropertyPropertiesLoader; import de.latlon.xplan.commons.feature.SortPropertyReader; import de.latlon.xplan.core.manager.db.config.JpaContext; import de.latlon.xplan.core.manager.db.repository.ArtefactRepository; +import de.latlon.xplan.core.manager.db.repository.GeltungsbereichRepository; import de.latlon.xplan.core.manager.db.repository.PlanRepository; import de.latlon.xplan.core.manager.db.repository.PlanwerkWmsMetadataRepository; import de.latlon.xplan.manager.XPlanManager; @@ -95,6 +96,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Lazy; import org.springframework.core.io.ResourceLoader; /** @@ -104,8 +106,8 @@ import org.springframework.core.io.ResourceLoader; * @author <a href="mailto:friebe@lat-lon.de">Torsten Friebe</a> */ @Configuration -@ComponentScan(basePackages = { "de.latlon.xplanbox.api.manager.v1", "de.latlon.xplanbox.api.manager.v2", - "de.latlon.xplanbox.api.manager.handler" }) +@ComponentScan(basePackages = { "de.latlon.xplanbox.api.manager.db", "de.latlon.xplanbox.api.manager.v1", + "de.latlon.xplanbox.api.manager.v2", "de.latlon.xplanbox.api.manager.handler" }) @Import({ SecurityContext.class, OAuth2JwtContext.class, JpaContext.class, AmazonS3RasterStorageContext.class, AmazonS3DocumentStorageContext.class, AmazonS3ValidationContext.class, RasterEvaluationContext.class }) public class ApplicationContext { @@ -119,6 +121,10 @@ public class ApplicationContext { @Autowired private ArtefactRepository artefactRepository; + @Autowired + @Lazy + private GeltungsbereichRepository geltungsbereichRepository; + @Autowired private ResourceLoader resourceLoader; @@ -177,7 +183,8 @@ public class ApplicationContext { @Bean public XPlanDbAdapter xPlanDbAdapter() { - return new XPlanDbAdapter(planRepository, planwerkWmsMetadataRepository, artefactRepository); + return new XPlanDbAdapter(planRepository, planwerkWmsMetadataRepository, artefactRepository, + geltungsbereichRepository); } @Bean diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/DatabaseVerifier.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/db/DatabaseVerifier.java similarity index 86% rename from xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/DatabaseVerifier.java rename to xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/db/DatabaseVerifier.java index 7853d014c..db40541fb 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/DatabaseVerifier.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/db/DatabaseVerifier.java @@ -18,9 +18,19 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * #L% */ -package de.latlon.xplanbox.api.manager; +package de.latlon.xplanbox.api.manager.db; + +import static org.slf4j.LoggerFactory.getLogger; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; import de.latlon.xplan.manager.database.ManagerWorkspaceWrapper; +import jakarta.annotation.PostConstruct; +import liquibase.Scope; +import liquibase.changelog.ChangeLogHistoryService; +import liquibase.changelog.ChangeLogHistoryServiceFactory; import liquibase.changelog.RanChangeSet; import liquibase.database.Database; import liquibase.database.DatabaseFactory; @@ -30,13 +40,6 @@ import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import jakarta.annotation.PostConstruct; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.List; - -import static org.slf4j.LoggerFactory.getLogger; - /** * Verifies if the current running software matches to the current configured application * database using liquibase API. @@ -49,9 +52,9 @@ public class DatabaseVerifier { private static final Logger LOG = getLogger(DatabaseVerifier.class); - private static final String DB_VERSION = "v_7.0"; + private static final String DB_VERSION = "v_8.0"; - private ManagerWorkspaceWrapper managerWorkspaceWrapper; + private final ManagerWorkspaceWrapper managerWorkspaceWrapper; @Autowired public DatabaseVerifier(ManagerWorkspaceWrapper managerWorkspaceWrapper) { @@ -70,7 +73,10 @@ public class DatabaseVerifier { + " Verify your installation and the database setup."); return; } - if (database.doesTagExist(DB_VERSION)) { + ChangeLogHistoryService changeLogHistoryService = Scope.getCurrentScope() + .getSingleton(ChangeLogHistoryServiceFactory.class) + .getChangeLogService(database); + if (changeLogHistoryService.tagExists(DB_VERSION)) { LOG.info("Application database XPlanDB version: " + DB_VERSION); LOG.info("Last changeset id: " + retrieveChangeSet(database).stream().reduce((first, last) -> last).orElse(null)); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/PlanHandler.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/PlanHandler.java index 7004d2e49..b54b36304 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/PlanHandler.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/handler/PlanHandler.java @@ -36,6 +36,7 @@ import de.latlon.xplan.commons.archive.XPlanArchive; import de.latlon.xplan.commons.feature.XPlanFeatureCollection; import de.latlon.xplan.commons.feature.XPlanGmlParserBuilder; import de.latlon.xplan.core.manager.db.model.Artefact; +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; import de.latlon.xplan.manager.database.PlanNotFoundException; import de.latlon.xplan.manager.database.XPlanDao; import de.latlon.xplan.manager.export.XPlanArtefactExporter; @@ -163,6 +164,11 @@ public class PlanHandler implements AgsAccessor { .collect(Collectors.toList()); } + public Geltungsbereich findGeltungsbereich(String planId) { + LOG.info("Finding Geltungsbereich of plan with id '{}'", planId); + return xPlanDao.retrieveGeltungsbereichOfPlanWithId(planId); + } + private XPlan findPlanById(int id) throws InvalidPlanId { XPlan xPlanById = xPlanDao.getXPlanById(id); if (xPlanById == null) { diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlanApi.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlanApi.java index 3358949f2..4862963c0 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlanApi.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlanApi.java @@ -65,6 +65,7 @@ import de.latlon.core.validator.events.EventSender; import de.latlon.core.validator.events.ValidationRequestedEvent; import de.latlon.core.validator.events.planimport.ImportValidationRequestedEvent; import de.latlon.xplan.commons.archive.XPlanArchiveCreator; +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplanbox.api.commons.ObjectMapperContextResolver; @@ -412,7 +413,8 @@ public class PlanApi { List<String> alternateMediaTypes = alternateMediaTypes(requestedMediaType, MEDIA_TYPES_PLAN_BY_ID); List<Bereich> bereiche = planHandler.findBereiche(planById.getId()); List<Gemeinde> gemeinden = planHandler.findGemeinden(planById.getId()); - return new PlanInfoBuilder(planById, bereiche, gemeinden, managerApiConfiguration) + Geltungsbereich geltungsbereich = planHandler.findGeltungsbereich(planById.getId()); + return new PlanInfoBuilder(planById, bereiche, gemeinden, geltungsbereich, managerApiConfiguration) .selfMediaType(requestedMediaType.toString()) .alternateMediaType(alternateMediaTypes) .build(); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlansApi.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlansApi.java index d8d8dd176..d53359fd7 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlansApi.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/PlansApi.java @@ -25,6 +25,7 @@ import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import java.util.List; import java.util.stream.Collectors; +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplanbox.api.manager.PlanInfoBuilder; import de.latlon.xplanbox.api.manager.config.ManagerApiConfiguration; @@ -39,6 +40,7 @@ import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.ws.rs.DefaultValue; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; @@ -81,7 +83,9 @@ public class PlansApi { @QueryParam("planName") @Parameter(description = "The name of the plan to search for", example = "bplan_123, fplan-123, rplan20200803") String planName, @QueryParam("planId") @Parameter(description = "The ID of the plan to search for", - example = "1, 2, 42") List<Integer> planIds) + example = "1, 2, 42") List<Integer> planIds, + @QueryParam("includeGeltungsbereich") @DefaultValue("false") @Parameter( + description = "true if the geltungsbereichWGS84 should be included in the response, false otherwise (default: false).") boolean includeGeltungsbereich) throws Exception { if (planName != null && !planIds.isEmpty()) throw new InvalidSearch("Searching by name and id within the same request is not supported!"); @@ -89,7 +93,9 @@ public class PlansApi { List<PlanInfo> planInfos = plans.stream().map(xPlan -> { List<Bereich> bereiche = planHandler.findBereiche(xPlan.getId()); List<Gemeinde> gemeinden = planHandler.findGemeinden(xPlan.getId()); - return new PlanInfoBuilder(xPlan, bereiche, gemeinden, managerApiConfiguration) + Geltungsbereich geltungsbereich = includeGeltungsbereich ? planHandler.findGeltungsbereich(xPlan.getId()) + : null; + return new PlanInfoBuilder(xPlan, bereiche, gemeinden, geltungsbereich, managerApiConfiguration) .selfMediaType(APPLICATION_JSON) .alternateMediaType(List.of("application/xml", "application/zip")) .build(); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/PlanInfo.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/PlanInfo.java index ad547afd2..bad8dd458 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/PlanInfo.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v1/model/PlanInfo.java @@ -20,19 +20,22 @@ */ package de.latlon.xplanbox.api.manager.v1.model; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import de.latlon.xplan.validator.report.geojson.model.Geometry; import de.latlon.xplanbox.api.commons.v1.model.PlanInfoBbox; import de.latlon.xplanbox.api.commons.v1.model.VersionEnum; import io.swagger.v3.oas.annotations.media.Schema; - import jakarta.validation.Valid; import jakarta.xml.bind.annotation.XmlAccessType; import jakarta.xml.bind.annotation.XmlAccessorType; import jakarta.xml.bind.annotation.XmlRootElement; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; /** * Datatype for PlanInfo. @@ -43,6 +46,8 @@ import java.util.Objects; date = "2020-08-28T13:42:47.160+02:00[Europe/Berlin]") @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) +@JsonPropertyOrder({ "id", "type", "version", "planStatus", "raster", "importDate", "inspirePublished", "bbox", + "geltungsbereichWGS84", "xplanModelData", "links" }) public class PlanInfo { private @Valid Integer id; @@ -61,6 +66,10 @@ public class PlanInfo { private @Valid PlanInfoBbox bbox; + @JsonInclude(JsonInclude.Include.NON_NULL) + @Schema(description = "The simplified Geltungsbereich of a Plan in WGS84. Incomplete in XML output (use JSON)") + private @Valid Geometry geltungsbereichWGS84; + private @Valid PlanInfoXplanModelData xplanModelData; private @Valid List<Link> links = new ArrayList<Link>(); @@ -210,6 +219,23 @@ public class PlanInfo { this.bbox = bbox; } + /** + * + **/ + public PlanInfo geltungsbereichWGS84(Geometry geltungsbereichWgs84) { + this.geltungsbereichWGS84 = geltungsbereichWgs84; + return this; + } + + @Schema + public @Valid Geometry getGeltungsbereichWGS84() { + return geltungsbereichWGS84; + } + + public void setGeltungsbereichWGS84(@Valid Geometry geltungsbereichWGS84) { + this.geltungsbereichWGS84 = geltungsbereichWGS84; + } + /** * **/ @@ -261,13 +287,15 @@ public class PlanInfo { && Objects.equals(this.importDate, planInfo.importDate) && Objects.equals(this.inspirePublished, planInfo.inspirePublished) && Objects.equals(this.bbox, planInfo.bbox) + && Objects.equals(this.geltungsbereichWGS84, planInfo.geltungsbereichWGS84) && Objects.equals(this.xplanModelData, planInfo.xplanModelData) && Objects.equals(this.links, planInfo.links); } @Override public int hashCode() { - return Objects.hash(id, type, version, raster, importDate, inspirePublished, bbox, xplanModelData, links); + return Objects.hash(id, type, version, raster, importDate, inspirePublished, bbox, geltungsbereichWGS84, + xplanModelData, links); } @Override @@ -282,6 +310,7 @@ public class PlanInfo { sb.append(" importDate: ").append(toIndentedString(importDate)).append("\n"); sb.append(" inspirePublished: ").append(toIndentedString(inspirePublished)).append("\n"); sb.append(" bbox: ").append(toIndentedString(bbox)).append("\n"); + sb.append(" geltungsbereichWgs84: ").append(toIndentedString(geltungsbereichWGS84)).append("\n"); sb.append(" xplanModelData: ").append(toIndentedString(xplanModelData)).append("\n"); sb.append(" links: ").append(toIndentedString(links)).append("\n"); sb.append("}"); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlanApi2.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlanApi2.java index cb8ec7387..56b37dd61 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlanApi2.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlanApi2.java @@ -40,6 +40,7 @@ import java.util.regex.Pattern; import de.latlon.core.validator.events.EventSender; import de.latlon.core.validator.events.ValidationRequestedEvent; import de.latlon.core.validator.events.planimport.ImportValidationRequestedEvent; +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplan.validator.web.shared.ValidationSettings; import de.latlon.xplanbox.api.commons.exception.UnsupportedParameterValue; @@ -285,7 +286,8 @@ public class PlanApi2 { private PlanInfo createPlanInfo(XPlan planById) { List<Bereich> bereiche = planHandler.findBereiche(planById.getId()); List<Gemeinde> gemeinden = planHandler.findGemeinden(planById.getId()); - return new PlanInfoBuilder(planById, bereiche, gemeinden, managerApiConfiguration) + Geltungsbereich geltungsbereich = planHandler.findGeltungsbereich(planById.getId()); + return new PlanInfoBuilder(planById, bereiche, gemeinden, geltungsbereich, managerApiConfiguration) .selfMediaType(APPLICATION_JSON) .buildV2(); } diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlansApi2.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlansApi2.java index 3eca4431b..8f9dea922 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlansApi2.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/PlansApi2.java @@ -25,6 +25,7 @@ import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; import java.util.List; import java.util.stream.Collectors; +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplanbox.api.manager.PlanInfoBuilder; import de.latlon.xplanbox.api.manager.config.ManagerApiConfiguration; @@ -39,6 +40,7 @@ import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.ws.rs.DefaultValue; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; @@ -77,7 +79,9 @@ public class PlansApi2 { @QueryParam("planName") @Parameter(description = "The name of the plan to search for", example = "bplan_123, fplan-123, rplan20200803") String planName, @QueryParam("planId") @Parameter(description = "The ID of the plan to search for", - example = "1, 2, 42") List<Integer> planIds) + example = "1, 2, 42") List<Integer> planIds, + @QueryParam("includeGeltungsbereich") @DefaultValue("false") @Parameter( + description = "true if the geltungsbereichWGS84 should be included in the response, false otherwise (default: false).") boolean includeGeltungsbereich) throws Exception { if (planName != null && !planIds.isEmpty()) throw new InvalidSearch("Searching by name and id within the same request is not supported!"); @@ -85,7 +89,9 @@ public class PlansApi2 { List<PlanInfo> planInfos = plans.stream().map(xPlan -> { List<Bereich> bereiche = planHandler.findBereiche(xPlan.getId()); List<Gemeinde> gemeinden = planHandler.findGemeinden(xPlan.getId()); - return new PlanInfoBuilder(xPlan, bereiche, gemeinden, managerApiConfiguration) + Geltungsbereich geltungsbereich = includeGeltungsbereich ? planHandler.findGeltungsbereich(xPlan.getId()) + : null; + return new PlanInfoBuilder(xPlan, bereiche, gemeinden, geltungsbereich, managerApiConfiguration) .selfMediaType(APPLICATION_JSON) .buildV2(); }).collect(Collectors.toList()); diff --git a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/PlanInfo.java b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/PlanInfo.java index c701c1746..fe562d0ae 100644 --- a/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/PlanInfo.java +++ b/xplan-manager/xplan-manager-api/src/main/java/de/latlon/xplanbox/api/manager/v2/model/PlanInfo.java @@ -25,11 +25,13 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import de.latlon.xplan.validator.report.geojson.model.Geometry; import de.latlon.xplanbox.api.commons.v1.model.PlanInfoBbox; import de.latlon.xplanbox.api.commons.v1.model.VersionEnum; import de.latlon.xplanbox.api.manager.v1.model.Link; -import de.latlon.xplanbox.api.manager.v2.model.PlanInfoXplanModelData; import de.latlon.xplanbox.api.manager.v1.model.PlanStatusEnum; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; @@ -45,6 +47,8 @@ import jakarta.xml.bind.annotation.XmlRootElement; */ @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) +@JsonPropertyOrder({ "id", "type", "version", "planStatus", "raster", "importDate", "inspirePublished", "bbox", + "geltungsbereichWGS84", "xplanModelData", "links" }) public class PlanInfo { private @Valid Integer id; @@ -63,6 +67,9 @@ public class PlanInfo { private @Valid PlanInfoBbox bbox; + @JsonInclude(JsonInclude.Include.NON_NULL) + private @Valid Geometry geltungsbereichWGS84; + private @Valid PlanInfoXplanModelData xplanModelData; private @Valid List<Link> links = new ArrayList<Link>(); @@ -212,6 +219,23 @@ public class PlanInfo { this.bbox = bbox; } + /** + * + **/ + public PlanInfo geltungsbereichWGS84(Geometry geltungsbereichWgs84) { + this.geltungsbereichWGS84 = geltungsbereichWgs84; + return this; + } + + @Schema + public @Valid Geometry getGeltungsbereichWGS84() { + return geltungsbereichWGS84; + } + + public void setGeltungsbereichWGS84(@Valid Geometry geltungsbereichWGS84) { + this.geltungsbereichWGS84 = geltungsbereichWGS84; + } + /** * **/ @@ -263,13 +287,15 @@ public class PlanInfo { && Objects.equals(this.importDate, planInfo.importDate) && Objects.equals(this.inspirePublished, planInfo.inspirePublished) && Objects.equals(this.bbox, planInfo.bbox) + && Objects.equals(this.geltungsbereichWGS84, planInfo.geltungsbereichWGS84) && Objects.equals(this.xplanModelData, planInfo.xplanModelData) && Objects.equals(this.links, planInfo.links); } @Override public int hashCode() { - return Objects.hash(id, type, version, raster, importDate, inspirePublished, bbox, xplanModelData, links); + return Objects.hash(id, type, version, raster, importDate, inspirePublished, bbox, geltungsbereichWGS84, + xplanModelData, links); } @Override @@ -284,6 +310,7 @@ public class PlanInfo { sb.append(" importDate: ").append(toIndentedString(importDate)).append("\n"); sb.append(" inspirePublished: ").append(toIndentedString(inspirePublished)).append("\n"); sb.append(" bbox: ").append(toIndentedString(bbox)).append("\n"); + sb.append(" geltungsbereichWgs84: ").append(toIndentedString(geltungsbereichWGS84)).append("\n"); sb.append(" xplanModelData: ").append(toIndentedString(xplanModelData)).append("\n"); sb.append(" links: ").append(toIndentedString(links)).append("\n"); sb.append("}"); diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/PlanInfoBuilderTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/PlanInfoBuilderTest.java index d18ec385f..025ca84f5 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/PlanInfoBuilderTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/PlanInfoBuilderTest.java @@ -11,6 +11,7 @@ import java.util.Date; import java.util.List; import java.util.Optional; +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; import de.latlon.xplan.manager.web.shared.XPlan; import de.latlon.xplanbox.api.manager.config.ManagerApiConfiguration; import de.latlon.xplanbox.api.manager.v1.model.Bereich; @@ -31,8 +32,10 @@ public class PlanInfoBuilderTest { List<Bereich> bereiche = Collections.singletonList(new Bereich().name("testbereich").nummer("0")); List<Gemeinde> gemeinden = Collections .singletonList(new Gemeinde().ags("87597649").gemeindeName("Mustergemeinde")); + Geltungsbereich geltungsbereich = createGeltungsbereich(); ManagerApiConfiguration managerApiConfiguration = createManagerApiConfiguration(); - PlanInfo planInfo = new PlanInfoBuilder(xplan, bereiche, gemeinden, managerApiConfiguration).build(); + PlanInfo planInfo = new PlanInfoBuilder(xplan, bereiche, gemeinden, geltungsbereich, managerApiConfiguration) + .build(); assertThat(planInfo.getId()).isEqualTo(1); assertThat(planInfo.getType()).isEqualTo("BP_Plan"); @@ -47,9 +50,10 @@ public class PlanInfoBuilderTest { List<Bereich> bereiche = Collections.singletonList(new Bereich().name("testbereich").nummer("0")); List<Gemeinde> gemeinden = Collections .singletonList(new Gemeinde().ags("87597649").gemeindeName("Mustergemeinde")); + Geltungsbereich geltungsbereich = createGeltungsbereich(); ManagerApiConfiguration managerApiConfiguration = createManagerApiConfiguration(); de.latlon.xplanbox.api.manager.v2.model.PlanInfo planInfo = new PlanInfoBuilder(xplan, bereiche, gemeinden, - managerApiConfiguration) + geltungsbereich, managerApiConfiguration) .buildV2(); assertThat(planInfo.getId()).isEqualTo(1); assertThat(planInfo.getType()).isEqualTo("BP_Plan"); @@ -58,8 +62,7 @@ public class PlanInfoBuilderTest { .filter(l -> Link.RelEnum.PLANWERKWMS.equals(l.getRel())) .findFirst(); assertThat(planwerkWms.isPresent()).isTrue(); - assertThat(planwerkWms.get().getHref().toString()) - .isEqualTo("http://xplan-gateway/xplan-ows/syn/planwerk/plan"); + assertThat(planwerkWms.get().getHref().toString()).isEqualTo("http://xplan-gateway/ows/syn/planwerk/plan"); de.latlon.xplanbox.api.manager.v2.model.PlanInfoXplanModelData xplanModelData = planInfo.getXplanModelData(); assertThat(xplanModelData.getBereich().get(0).getName()).isEqualTo("testbereich"); @@ -72,9 +75,10 @@ public class PlanInfoBuilderTest { List<Bereich> bereiche = Collections.singletonList(new Bereich().name("testbereich").nummer("0")); List<Gemeinde> gemeinden = Collections .singletonList(new Gemeinde().ags("87597649").gemeindeName("Mustergemeinde")); + Geltungsbereich geltungsbereich = createGeltungsbereich(); ManagerApiConfiguration managerApiConfiguration = createManagerApiConfiguration(); de.latlon.xplanbox.api.manager.v2.model.PlanInfo planInfo = new PlanInfoBuilder(xplan, bereiche, gemeinden, - managerApiConfiguration) + geltungsbereich, managerApiConfiguration) .buildV2(); List<PlanInfo> planInfos = PlanInfoBuilder.convertToV1(Collections.singletonList(planInfo)); @@ -89,6 +93,10 @@ public class PlanInfoBuilderTest { assertThat(xplanModelData.getBereich().get(0).getNummer()).isEqualTo("0"); } + private Geltungsbereich createGeltungsbereich() { + return null; + } + private static XPlan createPlan() { XPlan xplan = new XPlan("plan", "1", "BP_Plan"); xplan.setImportDate(new Date()); diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestContext.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestContext.java index 8dfb8a509..ce991a1cc 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestContext.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/config/TestContext.java @@ -48,6 +48,7 @@ import de.latlon.xplan.commons.XPlanSchemas; import de.latlon.xplan.commons.archive.XPlanArchiveCreator; import de.latlon.xplan.commons.configuration.SortConfiguration; import de.latlon.xplan.commons.feature.SortPropertyReader; +import de.latlon.xplan.core.manager.db.model.Geltungsbereich; import de.latlon.xplan.manager.XPlanManager; import de.latlon.xplan.manager.configuration.ManagerConfiguration; import de.latlon.xplan.manager.database.ManagerWorkspaceWrapper; @@ -72,6 +73,9 @@ import org.deegree.cs.coordinatesystems.ICRS; import org.deegree.cs.exceptions.UnknownCRSException; import org.deegree.cs.persistence.CRSManager; import org.deegree.feature.persistence.FeatureStore; +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.io.ParseException; +import org.locationtech.jts.io.WKTReader; import org.mockito.Mockito; import org.slf4j.Logger; import org.slf4j.bridge.SLF4JBridgeHandler; @@ -259,6 +263,7 @@ public class TestContext { when(xplanDao.getXPlanList()).thenReturn(mockList); when(xplanDao.retrieveAllXPlanArtefacts(anyString())).thenReturn(mock(List.class)); when(xplanDao.retrieveAllXPlanArtefacts("42")).thenThrow(new PlanNotFoundException(42)); + when(xplanDao.retrieveGeltungsbereichOfPlanWithId("123")).thenReturn(geltungsbereichWGS84()); return xplanDao; } @@ -285,4 +290,9 @@ public class TestContext { LOG.trace("JUL logging enabled"); } + private Geltungsbereich geltungsbereichWGS84() throws ParseException { + Geometry jtsGeom = new WKTReader().read("POLYGON((0 0,1 0,1 1,0 1,0 0))"); + return new Geltungsbereich().id(123).geltungsbereich(jtsGeom); + } + } diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanApiTest.java index 4bea338c4..8078c137c 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlanApiTest.java @@ -191,7 +191,10 @@ class PlanApiTest extends ManagerApiJerseyTest<PlanApi> { @Test void verifyThat_GetPlanById_AsXml_ReturnsCorrectStatusAndContent() { - final Response response = target("/plan/123").request().accept(APPLICATION_XML).get(); + final Response response = target("/plan/123").queryParam("includeGeltungsbereich", "true") + .request() + .accept(APPLICATION_XML) + .get(); assertThat(response.getStatus()).isEqualTo(Response.Status.OK.getStatusCode()); assertThat(response.getHeaderString(HttpHeaders.CONTENT_TYPE)).isEqualTo(APPLICATION_XML); @@ -201,6 +204,8 @@ class PlanApiTest extends ManagerApiJerseyTest<PlanApi> { XmlAssert.assertThat(responseBody) .valueByXPath("/planInfo/links[rel='SELF']/href") .isEqualTo("http://localhost:8080/xplan-manager-api/xmanager/api/v1/plan/123"); + XmlAssert.assertThat(responseBody).valueByXPath("/planInfo/geltungsbereichWGS84/type").isEqualTo("POLYGON"); + XmlAssert.assertThat(responseBody).doesNotHaveXPath("/planInfo/geltungsbereichWGS84/coordinates"); } @Test diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlansApiTest.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlansApiTest.java index e07019a23..c3d2208ff 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlansApiTest.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v1/PlansApiTest.java @@ -39,8 +39,10 @@ class PlansApiTest extends ManagerApiJerseyTest<PlansApi> { .accept(APPLICATION_JSON) .get(); assertThat(response.getStatus()).isEqualTo(200); - assertThat(response.readEntity(String.class)) - .contains("{\"id\":123,\"type\":\"BP_Plan\",\"version\":\"XPLAN_41\","); + String responseEntity = response.readEntity(String.class); + assertThat(responseEntity).contains( + "{\"id\":123,\"type\":\"BP_Plan\",\"version\":\"XPLAN_41\",\"planStatus\":\"FESTGESTELLT\",\"raster\":false,\"importDate\":null,\"inspirePublished\":false,\"bbox\":null,"); + assertThat(responseEntity).doesNotContain("\"geltungsbereichWGS84\""); } @Test @@ -52,8 +54,24 @@ class PlansApiTest extends ManagerApiJerseyTest<PlansApi> { .get(); assertThat(response.getStatus()).isEqualTo(200); String responseEntity = response.readEntity(String.class); - assertThat(responseEntity).contains("{\"id\":123,\"type\":\"BP_Plan\",\"version\":\"XPLAN_41\","); - assertThat(responseEntity).contains("{\"id\":2,\"type\":\"BP_Plan\",\"version\":\"XPLAN_51\","); + assertThat(responseEntity).contains( + "{\"id\":123,\"type\":\"BP_Plan\",\"version\":\"XPLAN_41\",\"planStatus\":\"FESTGESTELLT\",\"raster\":false,\"importDate\":null,\"inspirePublished\":false,\"bbox\":null,"); + assertThat(responseEntity).contains( + "{\"id\":2,\"type\":\"BP_Plan\",\"version\":\"XPLAN_51\",\"planStatus\":\"FESTGESTELLT\",\"raster\":false,\"importDate\":null,\"inspirePublished\":false,\"bbox\":null,"); + assertThat(responseEntity).doesNotContain("\"geltungsbereichWGS84\""); + } + + @Test + void verifyThat_GetPlansById_includeGeltungsbereich() { + Response response = target("/plans").queryParam("planId", 123) + .queryParam("includeGeltungsbereich", "true") + .request() + .accept(APPLICATION_JSON) + .get(); + assertThat(response.getStatus()).isEqualTo(200); + String responseEntity = response.readEntity(String.class); + assertThat(responseEntity).contains( + "{\"id\":123,\"type\":\"BP_Plan\",\"version\":\"XPLAN_41\",\"planStatus\":\"FESTGESTELLT\",\"raster\":false,\"importDate\":null,\"inspirePublished\":false,\"bbox\":null,\"geltungsbereichWGS84\":{\"type\":\"Polygon\",\"bbox\":null,\"coordinates\":[[[0.0,0.0],[1.0,0.0],[1.0,1.0],[0.0,1.0],[0.0,0.0]]]},"); } } diff --git a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlansApi2Test.java b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlansApi2Test.java index ab5764e30..420af10a5 100644 --- a/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlansApi2Test.java +++ b/xplan-manager/xplan-manager-api/src/test/java/de/latlon/xplanbox/api/manager/v2/PlansApi2Test.java @@ -39,8 +39,10 @@ class PlansApi2Test extends ManagerApiJerseyTest<PlansApi2> { .accept(APPLICATION_JSON) .get(); assertThat(response.getStatus()).isEqualTo(200); - assertThat(response.readEntity(String.class)) - .contains("{\"id\":123,\"type\":\"BP_Plan\",\"version\":\"XPLAN_41\","); + String responseEntity = response.readEntity(String.class); + assertThat(responseEntity).contains( + "{\"id\":123,\"type\":\"BP_Plan\",\"version\":\"XPLAN_41\",\"planStatus\":\"FESTGESTELLT\",\"raster\":false,\"importDate\":null,\"inspirePublished\":false,\"bbox\":null,"); + assertThat(responseEntity).doesNotContain("\"geltungsbereichWGS84\""); } @Test @@ -52,8 +54,24 @@ class PlansApi2Test extends ManagerApiJerseyTest<PlansApi2> { .get(); assertThat(response.getStatus()).isEqualTo(200); String responseEntity = response.readEntity(String.class); - assertThat(responseEntity).contains("{\"id\":123,\"type\":\"BP_Plan\",\"version\":\"XPLAN_41\","); - assertThat(responseEntity).contains("{\"id\":2,\"type\":\"BP_Plan\",\"version\":\"XPLAN_51\","); + assertThat(responseEntity).contains( + "{\"id\":123,\"type\":\"BP_Plan\",\"version\":\"XPLAN_41\",\"planStatus\":\"FESTGESTELLT\",\"raster\":false,\"importDate\":null,\"inspirePublished\":false,\"bbox\":null,"); + assertThat(responseEntity).contains( + "{\"id\":2,\"type\":\"BP_Plan\",\"version\":\"XPLAN_51\",\"planStatus\":\"FESTGESTELLT\",\"raster\":false,\"importDate\":null,\"inspirePublished\":false,\"bbox\":null,"); + assertThat(responseEntity).doesNotContain("\"geltungsbereichWGS84\""); + } + + @Test + void verifyThat_GetPlansById_includeGeltungsbereich() { + Response response = target("/plans").queryParam("planId", 123) + .queryParam("includeGeltungsbereich", "true") + .request() + .accept(APPLICATION_JSON) + .get(); + assertThat(response.getStatus()).isEqualTo(200); + String responseEntity = response.readEntity(String.class); + assertThat(responseEntity).contains( + "{\"id\":123,\"type\":\"BP_Plan\",\"version\":\"XPLAN_41\",\"planStatus\":\"FESTGESTELLT\",\"raster\":false,\"importDate\":null,\"inspirePublished\":false,\"bbox\":null,\"geltungsbereichWGS84\":{\"type\":\"Polygon\",\"bbox\":null,\"coordinates\":[[[0.0,0.0],[1.0,0.0],[1.0,1.0],[0.0,1.0],[0.0,0.0]]]},"); } } diff --git a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/client/utils/WmsUrlUtils.java b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/client/utils/WmsUrlUtils.java index 2954d64fc..0b4610afe 100644 --- a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/client/utils/WmsUrlUtils.java +++ b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/client/utils/WmsUrlUtils.java @@ -41,9 +41,9 @@ public final class WmsUrlUtils { /** * Determines the correct XPlanWMS url via XPlanGateway: * <ul> - * <li>/xplan-ows/syn</li> - * <li>/xplan-ows/syn-pre</li> - * <li>/xplan-ows/syn-archive</li> + * <li>/ows/syn</li> + * <li>/ows/syn-pre</li> + * <li>/ows/syn-archive</li> * </ul> * @param planStatus status of the plan, may be <code>null</code> (means * PlanStatus.FESTGESTELLT) @@ -53,15 +53,15 @@ public final class WmsUrlUtils { public static String determineWmsUrl(PlanStatus planStatus, MapPreviewConfiguration configuration) { String xplanGatewayUrl = retrieveXPlanWerkUrl(configuration); String synStep = detectSynStepToAdd(planStatus); - return xplanGatewayUrl + "xplan-ows/" + synStep + "?"; + return xplanGatewayUrl + "ows/" + synStep + "?"; } /** * Determines the correct XPlanWerkWMS url via XPlanGateway: * <ul> - * <li>/xplan-ows/syn/planwerk/{planName}</li> - * <li>/xplan-ows/syn-pre/planwerk/{planName}</li> - * <li>/xplan-ows/syn-archive/planwerk/{planName}</li> + * <li>/ows/syn/planwerk/{planName}</li> + * <li>/ows/syn-pre/planwerk/{planName}</li> + * <li>/ows/syn-archive/planwerk/{planName}</li> * </ul> * @param planStatus status of the plan, may be <code>null</code> (means * PlanStatus.FESTGESTELLT) @@ -72,7 +72,7 @@ public final class WmsUrlUtils { PlanStatus planStatus) { String xplanGatewayUrl = retrieveXPlanWerkUrl(configuration); String synStep = detectSynStepToAdd(planStatus); - return xplanGatewayUrl + "xplan-ows/" + synStep + "/planwerk/" + planname + return xplanGatewayUrl + "ows/" + synStep + "/planwerk/" + planname + "?REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0"; } diff --git a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/BasicSpringConfig.java b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/BasicSpringConfig.java index 60aeeef13..eb7988dec 100644 --- a/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/BasicSpringConfig.java +++ b/xplan-manager/xplan-manager-web/src/main/java/de/latlon/xplan/manager/web/spring/config/BasicSpringConfig.java @@ -37,6 +37,7 @@ import de.latlon.xplan.commons.configuration.SortConfiguration; import de.latlon.xplan.commons.configuration.SystemPropertyPropertiesLoader; import de.latlon.xplan.commons.feature.SortPropertyReader; import de.latlon.xplan.core.manager.db.repository.ArtefactRepository; +import de.latlon.xplan.core.manager.db.repository.GeltungsbereichRepository; import de.latlon.xplan.core.manager.db.repository.PlanRepository; import de.latlon.xplan.core.manager.db.repository.PlanwerkWmsMetadataRepository; import de.latlon.xplan.inspire.plu.transformation.InspirePluTransformator; @@ -96,6 +97,7 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.PropertySource; import org.springframework.core.io.ResourceLoader; @@ -121,6 +123,10 @@ public class BasicSpringConfig { @Autowired private ArtefactRepository artefactRepository; + @Autowired + @Lazy + private GeltungsbereichRepository geltungsbereichRepository; + @Bean public SyntacticValidator syntacticValidator() { return new SyntacticValidatorImpl(); @@ -170,7 +176,8 @@ public class BasicSpringConfig { @Bean public XPlanDbAdapter xPlanDbAdapter() { - return new XPlanDbAdapter(planRepository, planwerkWmsMetadataRepository, artefactRepository); + return new XPlanDbAdapter(planRepository, planwerkWmsMetadataRepository, artefactRepository, + geltungsbereichRepository); } @Bean diff --git a/xplan-manager/xplan-manager-web/src/test/java/de/latlon/xplan/manager/web/client/utils/WmsUrlUtilsTest.java b/xplan-manager/xplan-manager-web/src/test/java/de/latlon/xplan/manager/web/client/utils/WmsUrlUtilsTest.java index 8a966cd3c..366fab5ef 100644 --- a/xplan-manager/xplan-manager-web/src/test/java/de/latlon/xplan/manager/web/client/utils/WmsUrlUtilsTest.java +++ b/xplan-manager/xplan-manager-web/src/test/java/de/latlon/xplan/manager/web/client/utils/WmsUrlUtilsTest.java @@ -41,7 +41,7 @@ class WmsUrlUtilsTest { String xplanGatewayUrl = "http://xplan-gateway"; String wmsUrl = WmsUrlUtils.determineWmsUrl(IN_AUFSTELLUNG, mockConfiguration(xplanGatewayUrl)); - assertEquals("http://xplan-gateway/xplan-ows/syn-pre?", wmsUrl); + assertEquals("http://xplan-gateway/ows/syn-pre?", wmsUrl); } @Test @@ -49,7 +49,7 @@ class WmsUrlUtilsTest { String xplanGatewayUrl = "http://xplan-gateway/"; String wmsUrl = WmsUrlUtils.determineWmsUrl(IN_AUFSTELLUNG, mockConfiguration(xplanGatewayUrl)); - assertEquals("http://xplan-gateway/xplan-ows/syn-pre?", wmsUrl); + assertEquals("http://xplan-gateway/ows/syn-pre?", wmsUrl); } @Test @@ -57,7 +57,7 @@ class WmsUrlUtilsTest { String xplanGatewayUrl = "http://xplan-gateway"; String wmsUrl = WmsUrlUtils.determineWmsUrl(FESTGESTELLT, mockConfiguration(xplanGatewayUrl)); - assertEquals("http://xplan-gateway/xplan-ows/syn?", wmsUrl); + assertEquals("http://xplan-gateway/ows/syn?", wmsUrl); } @Test @@ -65,7 +65,7 @@ class WmsUrlUtilsTest { String xplanGatewayUrl = "http://xplan-gateway/"; String wmsUrl = WmsUrlUtils.determineWmsUrl(FESTGESTELLT, mockConfiguration(xplanGatewayUrl)); - assertEquals("http://xplan-gateway/xplan-ows/syn?", wmsUrl); + assertEquals("http://xplan-gateway/ows/syn?", wmsUrl); } @Test @@ -73,7 +73,7 @@ class WmsUrlUtilsTest { String xplanGatewayUrl = "http://xplan-gateway"; String wmsUrl = WmsUrlUtils.determineWmsUrl(ARCHIVIERT, mockConfiguration(xplanGatewayUrl)); - assertEquals("http://xplan-gateway/xplan-ows/syn-archive?", wmsUrl); + assertEquals("http://xplan-gateway/ows/syn-archive?", wmsUrl); } @Test @@ -81,7 +81,7 @@ class WmsUrlUtilsTest { String xplanGatewayUrl = "http://xplan-gateway/"; String wmsUrl = WmsUrlUtils.determineWmsUrl(ARCHIVIERT, mockConfiguration(xplanGatewayUrl)); - assertEquals("http://xplan-gateway/xplan-ows/syn-archive?", wmsUrl); + assertEquals("http://xplan-gateway/ows/syn-archive?", wmsUrl); } @Test @@ -89,7 +89,7 @@ class WmsUrlUtilsTest { String xplanGatewayUrl = "http://xplan-gateway"; String wmsUrl = WmsUrlUtils.determineWmsUrl(null, mockConfiguration(xplanGatewayUrl)); - assertEquals("http://xplan-gateway/xplan-ows/syn?", wmsUrl); + assertEquals("http://xplan-gateway/ows/syn?", wmsUrl); } @Test @@ -97,7 +97,7 @@ class WmsUrlUtilsTest { String xplanGatewayUrl = "http://xplan-gateway/"; String wmsUrl = WmsUrlUtils.determineWmsUrl(null, mockConfiguration(xplanGatewayUrl)); - assertEquals("http://xplan-gateway/xplan-ows/syn?", wmsUrl); + assertEquals("http://xplan-gateway/ows/syn?", wmsUrl); } @Test @@ -107,7 +107,7 @@ class WmsUrlUtilsTest { ARCHIVIERT); assertEquals( - "http://xplan-gateway/xplan-ows/syn-archive/planwerk/PlanName10?REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0", + "http://xplan-gateway/ows/syn-archive/planwerk/PlanName10?REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0", planwerkWmsUrl); } @@ -118,7 +118,7 @@ class WmsUrlUtilsTest { mockConfiguration(xplanGatewayUrl), FESTGESTELLT); assertEquals( - "http://xplan-gateway/xplan-ows/syn/planwerk/Plan Name 10 mit /?REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0", + "http://xplan-gateway/ows/syn/planwerk/Plan Name 10 mit /?REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0", planwerkWmsUrl); } @@ -129,7 +129,7 @@ class WmsUrlUtilsTest { mockConfiguration(xplanGatewayUrl), IN_AUFSTELLUNG); assertEquals( - "http://xplan-gateway/xplan-ows/syn-pre/planwerk/Plan Name 10 mit /?REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0", + "http://xplan-gateway/ows/syn-pre/planwerk/Plan Name 10 mit /?REQUEST=GetCapabilities&SERVICE=WMS&VERSION=1.3.0", planwerkWmsUrl); } diff --git a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-gateway-soapui-project.xml b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-gateway-soapui-project.xml index 3994dd057..701103f6c 100644 --- a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-gateway-soapui-project.xml +++ b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-gateway-soapui-project.xml @@ -4,35 +4,44 @@ baseUrlGateway=http://localhost:8095/xplan-gateway</con:description> <con:settings/> - <con:testSuite id="523261f9-fe0e-46de-83bf-d1b6f737edc5" name="xplan-ows"> + <con:testSuite id="523261f9-fe0e-46de-83bf-d1b6f737edc5" name="ows"> <con:settings/> <con:runType>SEQUENTIAL</con:runType> <con:testCase id="116d7717-e494-4179-a1c2-31667adde3d9" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="validator" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> <con:settings/> - <con:testStep type="httprequest" name="WMS - GetCapabilities" id="03e63c0d-588a-4d6e-ad36-cb5d6fa20d9b"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="22f48457-2c42-4c6e-815d-348b27ef09ed"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/validator</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/validator</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; - -exists(/wms:WMS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="f1b05f1b-1f80-4825-b36a-212ee2759aa0" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/validator?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -59,27 +68,28 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="0aba0c25-ce17-495b-9934-5eea6e643376" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="WMS - GetCapabilities" id="d2a249a8-b99b-4e25-b407-ff1bcbe1c1af"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="03e63c0d-588a-4d6e-ad36-cb5d6fa20d9b"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/validator</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> <path>declare namespace wms='http://www.opengis.net/wms'; @@ -90,6 +100,18 @@ exists(/wms:WMS_Capabilities)</path> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="fc7501ac-08e4-4d85-84f2-5df589d29828" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/validator?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -116,33 +138,51 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="WFS - GetCapabilities" id="a660c842-a8e7-48a0-b4ec-c739af0f07d0"> + <con:properties/> + </con:testCase> + <con:testCase id="0aba0c25-ce17-495b-9934-5eea6e643376" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="d2a249a8-b99b-4e25-b407-ff1bcbe1c1af"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; - -exists(/wms:WFS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="e568fdc6-71a3-4aad-9086-a185af804362" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -155,7 +195,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -169,27 +209,28 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="5356e56a-7c4a-4ba8-ab7d-90e8f091ecf3" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-pre" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="GetCapabilities" id="63665bf2-378e-433b-93d0-fbe481408471"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="990e5022-5178-4e1b-92aa-90ba3741dfde"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-pre</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> <path>declare namespace wms='http://www.opengis.net/wms'; @@ -200,6 +241,18 @@ exists(/wms:WMS_Capabilities)</path> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="812e2d8b-5763-4618-aef5-1e98a55f08a8" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -226,33 +279,51 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="WFS - GetCapabilities" id="8c3f8e17-5011-417f-9b80-3215cb257eb3"> + <con:testStep type="httprequest" name="WFS GetCapabilities 1.1.0" id="51468942-cc65-4b11-9c98-df6b2c2bb9b5"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-pre</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace wfs='http://www.opengis.net/wfs'; -exists(/wms:WFS_Capabilities)</path> +exists(/wfs:WFS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="d42e393e-7e50-402e-a973-29109b29c595" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -264,7 +335,7 @@ exists(/wms:WFS_Capabilities)</path> <con:jmsPropertyConfig/> <con:parameters> <con:parameter> - <con:name>SERVICE</con:name> + <con:name>sERVICE</con:name> <con:value>WFS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> @@ -272,44 +343,58 @@ exists(/wms:WFS_Capabilities)</path> <con:description xsi:nil="true"/> </con:parameter> <con:parameter> - <con:name>REQUEST</con:name> + <con:name>rEQUEST</con:name> <con:value>GetCapabilities</con:value> <con:style>QUERY</con:style> <con:default>GetCapabilities</con:default> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="b325a2f2-6ff1-40dc-abc0-46657d189440" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-archive" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="GetCapabilities" id="73c44265-0ba9-4907-999d-9b86dd3c9fef"> + <con:testStep type="httprequest" name="WFS GetCapabilities 2.0.0" id="a660c842-a8e7-48a0-b4ec-c739af0f07d0"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-archive</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="45512384-9bac-4e61-a0c4-fcabd086c179" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; -exists(/wms:WMS_Capabilities)</path> +exists(/wfs:WFS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="b4fe547e-6d10-4d7e-bfdd-d6606ddf9b94" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -322,7 +407,7 @@ exists(/wms:WMS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WMS</con:value> + <con:value>WFS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -336,33 +421,51 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="WFS - GetCapabilities" id="87b5bcf7-d297-4dd4-ae0c-decf677aac6d"> + <con:properties/> + </con:testCase> + <con:testCase id="5356e56a-7c4a-4ba8-ab7d-90e8f091ecf3" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-pre" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="63665bf2-378e-433b-93d0-fbe481408471"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-archive</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; - -exists(/wms:WFS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="fe969d65-bc50-4ab3-833f-d0fd94ef3fa7" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -375,7 +478,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -389,27 +492,28 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="94f52cc9-af75-4403-a0f8-35f553f057a2" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn/planart" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="bp - GetCapabilities" id="e166dc5b-6ba6-4406-95d4-09dca45299df"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="475adaea-15b2-4aba-a93f-b3ceb7add862"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="bp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn/planart/bp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> <path>declare namespace wms='http://www.opengis.net/wms'; @@ -420,6 +524,18 @@ exists(/wms:WMS_Capabilities)</path> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="ecff27e2-2f64-4d24-b430-670a1fa13ccf" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -446,33 +562,51 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="fp - GetCapabilities" id="562f222d-9213-49c5-933f-367efa305f83"> + <con:testStep type="httprequest" name="WFS GetCapabilities 1.1.0" id="8c3f8e17-5011-417f-9b80-3215cb257eb3"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="fp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn/planart/fp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; + <path>declare namespace wfs='http://www.opengis.net/wfs'; -exists(/wms:WMS_Capabilities)</path> +exists(/wfs:WFS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="c6bafd9a-dfeb-45a9-852e-39e0844f2533" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -484,48 +618,66 @@ exists(/wms:WMS_Capabilities)</path> <con:jmsPropertyConfig/> <con:parameters> <con:parameter> - <con:name>sERVICE</con:name> - <con:value>WMS</con:value> + <con:name>SERVICE</con:name> + <con:value>WFS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> <con:parameter> - <con:name>rEQUEST</con:name> + <con:name>REQUEST</con:name> <con:value>GetCapabilities</con:value> <con:style>QUERY</con:style> <con:default>GetCapabilities</con:default> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="lp - GetCapabilities" id="329dbcc7-0403-420b-b9dc-5156e8947aa4"> + <con:testStep type="httprequest" name="WFS GetCapabilities 2.0.0" id="907b6dcc-b056-4c8b-84ee-b52f999f760f"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="lp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn/planart/lp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; -exists(/wms:WMS_Capabilities)</path> +exists(/wfs:WFS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="c283c0fd-0e57-4c3a-82e5-cbc0c98620a4" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -537,48 +689,66 @@ exists(/wms:WMS_Capabilities)</path> <con:jmsPropertyConfig/> <con:parameters> <con:parameter> - <con:name>sERVICE</con:name> - <con:value>WMS</con:value> + <con:name>SERVICE</con:name> + <con:value>WFS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> <con:parameter> - <con:name>rEQUEST</con:name> + <con:name>REQUEST</con:name> <con:value>GetCapabilities</con:value> <con:style>QUERY</con:style> <con:default>GetCapabilities</con:default> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="rp - GetCapabilities" id="61738818-9f41-4457-a7ec-f1394a6879ad"> + <con:properties/> + </con:testCase> + <con:testCase id="b325a2f2-6ff1-40dc-abc0-46657d189440" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-archive" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="73c44265-0ba9-4907-999d-9b86dd3c9fef"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="rp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn/planart/rp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="45512384-9bac-4e61-a0c4-fcabd086c179" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; - -exists(/wms:WMS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="79b5c82b-8819-4b38-9da0-5cac148bc784" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -605,23 +775,28 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="so - GetCapabilities" id="b046989a-a6d1-4feb-bc37-01b3aeed1266"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="69607a09-6576-477f-aca4-998b6a974749"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="so - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn/planart/so</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="45512384-9bac-4e61-a0c4-fcabd086c179" name="Capabilities"> <con:configuration> <path>declare namespace wms='http://www.opengis.net/wms'; @@ -632,6 +807,18 @@ exists(/wms:WMS_Capabilities)</path> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="fd3eaf94-862a-4096-a16e-8d43770923c2" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -658,37 +845,51 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="249715b5-3610-4b82-98c3-31003c2b4693" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-pre/planart" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="bp - GetCapabilities" id="64347cd3-159e-4396-b9da-8b4f17f4c0c9"> + <con:testStep type="httprequest" name="WFS GetCapabilities 1.1.0" id="87b5bcf7-d297-4dd4-ae0c-decf677aac6d"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="bp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-pre/planart/bp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; + <path>declare namespace wfs='http://www.opengis.net/wfs'; -exists(/wms:WMS_Capabilities)</path> +exists(/wfs:WFS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="2216b869-cfdd-4e8b-9d6e-6d0e074c684e" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -701,7 +902,7 @@ exists(/wms:WMS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WMS</con:value> + <con:value>WFS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -715,33 +916,51 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="fp - GetCapabilities" id="e1f18271-4677-4baa-8ebb-fd0955a4f75d"> + <con:testStep type="httprequest" name="WFS GetCapabilities 2.0.0" id="bf009935-e685-4fcd-8ef4-db8d1bb69998"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="fp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-pre/planart/fp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; -exists(/wms:WMS_Capabilities)</path> +exists(/wfs:WFS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="7d1655f2-09a6-4daa-b00c-0dbe81cf1d23" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -754,7 +973,7 @@ exists(/wms:WMS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WMS</con:value> + <con:value>WFS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -768,33 +987,51 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="lp - GetCapabilities" id="0ce0a5ce-4b9a-4867-a91d-d07a960bd5cd"> + <con:properties/> + </con:testCase> + <con:testCase id="94f52cc9-af75-4403-a0f8-35f553f057a2" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn/planart" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="bp WMS GetCapabilities 1.1.1" id="e166dc5b-6ba6-4406-95d4-09dca45299df"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="lp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="bp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-pre/planart/lp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planart/bp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; - -exists(/wms:WMS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="8923a1ea-e8fa-4484-82ef-3fca15048671" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn/planart/bp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -821,23 +1058,28 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="rp - GetCapabilities" id="d22a8f8e-36ad-453b-b616-9c6c84bccfa3"> + <con:testStep type="httprequest" name="bp WMS GetCapabilities 1.3.0" id="92135cc9-82fb-4416-80e9-e1302a665237"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="rp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="bp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-pre/planart/rp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planart/bp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> <path>declare namespace wms='http://www.opengis.net/wms'; @@ -848,6 +1090,18 @@ exists(/wms:WMS_Capabilities)</path> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="13a9a531-fb88-49cb-a807-7ad8efea0e83" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn/planart/bp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -874,38 +1128,52 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="so - GetCapabilities" id="8e1587d6-9670-4a99-a6d1-08b330492450"> + <con:testStep type="httprequest" name="fp WMS GetCapabilities 1.1.1" id="562f222d-9213-49c5-933f-367efa305f83"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="so - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="fp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-pre/planart/so</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planart/fp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; - -exists(/wms:WMS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:assertion type="XPath Match" id="e4f0941a-1c3a-4ed1-a197-b3242b8a37eb" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn/planart/fp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:authType>Global HTTP Settings</con:authType> </con:credentials> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> @@ -927,27 +1195,28 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="d6176f53-47d5-474c-b50a-a9bbc776a3f5" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-archive/planart" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="bp - GetCapabilities" id="bd76e65f-f320-4aeb-b242-9aea11f1d004"> + <con:testStep type="httprequest" name="fp WMS GetCapabilities 1.3.0" id="200cca3e-e6bb-455a-a8ed-ccc7c7d77ee3"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="bp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="fp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-archive/planart/bp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planart/fp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> <path>declare namespace wms='http://www.opengis.net/wms'; @@ -958,6 +1227,18 @@ exists(/wms:WMS_Capabilities)</path> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="b901ab84-700f-4575-91b2-63312b974bcb" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn/planart/fp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -984,33 +1265,47 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="fp - GetCapabilities" id="7996e9b1-93b0-4f80-b867-34459eb832e6"> + <con:testStep type="httprequest" name="lp WMS GetCapabilities 1.1.1" id="329dbcc7-0403-420b-b9dc-5156e8947aa4"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="fp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="lp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-archive/planart/fp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planart/lp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; - -exists(/wms:WMS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="93cb6400-4830-46b9-b2f4-25048de98019" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn/planart/lp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1037,23 +1332,28 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="lp - GetCapabilities" id="e4435c5e-783e-42f0-978c-6ec646f5c2f0"> + <con:testStep type="httprequest" name="lp WMS GetCapabilities 1.3.0" id="a15ad156-5056-4958-b7c1-3bd1b362baec"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="lp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="lp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-archive/planart/lp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planart/lp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> <path>declare namespace wms='http://www.opengis.net/wms'; @@ -1064,6 +1364,18 @@ exists(/wms:WMS_Capabilities)</path> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="17dbfe2b-158c-4986-a0e4-47e4e53b1173" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn/planart/lp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1090,33 +1402,47 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="rp - GetCapabilities" id="12fdaab7-a1e2-4eed-83c0-76d72cb36aaf"> + <con:testStep type="httprequest" name="rp WMS GetCapabilities 1.1.1" id="61738818-9f41-4457-a7ec-f1394a6879ad"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="rp - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="rp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-archive/planart/rp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planart/rp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; - -exists(/wms:WMS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="8ff8bf23-5441-40db-91e9-5ed3c0affbc2" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn/planart/rp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1143,23 +1469,28 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="so - GetCapabilities" id="cbaf32c7-fd56-48ae-8ce0-c95c22ba9b14"> + <con:testStep type="httprequest" name="rp WMS GetCapabilities 1.3.0" id="4e03fba3-6816-4ad3-953e-cc161b7d17b9"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="so - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="rp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-archive/planart/so</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planart/rp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> <path>declare namespace wms='http://www.opengis.net/wms'; @@ -1170,6 +1501,18 @@ exists(/wms:WMS_Capabilities)</path> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="ab41c064-9c21-42f7-9c1d-3d77773bceba" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn/planart/rp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1196,37 +1539,47 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="eb83486a-384f-43c1-9a7c-a397cd103e92" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn/planwerk" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="GetCapabilities" id="98ef2e5b-53c3-41b0-981f-f62a984479c1"> + <con:testStep type="httprequest" name="so WMS GetCapabilities 1.1.1" id="b046989a-a6d1-4feb-bc37-01b3aeed1266"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="so WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn/planwerk/unknown</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planart/so</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace ogc='http://www.opengis.net/ogc'; - -exists(/ogc:ServiceExceptionReport)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="1130f880-2247-4f7e-bbc6-5c6b64faf5dc" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn/planart/so?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1253,37 +1606,50 @@ exists(/ogc:ServiceExceptionReport)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="a862b407-57ce-42df-963a-5ede47e65469" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-pre/planwerk" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="GetCapabilities" id="f80f914a-90ca-4d06-bb48-483a6c59f943"> + <con:testStep type="httprequest" name="so WMS GetCapabilities 1.3.0" id="12ba446a-e1df-42c7-b81c-a8443154f7c5"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="so WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-pre/planwerk/unknown</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planart/so</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace ogc='http://www.opengis.net/ogc'; + <path>declare namespace wms='http://www.opengis.net/wms'; -exists(/ogc:ServiceExceptionReport)</path> +exists(/wms:WMS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="863ac5d9-e7da-44d6-90ec-8fdde7d0abb9" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn/planart/so?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1310,37 +1676,51 @@ exists(/ogc:ServiceExceptionReport)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> <con:properties/> </con:testCase> - <con:testCase id="941989f0-fe3a-4d00-8223-26cde8e23a83" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-archive/planwerk" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:testCase id="249715b5-3610-4b82-98c3-31003c2b4693" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-pre/planart" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> <con:settings/> - <con:testStep type="httprequest" name="GetCapabilities" id="5dab7e64-31ff-4bc7-8805-f2a04e8b5d05"> + <con:testStep type="httprequest" name="bp WMS GetCapabilities 1.1.1" id="64347cd3-159e-4396-b9da-8b4f17f4c0c9"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="bp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/syn-archive/planwerk/unknown</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planart/bp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace ogc='http://www.opengis.net/ogc'; - -exists(/ogc:ServiceExceptionReport)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="125157bd-4b64-4ce0-af85-510e631df9bd" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre/planart/bp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1367,37 +1747,50 @@ exists(/ogc:ServiceExceptionReport)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="a38af21b-1de7-46ee-b5ed-37ae4139791d" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="4.0-6.0" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="4.0 - WFS - GetCapabilities" id="d880455a-ffec-4fdb-8f47-a19ac3c91901"> + <con:testStep type="httprequest" name="bp WMS GetCapabilities 1.3.0" id="9b4d781c-0e97-414b-9180-7949d05b5632"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.0 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="bp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/4.0</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planart/bp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace wms='http://www.opengis.net/wms'; -exists(/wms:WFS_Capabilities)</path> +exists(/wms:WMS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="ef6057f8-2a93-4c00-b169-57c691258a93" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre/planart/bp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1410,7 +1803,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -1424,33 +1817,47 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="4.1 - WFS - GetCapabilities" id="de71f706-d8f2-44a5-81f6-20596f620dcf"> + <con:testStep type="httprequest" name="fp WMS GetCapabilities 1.1.1" id="e1f18271-4677-4baa-8ebb-fd0955a4f75d"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.1 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="fp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/4.1</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planart/fp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; - -exists(/wms:WFS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="cee30af8-484c-4f63-9092-5ff397dcd7c3" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre/planart/fp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1463,7 +1870,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -1477,33 +1884,50 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.0 - WFS - GetCapabilities" id="7ded1e9a-85d8-470c-8550-66ad418966e7"> + <con:testStep type="httprequest" name="fp WMS GetCapabilities 1.3.0" id="adf56c84-d7a6-4d45-b170-80a9790fcf71"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.0 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="fp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.0</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planart/fp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace wms='http://www.opengis.net/wms'; -exists(/wms:WFS_Capabilities)</path> +exists(/wms:WMS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="e8be8a9f-4a17-4540-872d-6fc60ce90136" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre/planart/fp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1516,7 +1940,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -1530,33 +1954,47 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.1 - WFS - GetCapabilities" id="75aa9b7a-12af-450f-ba34-865eae21b558"> + <con:testStep type="httprequest" name="lp WMS GetCapabilities 1.1.1" id="0ce0a5ce-4b9a-4867-a91d-d07a960bd5cd"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.1 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="lp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.1</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planart/lp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; - -exists(/wms:WFS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="008624a5-a3ae-43c7-a30a-0619cf43d319" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre/planart/lp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1569,7 +2007,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -1583,33 +2021,50 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.2 - WFS - GetCapabilities" id="9ce46bdc-0e62-4471-9c66-e79b89d7dd86"> + <con:testStep type="httprequest" name="lp WMS GetCapabilities 1.3.0" id="17dd7473-8346-49de-af2e-3acd53e20372"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.2 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="lp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.2</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planart/lp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace wms='http://www.opengis.net/wms'; -exists(/wms:WFS_Capabilities)</path> +exists(/wms:WMS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="212eb258-c221-408e-af1a-71b495bea9de" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre/planart/lp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1622,7 +2077,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -1636,33 +2091,47 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.3 - WFS - GetCapabilities" id="f8bfba8f-1f93-495d-af6d-edf0605e802f"> + <con:testStep type="httprequest" name="rp WMS GetCapabilities 1.1.1" id="d22a8f8e-36ad-453b-b616-9c6c84bccfa3"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.3 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="rp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.3</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planart/rp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; - -exists(/wms:WFS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="8e922bc6-6813-4107-8e30-1584bb72a404" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre/planart/rp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1675,7 +2144,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -1689,33 +2158,50 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.4 - WFS - GetCapabilities" id="b67dbc10-8ffb-480b-ab49-05a910fe6811"> + <con:testStep type="httprequest" name="rp WMS GetCapabilities 1.3.0" id="fe19014c-b118-4377-8990-cc5565b136b5"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.4 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="rp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.4</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planart/rp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace wms='http://www.opengis.net/wms'; -exists(/wms:WFS_Capabilities)</path> +exists(/wms:WMS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="332dd748-3fe5-4b2c-bc24-696ad6c4ea29" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre/planart/rp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1728,7 +2214,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -1742,33 +2228,47 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="6.0 - WFS - GetCapabilities" id="4e684b2e-0ca3-4a06-9573-68e34ed7dffc"> + <con:testStep type="httprequest" name="so WMS GetCapabilities 1.1.1" id="8e1587d6-9670-4a99-a6d1-08b330492450"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="6.0 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="so WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/6.0</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planart/so</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; - -exists(/wms:WFS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="2e3e17db-e543-43eb-ab32-6f41e505cf2f" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre/planart/so?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1781,7 +2281,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -1795,42 +2295,55 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="9bd75333-34f7-4fba-bc8f-4412bb3824cd" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="4.0-6.0-pre" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="4.0 - WFS - GetCapabilities" id="34e21483-ab0d-471c-b6d1-cff657ee0920"> + <con:testStep type="httprequest" name="so WMS GetCapabilities 1.3.0" id="2f859590-dc52-4e97-a4e5-abd524e6e42e"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.0 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="so WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/4.0-pre</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planart/so</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace wms='http://www.opengis.net/wms'; -exists(/wms:WFS_Capabilities)</path> +exists(/wms:WMS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> - <con:credentials> - <con:username>${#Project#username}</con:username> - <con:password>${#Project#password}</con:password> - <con:selectedAuthProfile>Basic</con:selectedAuthProfile> - <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:assertion type="XPath Match" id="3a685863-3e61-404e-a3d6-b71995ba6c5a" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-pre/planart/so?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> <con:authType>Global HTTP Settings</con:authType> </con:credentials> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> @@ -1838,7 +2351,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -1852,33 +2365,51 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="4.1 - WFS - GetCapabilities" id="d0ca16a5-3a82-4e4f-8ead-318518eb772c"> + <con:properties/> + </con:testCase> + <con:testCase id="d6176f53-47d5-474c-b50a-a9bbc776a3f5" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-archive/planart" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="bp WMS GetCapabilities 1.1.1" id="bd76e65f-f320-4aeb-b242-9aea11f1d004"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.1 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="bp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/4.1-pre</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planart/bp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; - -exists(/wms:WFS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="0a3961fd-2fb5-4ea5-852a-c3efda1dd9fa" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive/planart/bp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1891,7 +2422,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -1905,33 +2436,50 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.0 - WFS - GetCapabilities" id="c9471a11-7ff3-4209-a54e-57fdf523bd6c"> + <con:testStep type="httprequest" name="bp WMS GetCapabilities 1.3.0" id="23de2b4a-505b-42f4-a94b-01679d606869"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.0 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="bp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.0-pre</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planart/bp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace wms='http://www.opengis.net/wms'; -exists(/wms:WFS_Capabilities)</path> +exists(/wms:WMS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="32c61617-6a84-4063-8e79-3f7097f40c41" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive/planart/bp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1944,7 +2492,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -1958,33 +2506,47 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.1 - WFS - GetCapabilities" id="362b198f-3aa3-4aa9-b25b-89f7f16dc8cc"> + <con:testStep type="httprequest" name="fp WMS GetCapabilities 1.1.1" id="7996e9b1-93b0-4f80-b867-34459eb832e6"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.1 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="fp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.1-pre</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planart/fp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; - -exists(/wms:WFS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="7417c378-6df2-416a-a7c8-beb6a198624f" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive/planart/fp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -1997,7 +2559,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2011,33 +2573,50 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.2 - WFS - GetCapabilities" id="ae4a8c5f-9589-4723-bd2c-564d3e5f8b83"> + <con:testStep type="httprequest" name="fp WMS GetCapabilities 1.3.0" id="e055523a-29fa-4442-bef9-d6946b585bf3"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.2 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="fp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.2-pre</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planart/fp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace wms='http://www.opengis.net/wms'; -exists(/wms:WFS_Capabilities)</path> +exists(/wms:WMS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="17238241-b144-42ad-87ec-4c4147edcca2" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive/planart/fp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2050,7 +2629,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2064,33 +2643,47 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.3 - WFS - GetCapabilities" id="5617e87f-aeaa-4271-9771-2ce60c9eac7b"> + <con:testStep type="httprequest" name="lp WMS GetCapabilities 1.1.1" id="e4435c5e-783e-42f0-978c-6ec646f5c2f0"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.3 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="lp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.3-pre</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planart/lp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; - -exists(/wms:WFS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="84e9a91d-d892-4b6a-abce-6150c9c5c911" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive/planart/lp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2103,7 +2696,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2117,33 +2710,50 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.4 - WFS - GetCapabilities" id="b3346978-28de-4cb8-877b-671d69b61fbf"> + <con:testStep type="httprequest" name="lp WMS GetCapabilities 1.3.0" id="6f4965ab-856b-43d1-ac57-4aecf9b6fb2e"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.4 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="lp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.4-pre</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planart/lp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace wms='http://www.opengis.net/wms'; -exists(/wms:WFS_Capabilities)</path> +exists(/wms:WMS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="e85e1129-c9fd-415d-b2c8-ca29837023c9" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive/planart/lp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2156,7 +2766,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2170,33 +2780,47 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="6.0 - WFS - GetCapabilities" id="91d833bf-5d96-4318-ac02-160a15600ba4"> + <con:testStep type="httprequest" name="rp WMS GetCapabilities 1.1.1" id="12fdaab7-a1e2-4eed-83c0-76d72cb36aaf"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="6.0 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="rp WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/6.0-pre</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planart/rp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; - -exists(/wms:WFS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="e5199506-79cd-45ee-a4c7-d0a7094cbf69" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive/planart/rp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2209,7 +2833,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2223,37 +2847,50 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="d081d635-f4cc-4b7b-9e29-01bdc1d8f479" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="4.0-6.0-archive" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="4.0 - WFS - GetCapabilities" id="e59fb8bc-e634-4dae-be00-d52b5bc465d9"> + <con:testStep type="httprequest" name="rp WMS GetCapabilities 1.3.0" id="0dc9bd09-b838-4425-9faa-38b27452b5a4"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.0 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="rp WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/4.0-archive</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planart/rp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace wms='http://www.opengis.net/wms'; -exists(/wms:WFS_Capabilities)</path> +exists(/wms:WMS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="757e07b4-b17d-403f-ac34-64bda910dffe" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive/planart/rp?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2266,7 +2903,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2280,33 +2917,47 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="4.1 - WFS - GetCapabilities" id="de60a833-d83f-474a-bfb7-56e28a78bff0"> + <con:testStep type="httprequest" name="so WMS GetCapabilities 1.1.1" id="cbaf32c7-fd56-48ae-8ce0-c95c22ba9b14"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.1 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="so WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/4.1-archive</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planart/so</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; - -exists(/wms:WFS_Capabilities)</path> + <path>exists(/WMT_MS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="7f7f14da-2f7f-476f-a8cd-d285f5f27cb6" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive/planart/so?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2319,7 +2970,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2333,33 +2984,50 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.0 - WFS - GetCapabilities" id="f25756e1-3178-4918-bb28-1f9396826a36"> + <con:testStep type="httprequest" name="so WMS GetCapabilities 1.3.0" id="380ac64b-7445-4a13-b225-40f45b1a9788"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.0 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="so WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.0-archive</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planart/so</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace wms='http://www.opengis.net/wms'; -exists(/wms:WFS_Capabilities)</path> +exists(/wms:WMS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="c23b1880-057c-4710-b715-1983fe9d4447" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/syn-archive/planart/so?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2372,7 +3040,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2386,27 +3054,36 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.1 - WFS - GetCapabilities" id="b156b743-63c1-4e2f-b948-5b22147f7ced"> + <con:properties/> + </con:testCase> + <con:testCase id="eb83486a-384f-43c1-9a7c-a397cd103e92" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn/planwerk" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="98ef2e5b-53c3-41b0-981f-f62a984479c1"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.1 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.1-archive</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planwerk/unknown</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace ogc='http://www.opengis.net/ogc'; -exists(/wms:WFS_Capabilities)</path> +exists(/ogc:ServiceExceptionReport)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> @@ -2425,7 +3102,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2439,27 +3116,32 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.2 - WFS - GetCapabilities" id="8324520a-ab39-4f08-bad0-4eb7b8627c4a"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="ab522593-d48e-4101-878b-d20454ca4ff0"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.2 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.2-archive</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn/planwerk/unknown</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace ogc='http://www.opengis.net/ogc'; -exists(/wms:WFS_Capabilities)</path> +exists(/ogc:ServiceExceptionReport)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> @@ -2478,7 +3160,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2492,27 +3174,36 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.3 - WFS - GetCapabilities" id="d073d137-426e-463e-be68-c10aadaad284"> + <con:properties/> + </con:testCase> + <con:testCase id="a862b407-57ce-42df-963a-5ede47e65469" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-pre/planwerk" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="f80f914a-90ca-4d06-bb48-483a6c59f943"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.3 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.3-archive</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planwerk/unknown</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace ogc='http://www.opengis.net/ogc'; -exists(/wms:WFS_Capabilities)</path> +exists(/ogc:ServiceExceptionReport)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> @@ -2531,7 +3222,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2545,27 +3236,32 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="5.4 - WFS - GetCapabilities" id="be58ac1a-6f38-48e1-a9e3-236dc3f42ff8"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="d719d0c4-c205-4e3f-88fb-c4f64efadafe"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.4 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/5.4-archive</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-pre/planwerk/unknown</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace ogc='http://www.opengis.net/ogc'; -exists(/wms:WFS_Capabilities)</path> +exists(/ogc:ServiceExceptionReport)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> @@ -2584,7 +3280,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2598,27 +3294,36 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="6.0 - WFS - GetCapabilities" id="011da7b0-d6c9-4969-ada2-7d6a07e6e413"> + <con:properties/> + </con:testCase> + <con:testCase id="941989f0-fe3a-4d00-8223-26cde8e23a83" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="syn-archive/planwerk" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="5dab7e64-31ff-4bc7-8805-f2a04e8b5d05"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="6.0 - WFS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/6.0-archive</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planwerk/unknown</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wfs/2.0'; + <path>declare namespace ogc='http://www.opengis.net/ogc'; -exists(/wms:WFS_Capabilities)</path> +exists(/ogc:ServiceExceptionReport)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> @@ -2637,7 +3342,7 @@ exists(/wms:WFS_Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WFS</con:value> + <con:value>WMS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2651,31 +3356,32 @@ exists(/wms:WFS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="0a07c547-3052-4bdc-8356-aa9d442af4c5" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="cache" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="WMS - GetCapabilities" id="ee112c8e-95c5-4146-b0f5-fedcb77391d7"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="f94177d2-3962-4321-b691-28a5c1eea41f"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/cache</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/syn-archive/planwerk/unknown</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wms='http://www.opengis.net/wms'; + <path>declare namespace ogc='http://www.opengis.net/ogc'; -exists(/wms:WMS_Capabilities)</path> +exists(/ogc:ServiceExceptionReport)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> @@ -2708,33 +3414,55 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:testStep type="httprequest" name="WMTS - GetCapabilities" id="6146d8f2-7403-48ab-a339-66fe230665c2"> + <con:properties/> + </con:testCase> + <con:testCase id="a38af21b-1de7-46ee-b5ed-37ae4139791d" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="4.0-6.0" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="4.0 WFS GetCapabilities 1.1.0" id="d880455a-ffec-4fdb-8f47-a19ac3c91901"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMTS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.0 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/cache</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.0</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wmts='http://www.opengis.net/wmts/1.0'; + <path>declare namespace wfs='http://www.opengis.net/wfs'; -exists(/wmts:Capabilities)</path> +exists(/wfs:WFS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="1f86aa00-d48c-4089-8959-3d0449538315" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.0?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2747,7 +3475,7 @@ exists(/wmts:Capabilities)</path> <con:parameters> <con:parameter> <con:name>sERVICE</con:name> - <con:value>WMTS</con:value> + <con:value>WFS</con:value> <con:style>QUERY</con:style> <con:default>WMS</con:default> <con:path xsi:nil="true"/> @@ -2761,37 +3489,51 @@ exists(/wmts:Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> - <con:properties/> - </con:testCase> - <con:testCase id="6b69a20b-120f-4879-9474-79ad32150d9d" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="cache/tiles" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> - <con:settings/> - <con:testStep type="httprequest" name="WMTS - GetCapabilities" id="c74ab8d1-1856-4e55-8065-9de0e10bf78f"> + <con:testStep type="httprequest" name="4.0 WFS GetCapabilities 2.0.0" id="d360f682-5c8b-4cb0-9398-6e41aca968dd"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMTS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.0 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/cache/tiles/WMTSCapabilities.xml</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.0</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> - <path>declare namespace wmts='http://www.opengis.net/wmts/1.0'; + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; -exists(/wmts:Capabilities)</path> +exists(/wfs:WFS_Capabilities)</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="668c7f61-c49f-42b3-ad40-874acff84f21" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.0?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2801,27 +3543,3665 @@ exists(/wmts:Capabilities)</path> </con:credentials> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="4.1 WFS GetCapabilities 1.1.0" id="de71f706-d8f2-44a5-81f6-20596f620dcf"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.1 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.1</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="abdcb4da-bdb7-4a06-855a-fd751ecf9601" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.1?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="4.1 WFS GetCapabilities 2.0.0" id="567bfdb5-f45f-4a06-b04a-1ba16ee2d976"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.1 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.1</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="235d917b-3cba-45a0-9df4-d9108226ae4b" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.1?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.0 WFS GetCapabilities 1.1.0" id="7ded1e9a-85d8-470c-8550-66ad418966e7"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.0 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.0</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="005211ee-ad5a-45f1-b19f-8f34c9682111" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.0?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.0 WFS GetCapabilities 2.0.0" id="758df643-33ac-4d9f-baa5-45dec7e59685"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.0 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.0</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="b9bf7ab8-81bb-4d80-84e0-f9bdc00a07f8" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.0?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.1 WFS GetCapabilities 1.1.0" id="75aa9b7a-12af-450f-ba34-865eae21b558"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.1 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.1</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="d1d6de17-e62e-444a-8fd1-324f595b0b0c" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.1?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.1 WFS GetCapabilities 2.0.0" id="2a572b75-0bf6-4cc7-a90c-d0557aa504ac"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.1 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.1</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="beef299d-7014-4233-954c-f489991cf1fc" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.1?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.2 WFS GetCapabilities 1.1.0" id="9ce46bdc-0e62-4471-9c66-e79b89d7dd86"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.2 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.2</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a123fe22-3677-4d48-9093-bcb3845177cb" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.2?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.2 WFS GetCapabilities 2.0.0" id="6ae64b99-d3ed-47b0-a9ec-9f00871db03d"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.2 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.2</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="5b419de6-57b0-4308-ae92-65cd9fa94068" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.2?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.3 WFS GetCapabilities 1.1.0" id="f8bfba8f-1f93-495d-af6d-edf0605e802f"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.3 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.3</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="3a4e0c9d-3f5c-4d1d-b45f-424ec5feeb38" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.3?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.3 WFS GetCapabilities 2.0.0" id="979138a2-fa59-40e6-9669-0da4434c06d4"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.3 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.3</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="50440229-787f-4234-b963-72809188c898" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.3?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.4 WFS GetCapabilities 1.1.0" id="b67dbc10-8ffb-480b-ab49-05a910fe6811"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.4 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.4</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="2fc277f5-eaef-4ea7-a276-9061ab41eb02" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.4?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.4 WFS GetCapabilities 2.0.0" id="73856f3d-44ac-459f-80ee-fdbcf7004927"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.4 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.4</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="ac8a2372-367c-45b9-80d6-9f3b31063695" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.4?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="6.0 WFS GetCapabilities 1.1.0" id="4e684b2e-0ca3-4a06-9573-68e34ed7dffc"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="6.0 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/6.0</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="bfde9f4d-49e5-4dd1-8331-ae24bd18d411" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/6.0?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="6.0 WFS GetCapabilities 2.0.0" id="37bcdc95-4516-42f8-adda-86c730677a43"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="6.0 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/6.0</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="ae7b807e-b103-4ff7-9ab9-399cc6f81dc6" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/6.0?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:properties/> + </con:testCase> + <con:testCase id="9bd75333-34f7-4fba-bc8f-4412bb3824cd" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="4.0-6.0-pre" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="4.0 WFS GetCapabilities 1.1.0" id="34e21483-ab0d-471c-b6d1-cff657ee0920"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.0 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.0-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="3055f782-17ad-43dc-9136-f066b28d2d0d" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.0-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="4.0 WFS GetCapabilities 2.0.0" id="79ea71fa-e01f-4534-92a6-6545c50c052c"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.0 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.0-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="9740f3f7-c8bb-4521-b138-43201d7f41c4" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.0-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="4.1 WFS GetCapabilities 1.1.0" id="d0ca16a5-3a82-4e4f-8ead-318518eb772c"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.1 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.1-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="8958da0c-26a7-4528-9c5f-a3e6de6cb48c" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.1-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="4.1 WFS GetCapabilities 2.0.0" id="53123f1d-6577-45b6-9f05-112ca5d4d7a6"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.1 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.1-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="f341089c-cb5d-4a23-916c-367f12b93b3d" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.1-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.0 WFS GetCapabilities 1.1.0" id="c9471a11-7ff3-4209-a54e-57fdf523bd6c"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.0 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.0-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="2329dc9f-807a-4701-a81c-8c15fb596ba7" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.0-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.0 WFS GetCapabilities 2.0.0" id="27da8159-4a4a-4702-913e-ffc2dea72c6e"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.0 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.0-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="63ed2b34-e6b4-41af-be37-aa3c602d5109" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.0-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.1 WFS GetCapabilities 1.1.0" id="362b198f-3aa3-4aa9-b25b-89f7f16dc8cc"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.1 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.1-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="7f57154b-8b91-4df1-af21-226eb02ba635" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.1-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.1 WFS GetCapabilities 2.0.0" id="5dbb83ac-b29c-4f9d-b60d-d8c1166ba33c"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.1 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.1-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="45148275-2f92-4ce8-af0b-66e6352457d0" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.1-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.2 WFS GetCapabilities 1.1.0" id="ae4a8c5f-9589-4723-bd2c-564d3e5f8b83"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.2 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.2-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="cda0b114-ab16-4660-b151-7dcdcbe24b77" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.2-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.2 WFS GetCapabilities 2.0.0" id="ba29b658-9b45-49b1-b38f-b0308696bb00"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.2 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.2-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="4a53a8c4-d50e-4476-9426-b3d50fc616a5" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.2-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.3 WFS GetCapabilities 1.1.0" id="5617e87f-aeaa-4271-9771-2ce60c9eac7b"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.3 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.3-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="1d6786f6-7c8d-4fc1-8b33-77d661847e34" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.3-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.3 WFS GetCapabilities 2.0.0" id="87329feb-9448-4e47-acbf-1fc8d63c7fde"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.3 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.3-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="bb757060-0e5c-4249-9833-7ca872a98acf" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.3-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.4 WFS GetCapabilities 1.1.0" id="b3346978-28de-4cb8-877b-671d69b61fbf"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.4 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.4-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="e33151cd-1666-4233-9b71-d121af116878" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.4-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.4 WFS GetCapabilities 2.0.0" id="981b9b19-1911-454e-b9a1-036ac660203a"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.4 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.4-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="2d5cfedf-48e4-4f0d-bb84-a918a09845e1" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.4-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="6.0 WFS GetCapabilities 1.1.0" id="91d833bf-5d96-4318-ac02-160a15600ba4"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="6.0 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/6.0-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="6fc2d3db-876f-4aa3-b121-ab9ac8d13e8a" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/6.0-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="6.0 WFS GetCapabilities 2.0.0" id="114b386c-ad69-4433-a95b-0428a84fa24b"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="6.0 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/6.0-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="517d820e-723e-4adf-bb21-b48aa91de184" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/6.0-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:properties/> + </con:testCase> + <con:testCase id="d081d635-f4cc-4b7b-9e29-01bdc1d8f479" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="4.0-6.0-archive" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="4.0 WFS GetCapabilities 1.1.0" id="e59fb8bc-e634-4dae-be00-d52b5bc465d9"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.0 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.0-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="8e80dc7f-c1c5-4052-8ff8-ffd40f04e2cb" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.0-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="4.0 WFS GetCapabilities 2.0.0" id="425bafcc-9874-437b-a6fe-8873bef69815"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.0 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.0-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="6de5cf0f-d5f0-4ac2-bb0f-e96665d4ec59" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.0-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="4.1 WFS GetCapabilities 1.1.0" id="de60a833-d83f-474a-bfb7-56e28a78bff0"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.1 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.1-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="18e122d2-7df5-4f9d-88ea-efac46a2bb46" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.1-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="4.1 WFS GetCapabilities 2.0.0" id="a7a02a01-b324-4c40-9b8f-c4f7b8344de3"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="4.1 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/4.1-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="01a0a777-c73f-41ee-aa62-482814fa512e" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/4.1-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.0 WFS GetCapabilities 1.1.0" id="f25756e1-3178-4918-bb28-1f9396826a36"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.0 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.0-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="bcb6be13-31a1-4fe2-bb32-d6a6c167aed0" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.0-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.0 WFS GetCapabilities 2.0.0" id="ccaea24b-417f-4c7f-83ba-f31ba4bfa09f"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.0 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.0-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="67610f53-7579-45a6-b692-1deedab0dbe3" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.0-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.1 WFS GetCapabilities 1.1.0" id="b156b743-63c1-4e2f-b948-5b22147f7ced"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.1 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.1-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="9a9e3087-a15d-438c-b9c5-ec23d5bf18ef" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.1-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.1 WFS GetCapabilities 2.0.0" id="94e3a4ab-5126-4224-a7ed-10887453e1f3"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.1 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.1-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="0ee0e093-f868-4862-a7cb-f0a7018d35fb" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.1-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.2 WFS GetCapabilities 1.1.0" id="8324520a-ab39-4f08-bad0-4eb7b8627c4a"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.2 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.2-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="65e4868d-77a8-46e8-b257-b8f60dd49169" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.2-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.2 WFS GetCapabilities 2.0.0" id="27984a82-81d7-4a59-b7ee-679303177fed"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.2 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.2-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="35e08353-600c-4a6f-89e4-33f9b6c887cc" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.2-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.3 WFS GetCapabilities 1.1.0" id="d073d137-426e-463e-be68-c10aadaad284"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.3 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.3-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="f6a5a6f5-d21d-4bd5-ad07-965c004d7165" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.3-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.3 WFS GetCapabilities 2.0.0" id="47e06821-ffe2-44e1-b5d6-6e04f1b74f48"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.3 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.3-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="465452ef-6f61-4e54-9f71-4aa560add540" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.3-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.4 WFS GetCapabilities 1.1.0" id="be58ac1a-6f38-48e1-a9e3-236dc3f42ff8"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.4 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.4-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="47ec5a1d-8279-4341-a5d0-9bca148cd3af" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.4-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="5.4 WFS GetCapabilities 2.0.0" id="f5de3e82-f6b4-487e-925b-37fb80c5fde8"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="5.4 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/5.4-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="3792ae07-68ad-45cb-a1da-ce699afd9890" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/5.4-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="6.0 WFS GetCapabilities 1.1.0" id="011da7b0-d6c9-4969-ada2-7d6a07e6e413"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="6.0 WFS GetCapabilities 1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/6.0-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="c7ba6eb0-d146-419d-acad-5fa14f96ea3c" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs'; +declare namespace ows='http://www.opengis.net/ows'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/6.0-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="6.0 WFS GetCapabilities 2.0.0" id="e4273514-d7ce-4e89-ad34-e409ae453815"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="6.0 WFS GetCapabilities 2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/6.0-archive</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +exists(/wfs:WFS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="bd2e069c-5630-4c26-b9a5-cb8c8247de18" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wfs='http://www.opengis.net/wfs/2.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wfs:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/6.0-archive?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WFS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>2.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:properties/> + </con:testCase> + <con:testCase id="0a07c547-3052-4bdc-8356-aa9d442af4c5" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="cache" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="ee112c8e-95c5-4146-b0f5-fedcb77391d7"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/cache</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>exists(/WMT_MS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="aad79751-ce6f-4896-bdf2-07d3e32bc2c7" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/cache?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WMS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="a889fdbc-f586-43ae-9ffe-8e276bf133df"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/cache</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; + +exists(/wms:WMS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="04bea7d6-c097-470a-8ace-06ef4995c7c9" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/cache?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WMS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="WMTS GetCapabilities 1.0.0" id="6146d8f2-7403-48ab-a339-66fe230665c2"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMTS GetCapabilities 1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/cache</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wmts='http://www.opengis.net/wmts/1.0'; + +exists(/wmts:Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="ec93d2be-2fbb-448a-9f5a-6c143ac3a25a" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wmts='http://www.opengis.net/wmts/1.0'; +declare namespace ows='http://www.opengis.net/ows/1.1'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wmts:Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/cache?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WMTS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.0.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:properties/> + </con:testCase> + <con:testCase id="6b69a20b-120f-4879-9474-79ad32150d9d" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="cache/tiles" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> + <con:settings/> + <con:testStep type="httprequest" name="WMTS GetCapabilities 1.0.0" id="c74ab8d1-1856-4e55-8065-9de0e10bf78f"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMTS GetCapabilities 1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/cache/tiles/WMTSCapabilities.xml</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>declare namespace wmts='http://www.opengis.net/wmts/1.0'; + +exists(/wmts:Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="ad0c4f9d-fd3f-4d5b-a7c7-545c494bc44b" name="template"> + <con:configuration> + <path>declare namespace wmts='http://www.opengis.net/wmts/1.0'; + +/wmts:Capabilities/wmts:Contents/wmts:Layer[1]/wmts:ResourceURL/@template</path> + <content>${#Project#baseUrlGateway}/ows/cache/tiles/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="ad0c4f9d-fd3f-4d5b-a7c7-545c494bc44b" name="ServiceMetadataURL"> + <con:configuration> + <path>declare namespace wmts='http://www.opengis.net/wmts/1.0'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wmts:Capabilities/wmts:ServiceMetadataURL/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/cache/tiles/WMTSCapabilities.xml</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters/> </con:config> </con:testStep> <con:properties/> </con:testCase> <con:testCase id="4ded5db4-e7b0-41fe-b74f-5ac65ee39f6d" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="raster" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> <con:settings/> - <con:testStep type="httprequest" name="WMS - GetCapabilities" id="70ee62cb-b966-4751-8900-ee639152ebec"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="70ee62cb-b966-4751-8900-ee639152ebec"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/raster</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>exists(/WMT_MS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="edd54c87-158c-4abe-b81c-bf7d62090d0e" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/raster?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WMS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="142563bb-5c39-48de-9c77-815e0a7b2b97"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/raster</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/raster</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> <path>declare namespace wms='http://www.opengis.net/wms'; @@ -2832,6 +7212,18 @@ exists(/wms:WMS_Capabilities)</path> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="6bacfeb5-5ef9-4bed-8796-2664ea218664" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/raster?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2858,6 +7250,11 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> @@ -2865,20 +7262,87 @@ exists(/wms:WMS_Capabilities)</path> </con:testCase> <con:testCase id="97f43c18-03d4-468d-aea5-c0ca64d4ac9d" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="raster-pre" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> <con:settings/> - <con:testStep type="httprequest" name="WMS - GetCapabilities" id="93645664-fdd0-4cb7-afdc-7a9a47db2f6e"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="93645664-fdd0-4cb7-afdc-7a9a47db2f6e"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/raster-pre</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> + <con:configuration> + <path>exists(/WMT_MS_Capabilities)</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="1313a8d0-b685-4feb-9831-54b7e60d2914" name="HTTP DCP"> + <con:configuration> + <path>declare namespace xlink='http://www.w3.org/1999/xlink'; + +/WMT_MS_Capabilities/Capability/Request/GetCapabilities/DCPType/HTTP/Get/OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/raster-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WMS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="4583de74-2cd4-441f-bd9b-b1b3932adc60"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/raster-pre</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/raster-pre</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> <codes>200</codes> </con:configuration> </con:assertion> - <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="XPath Match"> + <con:assertion type="XPath Match" id="a690f7b6-aa56-450e-93dd-bc93069e852d" name="Capabilities"> <con:configuration> <path>declare namespace wms='http://www.opengis.net/wms'; @@ -2889,6 +7353,18 @@ exists(/wms:WMS_Capabilities)</path> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="9152344e-5f17-4a4e-8a5c-0b17916b8699" name="HTTP DCP"> + <con:configuration> + <path>declare namespace wms='http://www.opengis.net/wms'; +declare namespace xlink='http://www.w3.org/1999/xlink'; + +/wms:WMS_Capabilities/wms:Capability/wms:Request/wms:GetCapabilities/wms:DCPType/wms:HTTP/wms:Get/wms:OnlineResource/@xlink:href</path> + <content>${#Project#baseUrlGateway}/ows/raster-pre?</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -2915,6 +7391,11 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> @@ -2922,13 +7403,60 @@ exists(/wms:WMS_Capabilities)</path> </con:testCase> <con:testCase id="9fe019cc-3c12-404d-8f3a-eb513016c68f" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="raster/planwerk" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> <con:settings/> - <con:testStep type="httprequest" name="WMS - GetCapabilities" id="e55a7de7-4457-470a-9a17-53c712b6bb20"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="e55a7de7-4457-470a-9a17-53c712b6bb20"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/raster/planwerk/unknown</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WMS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="19adba03-de2e-4241-aa4b-9d091fb4d645"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/raster/planwerk/unknown</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/raster/planwerk/unknown</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> @@ -2961,6 +7489,11 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> @@ -2968,13 +7501,60 @@ exists(/wms:WMS_Capabilities)</path> </con:testCase> <con:testCase id="4b934245-82ea-4ccf-b989-385cf1ece70c" failOnError="false" failTestCaseOnErrors="true" keepSession="false" maxResults="0" name="raster/planart" searchProperties="true" timeout="0" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword=""> <con:settings/> - <con:testStep type="httprequest" name="WMS - GetCapabilities" id="f5f1c228-6a9d-49e1-873c-ecbb9acd32dc"> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.1.1" id="f5f1c228-6a9d-49e1-873c-ecbb9acd32dc"> + <con:settings/> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:settings> + <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> + </con:settings> + <con:endpoint>${#Project#baseUrlGateway}/ows/raster/planart/bp</con:endpoint> + <con:request/> + <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> + <con:configuration> + <codes>200</codes> + </con:configuration> + </con:assertion> + <con:credentials> + <con:username>${#Project#username}</con:username> + <con:password>${#Project#password}</con:password> + <con:selectedAuthProfile>Basic</con:selectedAuthProfile> + <con:addedBasicAuthenticationTypes>Basic</con:addedBasicAuthenticationTypes> + <con:authType>Global HTTP Settings</con:authType> + </con:credentials> + <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> + <con:parameters> + <con:parameter> + <con:name>sERVICE</con:name> + <con:value>WMS</con:value> + <con:style>QUERY</con:style> + <con:default>WMS</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>rEQUEST</con:name> + <con:value>GetCapabilities</con:value> + <con:style>QUERY</con:style> + <con:default>GetCapabilities</con:default> + <con:path xsi:nil="true"/> + <con:description xsi:nil="true"/> + </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.1.1</con:value> + <con:style>QUERY</con:style> + </con:parameter> + </con:parameters> + </con:config> + </con:testStep> + <con:testStep type="httprequest" name="WMS GetCapabilities 1.3.0" id="31307390-e05f-4a3f-8019-f1ffc58916f2"> <con:settings/> - <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS - GetCapabilities" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <con:config method="GET" xsi:type="con:HttpRequest" id="c94db636-c152-447a-94e1-768498fbcd21" name="WMS GetCapabilities 1.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <con:settings> <con:setting id="com.eviware.soapui.impl.wsdl.WsdlRequest@request-headers"><xml-fragment/></con:setting> </con:settings> - <con:endpoint>${#Project#baseUrlGateway}/xplan-ows/raster/planart/bp</con:endpoint> + <con:endpoint>${#Project#baseUrlGateway}/ows/raster/planart/bp</con:endpoint> <con:request/> <con:assertion type="Valid HTTP Status Codes" id="2b2dc1c4-d8c4-4308-8c53-f98536940634" name="Valid HTTP Status Codes"> <con:configuration> @@ -3007,6 +7587,11 @@ exists(/wms:WMS_Capabilities)</path> <con:path xsi:nil="true"/> <con:description xsi:nil="true"/> </con:parameter> + <con:parameter> + <con:name>VERSION</con:name> + <con:value>1.3.0</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> diff --git a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api-soapui-project.xml b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api-soapui-project.xml index 48e4188ae..6f7bab51c 100644 --- a/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api-soapui-project.xml +++ b/xplan-tests/xplan-tests-soapui/src/main/resources/xplan-manager-api-soapui-project.xml @@ -553,6 +553,24 @@ Get plan identified by the given plan ID</con:description> <con:params/> <con:element xmlns:plan="http://localhost/xplan-manager-api/xmanager/api/v1/plan/">plan:Fault</con:element> </con:representation> + <con:representation type="FAULT"> + <con:mediaType xsi:nil="true"/> + <con:status>400</con:status> + <con:params/> + <con:element>data</con:element> + </con:representation> + <con:representation type="FAULT"> + <con:mediaType xsi:nil="true"/> + <con:status>400</con:status> + <con:params/> + <con:element>data</con:element> + </con:representation> + <con:representation type="FAULT"> + <con:mediaType xsi:nil="true"/> + <con:status>400</con:status> + <con:params/> + <con:element>data</con:element> + </con:representation> <con:request name="Request 1" id="e6485926-de88-473c-8d2e-7024821be289" mediaType="application/json"> <con:settings/> <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1</con:endpoint> @@ -1893,7 +1911,15 @@ Delete plan identified by the given plan ID</con:description> </con:resource> <con:resource name="/plans" path="/plans" id="d03de7db-250f-4c8f-b29b-4fa9ce2f1fc0"> <con:settings/> - <con:parameters/> + <con:parameters> + <con:parameter> + <con:name>includeGeltungsbereich</con:name> + <con:value/> + <con:style>QUERY</con:style> + <con:default/> + <con:description xsi:nil="true"/> + </con:parameter> + </con:parameters> <con:method name="findByName" id="ff9ed0ac-3441-41a3-aaaf-21dbd87f3a70" method="GET"> <con:description>Returns a list of plans where the plan name contains the query string case insensitve Search for plan by name</con:description> @@ -1904,6 +1930,13 @@ Search for plan by name</con:description> <con:style>QUERY</con:style> <con:description>The name of the plan to search for</con:description> </con:parameter> + <con:parameter> + <con:name>includeGeltungsbereich</con:name> + <con:value/> + <con:style>QUERY</con:style> + <con:default/> + <con:description xsi:nil="true"/> + </con:parameter> </con:parameters> <con:representation type="RESPONSE"> <con:mediaType>application/json</con:mediaType> @@ -1918,11 +1951,14 @@ Search for plan by name</con:description> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> <con:domain xsi:nil="true"/> + <con:authType>No Authorization</con:authType> </con:credentials> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> + <con:jmsPropertyConfig/> <con:parameters/> <con:parameterOrder> <con:entry>planName</con:entry> + <con:entry>includeGeltungsbereich</con:entry> </con:parameterOrder> </con:request> </con:method> @@ -1977,6 +2013,7 @@ Search for plan by name</con:description> <con:parameters/> <con:parameterOrder> <con:entry>planId</con:entry> + <con:entry>includeGeltungsbereich</con:entry> </con:parameterOrder> </con:request> </con:method> @@ -2011,6 +2048,18 @@ Search for plan by name</con:description> <con:params/> <con:element>html</con:element> </con:representation> + <con:representation type="FAULT"> + <con:mediaType xsi:nil="true"/> + <con:status>400</con:status> + <con:params/> + <con:element>data</con:element> + </con:representation> + <con:representation type="FAULT"> + <con:mediaType xsi:nil="true"/> + <con:status>400</con:status> + <con:params/> + <con:element>data</con:element> + </con:representation> <con:request name="Request 1" id="ba7c71b2-c264-4a61-b0b0-1146f2594e7e" mediaType="application/json"> <con:settings/> <con:endpoint>${#Project#baseUrlManagerApi}/xplan-manager-api/xmanager/api/v1</con:endpoint> @@ -2023,10 +2072,13 @@ Search for plan by name</con:description> </con:credentials> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> - <con:parameters/> + <con:parameters> + <entry key="includeGeltungsbereich" value="" xmlns="http://eviware.com/soapui/config"/> + </con:parameters> <con:parameterOrder> <con:entry>planId</con:entry> <con:entry>planName</con:entry> + <con:entry>includeGeltungsbereich</con:entry> </con:parameterOrder> </con:request> </con:method> @@ -2546,7 +2598,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn-pre/planwerk/.*$</regEx> + <regEx>^.*/ows/syn-pre/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -2776,7 +2828,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -2948,7 +3000,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -3177,7 +3229,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn-pre/planwerk/.*$</regEx> + <regEx>^.*/ows/syn-pre/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -3390,7 +3442,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -3666,7 +3718,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -3829,7 +3881,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn-pre/planwerk/.*$</regEx> + <regEx>^.*/ows/syn-pre/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -4061,7 +4113,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -4446,7 +4498,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -4614,7 +4666,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn-archive/planwerk/.*$</regEx> + <regEx>^.*/ows/syn-archive/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -4832,7 +4884,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn-archive/planwerk/.*$</regEx> + <regEx>^.*/ows/syn-archive/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -5000,7 +5052,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -5177,7 +5229,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -5340,7 +5392,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -5510,7 +5562,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn-archive/planwerk/.*$</regEx> + <regEx>^.*/ows/syn-archive/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -5678,7 +5730,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -5846,7 +5898,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -6014,7 +6066,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -6173,7 +6225,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -6545,7 +6597,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -6708,7 +6760,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn-pre/planwerk/.*$</regEx> + <regEx>^.*/ows/syn-pre/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -6868,7 +6920,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn-pre/planwerk/.*$</regEx> + <regEx>^.*/ows/syn-pre/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -7039,7 +7091,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -7218,7 +7270,7 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn-pre/planwerk/.*$</regEx> + <regEx>^.*/ows/syn-pre/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -7788,7 +7840,25 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="02bd0057-e923-408c-8517-cce5eb1cf726" name="geltungsbereichWGS84.type"> + <con:configuration> + <path>$[0].geltungsbereichWGS84.type</path> + <content>Polygon</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="02bd0057-e923-408c-8517-cce5eb1cf726" name="geltungsbereichWGS84.coordinates firstEntry"> + <con:configuration> + <path>$[0].geltungsbereichWGS84.coordinates[0][0]</path> + <content>[9.900300025874447,53.592766903640204]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -8001,7 +8071,25 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="a8f53ac5-7712-4f1c-b664-70c999036e55" name="geltungsbereichWGS84.type"> + <con:configuration> + <path>$[0].geltungsbereichWGS84.type</path> + <content>Polygon</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c712a578-91e1-4538-8175-800294445d67" name="geltungsbereichWGS84.coordinates firstEntry"> + <con:configuration> + <path>$[0].geltungsbereichWGS84.coordinates[0][0]</path> + <content>[9.900300025874447,53.592766903640204]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -8013,10 +8101,12 @@ assert actualHeader != null</scriptText> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters> - <entry key="planName" value="Eidelstedt4_SoapUI-XPlanManagerAPI" xmlns="http://eviware.com/soapui/config"/> + <con:entry key="includeGeltungsbereich" value="true"/> + <con:entry key="planName" value="Eidelstedt4_SoapUI-XPlanManagerAPI"/> </con:parameters> <con:parameterOrder> <con:entry>planName</con:entry> + <con:entry>includeGeltungsbereich</con:entry> </con:parameterOrder> </con:restRequest> </con:config> @@ -8145,7 +8235,16 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="dea58ff9-b22e-4fe3-a8e7-fb575af9d2a3" name="geltungsbereichWGS84"> + <con:configuration> + <path>exists(//*:geltungsbereichWGS84)</path> + <content>false</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -8157,10 +8256,12 @@ assert actualHeader != null</scriptText> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters> - <entry key="planName" value="eidelstedt4_soapui-xplanmanagerapi" xmlns="http://eviware.com/soapui/config"/> + <con:entry key="includeGeltungsbereich" value="false"/> + <con:entry key="planName" value="eidelstedt4_soapui-xplanmanagerapi"/> </con:parameters> <con:parameterOrder> <con:entry>planName</con:entry> + <con:entry>includeGeltungsbereich</con:entry> </con:parameterOrder> </con:restRequest> </con:config> @@ -8280,7 +8381,16 @@ assert actualHeader != null</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="36031c31-b840-43bf-8348-02e7232d0859" name="geltungsbereichWGS84"> + <con:configuration> + <path>exists(//*:geltungsbereichWGS84)</path> + <content>false</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -8292,10 +8402,12 @@ assert actualHeader != null</scriptText> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters> - <entry key="planId" value="${#TestSuite#currentPlanIdMultiplePlansHafenCity14}" xmlns="http://eviware.com/soapui/config"/> + <con:entry key="includeGeltungsbereich" value=""/> + <con:entry key="planId" value="${#TestSuite#currentPlanIdMultiplePlansHafenCity14}"/> </con:parameters> <con:parameterOrder> <con:entry>planId</con:entry> + <con:entry>includeGeltungsbereich</con:entry> </con:parameterOrder> </con:restRequest> </con:config> @@ -8324,12 +8436,14 @@ assert actualHeader != null</scriptText> <con:jmsConfig JMSDeliveryMode="PERSISTENT"/> <con:jmsPropertyConfig/> <con:parameters> + <con:entry key="includeGeltungsbereich" value=""/> <con:entry key="planName" value="XPlanManagerAPI-Test"/> <con:entry key="planId" value="${#TestSuite#currentPlanIdMultiplePlansHafenCity14}"/> </con:parameters> <con:parameterOrder> <con:entry>planId</con:entry> <con:entry>planName</con:entry> + <con:entry>includeGeltungsbereich</con:entry> </con:parameterOrder> </con:restRequest> </con:config> @@ -19472,7 +19586,25 @@ if (documentUrl != "null"){ <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c6ecb3c8-0e0c-4e11-a362-4493db595a6b" name="geltungsbereichWGS84.type"> + <con:configuration> + <path>$.geltungsbereichWGS84.type</path> + <content>Polygon</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="35436fe2-77ff-4c3d-9de8-f0de7a8cdac7" name="geltungsbereichWGS84.coordinates firstEntry"> + <con:configuration> + <path>$.geltungsbereichWGS84.coordinates[0][0]</path> + <content>[9.900300025874447,53.592766903640204]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -19607,13 +19739,31 @@ if (documentUrl != "null"){ </con:assertion> <con:assertion type="XPath Match" id="319a5f6f-d339-465f-9f40-a0a0ec856134" name="link planwerkwms"> <con:configuration> - <path>contains(/planInfo/links[rel='PLANWERKWMS']/href, '/xplan-ows/syn/planwerk/')</path> + <path>contains(/planInfo/links[rel='PLANWERKWMS']/href, '/ows/syn/planwerk/')</path> <content>true</content> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> + <con:assertion type="XPath Match" id="903ef086-5605-423a-9003-a16d49a5a487" name="geltungsbereichWGS84/type"> + <con:configuration> + <path>/planInfo/geltungsbereichWGS84/type</path> + <content>POLYGON</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="903ef086-5605-423a-9003-a16d49a5a487" name="geltungsbereichWGS84/coordinates"> + <con:configuration> + <path>exists(/planInfo/geltungsbereichWGS84/coordinates)</path> + <content>false</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> <con:credentials> <con:username>${#Project#username}</con:username> <con:password>${#Project#password}</con:password> @@ -19833,7 +19983,7 @@ assert expectedHeader == actualHeader</scriptText> <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn-pre/planwerk/.*$</regEx> + <regEx>^.*/ows/syn-pre/planwerk/.*$</regEx> </con:configuration> </con:assertion> <con:credentials> @@ -24277,7 +24427,25 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="57fc059a-8898-4adf-9161-588cdaa49fbf" name="geltungsbereichWGS84.type"> + <con:configuration> + <path>$[0].geltungsbereichWGS84.type</path> + <content>Polygon</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Existence Match" id="4e500b26-89ef-4749-b0fd-707dc9ec031a" name="geltungsbereichWGS84.coordinates exists"> + <con:configuration> + <path>$[0].geltungsbereichWGS84.coordinates</path> + <content>true</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -24296,6 +24464,11 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <con:value>BPlan_SO-Objekte-Test_6-0-2_SoapUI-XPlanManagerAPI</con:value> <con:style>QUERY</con:style> </con:parameter> + <con:parameter> + <con:name>includeGeltungsbereich</con:name> + <con:value>true</con:value> + <con:style>QUERY</con:style> + </con:parameter> </con:parameters> </con:config> </con:testStep> @@ -24383,7 +24556,16 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="XPath Match" id="c49ca5e9-39d5-475d-b721-c32dc9fe86e5" name="geltungsbereichWGS84"> + <con:configuration> + <path>exists(//*:geltungsbereichWGS84)</path> + <content>false</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> @@ -28140,7 +28322,25 @@ if( ++context.loopIndex < 40 && json.status != "VALIDATION_FAILED" ){ <allowWildcards>false</allowWildcards> <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> <ignoreComments>false</ignoreComments> - <regEx>^.*/xplan-ows/syn/planwerk/.*$</regEx> + <regEx>^.*/ows/syn/planwerk/.*$</regEx> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="c6426ec1-7f70-4f7d-a0bf-1891f0f56f6f" name="geltungsbereichWGS84.type"> + <con:configuration> + <path>$.geltungsbereichWGS84.type</path> + <content>Polygon</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> + </con:configuration> + </con:assertion> + <con:assertion type="JsonPath Match" id="7b5fcbfd-f410-4ec0-9a1d-60d62e1c9b19" name="geltungsbereichWGS84.coordinates firstEntry"> + <con:configuration> + <path>$.geltungsbereichWGS84.coordinates[0][0]</path> + <content>[9.86228294160898,53.57602035371566]</content> + <allowWildcards>false</allowWildcards> + <ignoreNamspaceDifferences>false</ignoreNamspaceDifferences> + <ignoreComments>false</ignoreComments> </con:configuration> </con:assertion> <con:credentials> diff --git a/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandler.java b/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandler.java index 011703142..6fb54d561 100644 --- a/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandler.java +++ b/xplan-validator/xplan-validator-executor/src/main/java/de/latlon/xplanbox/validator/executor/handler/ValidationHandler.java @@ -163,7 +163,7 @@ public class ValidationHandler { private static List<String> createPathSegments(URIBuilder uriBuilder) { List<String> pathSegments = new ArrayList<>(uriBuilder.getPathSegments()); - pathSegments.add("xplan-ows"); + pathSegments.add("ows"); pathSegments.add("validator"); pathSegments.remove(""); return pathSegments; diff --git a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report1.expected.json b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report1.expected.json index 45abdacec..5ab380ba6 100644 --- a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report1.expected.json +++ b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report1.expected.json @@ -15,8 +15,8 @@ "semantisch": { "valid": true, "rulesMetadata": { - "source": "https:\/\/gitlab.opencode.de\/xleitstelle\/xplanung\/validierungsregeln\/standard\/-\/tree\/v1.1.10-SNAPSHOT", - "version": "1.1.10-SNAPSHOT" + "source": "https:\/\/gitlab.opencode.de\/xleitstelle\/xplanung\/validierungsregeln\/standard\/-\/tree\/v1.1.10", + "version": "1.1.10" }, "rules": [ { diff --git a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report2.expected.json b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report2.expected.json index 24e174e25..05e34874a 100644 --- a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report2.expected.json +++ b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report2.expected.json @@ -31,8 +31,8 @@ "semantisch": { "valid": true, "rulesMetadata": { - "source": "https:\/\/gitlab.opencode.de\/xleitstelle\/xplanung\/validierungsregeln\/standard\/-\/tree\/v1.1.10-SNAPSHOT", - "version": "1.1.10-SNAPSHOT" + "source": "https:\/\/gitlab.opencode.de\/xleitstelle\/xplanung\/validierungsregeln\/standard\/-\/tree\/v1.1.10", + "version": "1.1.10" }, "rules": [ { diff --git a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report3.expected.json b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report3.expected.json index 9cf18394f..5ffc7d93f 100644 --- a/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report3.expected.json +++ b/xplan-validator/xplan-validator-executor/src/test/resources/de/latlon/xplanbox/validator/executor/report3.expected.json @@ -45,8 +45,8 @@ "semantisch": { "valid": true, "rulesMetadata": { - "source": "https:\/\/gitlab.opencode.de\/xleitstelle\/xplanung\/validierungsregeln\/standard\/-\/tree\/v1.1.10-SNAPSHOT", - "version": "1.1.10-SNAPSHOT" + "source": "https:\/\/gitlab.opencode.de\/xleitstelle\/xplanung\/validierungsregeln\/standard\/-\/tree\/v1.1.10", + "version": "1.1.10" }, "rules": [ { diff --git a/xplan-webservices/xplan-webservices-inspireplu/src/test/resources/de/latlon/xplan/services/inspireplu/libs.expected.txt b/xplan-webservices/xplan-webservices-inspireplu/src/test/resources/de/latlon/xplan/services/inspireplu/libs.expected.txt index e4c9bb7d3..93929f4ba 100644 --- a/xplan-webservices/xplan-webservices-inspireplu/src/test/resources/de/latlon/xplan/services/inspireplu/libs.expected.txt +++ b/xplan-webservices/xplan-webservices-inspireplu/src/test/resources/de/latlon/xplan/services/inspireplu/libs.expected.txt @@ -40,69 +40,69 @@ commons-lang-2.6.jar commons-math-2.2.jar commons-pool2-2.12.0.jar com.sun.xml.bind-jaxb-core-4.0.5.jar -deegree-connectionprovider-datasource-3.6.0-SNAPSHOT.jar -deegree-core-annotations-3.6.0-SNAPSHOT.jar -deegree-core-base-3.6.0-SNAPSHOT.jar -deegree-core-commons-3.6.0-SNAPSHOT.jar -deegree-core-coverage-3.6.0-SNAPSHOT.jar -deegree-core-cs-3.6.0-SNAPSHOT.jar -deegree-core-db-3.6.0-SNAPSHOT.jar -deegree-core-featureinfo-3.6.0-SNAPSHOT.jar -deegree-core-filterfunctions-3.6.0-SNAPSHOT.jar -deegree-core-gdal-3.6.0-SNAPSHOT.jar -deegree-core-geometry-3.6.0-SNAPSHOT.jar -deegree-core-layer-3.6.0-SNAPSHOT.jar -deegree-core-metadata-3.6.0-SNAPSHOT.jar -deegree-core-moduleinfo-3.6.0-SNAPSHOT.jar -deegree-core-rendering-2d-3.6.0-SNAPSHOT.jar -deegree-core-style-3.6.0-SNAPSHOT.jar -deegree-core-theme-3.6.0-SNAPSHOT.jar -deegree-core-tile-3.6.0-SNAPSHOT.jar -deegree-core-workspace-3.6.0-SNAPSHOT.jar -deegree-featurestore-commons-3.6.0-SNAPSHOT.jar -deegree-featurestore-memory-3.6.0-SNAPSHOT.jar -deegree-featurestore-shape-3.6.0-SNAPSHOT.jar -deegree-featurestore-simplesql-3.6.0-SNAPSHOT.jar -deegree-featurestore-sql-3.6.0-SNAPSHOT.jar -deegree-jsf-core-3.6.0-SNAPSHOT.jar -deegree-layers-coverage-3.6.0-SNAPSHOT.jar -deegree-layers-feature-3.6.0-SNAPSHOT.jar -deegree-layers-gdal-3.6.0-SNAPSHOT.jar -deegree-layers-remotewms-3.6.0-SNAPSHOT.jar -deegree-layers-tile-3.6.0-SNAPSHOT.jar -deegree-mdstore-commons-3.6.0-SNAPSHOT.jar -deegree-mdstore-iso-3.6.0-SNAPSHOT.jar -deegree-mdstore-iso-memory-3.6.0-SNAPSHOT.jar +deegree-connectionprovider-datasource-3.6.0-pre3.1.jar +deegree-core-annotations-3.6.0-pre3.1.jar +deegree-core-base-3.6.0-pre3.1.jar +deegree-core-commons-3.6.0-pre3.1.jar +deegree-core-coverage-3.6.0-pre3.1.jar +deegree-core-cs-3.6.0-pre3.1.jar +deegree-core-db-3.6.0-pre3.1.jar +deegree-core-featureinfo-3.6.0-pre3.1.jar +deegree-core-filterfunctions-3.6.0-pre3.1.jar +deegree-core-gdal-3.6.0-pre3.1.jar +deegree-core-geometry-3.6.0-pre3.1.jar +deegree-core-layer-3.6.0-pre3.1.jar +deegree-core-metadata-3.6.0-pre3.1.jar +deegree-core-moduleinfo-3.6.0-pre3.1.jar +deegree-core-rendering-2d-3.6.0-pre3.1.jar +deegree-core-style-3.6.0-pre3.1.jar +deegree-core-theme-3.6.0-pre3.1.jar +deegree-core-tile-3.6.0-pre3.1.jar +deegree-core-workspace-3.6.0-pre3.1.jar +deegree-featurestore-commons-3.6.0-pre3.1.jar +deegree-featurestore-memory-3.6.0-pre3.1.jar +deegree-featurestore-shape-3.6.0-pre3.1.jar +deegree-featurestore-simplesql-3.6.0-pre3.1.jar +deegree-featurestore-sql-3.6.0-pre3.1.jar +deegree-jsf-core-3.6.0-pre3.1.jar +deegree-layers-coverage-3.6.0-pre3.1.jar +deegree-layers-feature-3.6.0-pre3.1.jar +deegree-layers-gdal-3.6.0-pre3.1.jar +deegree-layers-remotewms-3.6.0-pre3.1.jar +deegree-layers-tile-3.6.0-pre3.1.jar +deegree-mdstore-commons-3.6.0-pre3.1.jar +deegree-mdstore-iso-3.6.0-pre3.1.jar +deegree-mdstore-iso-memory-3.6.0-pre3.1.jar deegree-ogcschemas-20230513.jar -deegree-processprovider-fme-3.6.0-SNAPSHOT.jar -deegree-protocol-commons-3.6.0-SNAPSHOT.jar -deegree-protocol-wfs-3.6.0-SNAPSHOT.jar -deegree-protocol-wms-3.6.0-SNAPSHOT.jar -deegree-protocol-wmts-3.6.0-SNAPSHOT.jar -deegree-remoteows-commons-3.6.0-SNAPSHOT.jar -deegree-remoteows-wms-3.6.0-SNAPSHOT.jar -deegree-remoteows-wmts-3.6.0-SNAPSHOT.jar -deegree-services-commons-3.6.0-SNAPSHOT.jar -deegree-services-config-3.6.0-SNAPSHOT.jar -deegree-services-csw-3.6.0-SNAPSHOT.jar -deegree-services-wfs-3.6.0-SNAPSHOT.jar -deegree-services-wms-3.6.0-SNAPSHOT.jar -deegree-services-wmts-3.6.0-SNAPSHOT.jar -deegree-services-wps-3.6.0-SNAPSHOT.jar -deegree-sqldialect-commons-3.6.0-SNAPSHOT.jar -deegree-sqldialect-mssql-3.6.0-SNAPSHOT.jar -deegree-sqldialect-oracle-3.6.0-SNAPSHOT.jar -deegree-sqldialect-postgis-3.6.0-SNAPSHOT.jar -deegree-themes-remotewms-3.6.0-SNAPSHOT.jar -deegree-tilestore-cache-3.6.0-SNAPSHOT.jar -deegree-tilestore-commons-3.6.0-SNAPSHOT.jar -deegree-tilestore-filesystem-3.6.0-SNAPSHOT.jar -deegree-tilestore-gdal-3.6.0-SNAPSHOT.jar -deegree-tilestore-geotiff-3.6.0-SNAPSHOT.jar -deegree-tilestore-merge-3.6.0-SNAPSHOT.jar -deegree-tilestore-remotewms-3.6.0-SNAPSHOT.jar -deegree-tilestore-remotewmts-3.6.0-SNAPSHOT.jar -deegree-webservices-3.6.0-SNAPSHOT.jar +deegree-processprovider-fme-3.6.0-pre3.1.jar +deegree-protocol-commons-3.6.0-pre3.1.jar +deegree-protocol-wfs-3.6.0-pre3.1.jar +deegree-protocol-wms-3.6.0-pre3.1.jar +deegree-protocol-wmts-3.6.0-pre3.1.jar +deegree-remoteows-commons-3.6.0-pre3.1.jar +deegree-remoteows-wms-3.6.0-pre3.1.jar +deegree-remoteows-wmts-3.6.0-pre3.1.jar +deegree-services-commons-3.6.0-pre3.1.jar +deegree-services-config-3.6.0-pre3.1.jar +deegree-services-csw-3.6.0-pre3.1.jar +deegree-services-wfs-3.6.0-pre3.1.jar +deegree-services-wms-3.6.0-pre3.1.jar +deegree-services-wmts-3.6.0-pre3.1.jar +deegree-services-wps-3.6.0-pre3.1.jar +deegree-sqldialect-commons-3.6.0-pre3.1.jar +deegree-sqldialect-mssql-3.6.0-pre3.1.jar +deegree-sqldialect-oracle-3.6.0-pre3.1.jar +deegree-sqldialect-postgis-3.6.0-pre3.1.jar +deegree-themes-remotewms-3.6.0-pre3.1.jar +deegree-tilestore-cache-3.6.0-pre3.1.jar +deegree-tilestore-commons-3.6.0-pre3.1.jar +deegree-tilestore-filesystem-3.6.0-pre3.1.jar +deegree-tilestore-gdal-3.6.0-pre3.1.jar +deegree-tilestore-geotiff-3.6.0-pre3.1.jar +deegree-tilestore-merge-3.6.0-pre3.1.jar +deegree-tilestore-remotewms-3.6.0-pre3.1.jar +deegree-tilestore-remotewmts-3.6.0-pre3.1.jar +deegree-webservices-3.6.0-pre3.1.jar ehcache-3.10.8-jakarta.jar error_prone_annotations-2.27.0.jar FastInfoset-1.2.18.jar diff --git a/xplan-webservices/xplan-webservices-services/xplan-services-wfs-syn/src/test/resources/de/latlon/xplan/services/synwfs/libs.expected.txt b/xplan-webservices/xplan-webservices-services/xplan-services-wfs-syn/src/test/resources/de/latlon/xplan/services/synwfs/libs.expected.txt index e4c9bb7d3..93929f4ba 100644 --- a/xplan-webservices/xplan-webservices-services/xplan-services-wfs-syn/src/test/resources/de/latlon/xplan/services/synwfs/libs.expected.txt +++ b/xplan-webservices/xplan-webservices-services/xplan-services-wfs-syn/src/test/resources/de/latlon/xplan/services/synwfs/libs.expected.txt @@ -40,69 +40,69 @@ commons-lang-2.6.jar commons-math-2.2.jar commons-pool2-2.12.0.jar com.sun.xml.bind-jaxb-core-4.0.5.jar -deegree-connectionprovider-datasource-3.6.0-SNAPSHOT.jar -deegree-core-annotations-3.6.0-SNAPSHOT.jar -deegree-core-base-3.6.0-SNAPSHOT.jar -deegree-core-commons-3.6.0-SNAPSHOT.jar -deegree-core-coverage-3.6.0-SNAPSHOT.jar -deegree-core-cs-3.6.0-SNAPSHOT.jar -deegree-core-db-3.6.0-SNAPSHOT.jar -deegree-core-featureinfo-3.6.0-SNAPSHOT.jar -deegree-core-filterfunctions-3.6.0-SNAPSHOT.jar -deegree-core-gdal-3.6.0-SNAPSHOT.jar -deegree-core-geometry-3.6.0-SNAPSHOT.jar -deegree-core-layer-3.6.0-SNAPSHOT.jar -deegree-core-metadata-3.6.0-SNAPSHOT.jar -deegree-core-moduleinfo-3.6.0-SNAPSHOT.jar -deegree-core-rendering-2d-3.6.0-SNAPSHOT.jar -deegree-core-style-3.6.0-SNAPSHOT.jar -deegree-core-theme-3.6.0-SNAPSHOT.jar -deegree-core-tile-3.6.0-SNAPSHOT.jar -deegree-core-workspace-3.6.0-SNAPSHOT.jar -deegree-featurestore-commons-3.6.0-SNAPSHOT.jar -deegree-featurestore-memory-3.6.0-SNAPSHOT.jar -deegree-featurestore-shape-3.6.0-SNAPSHOT.jar -deegree-featurestore-simplesql-3.6.0-SNAPSHOT.jar -deegree-featurestore-sql-3.6.0-SNAPSHOT.jar -deegree-jsf-core-3.6.0-SNAPSHOT.jar -deegree-layers-coverage-3.6.0-SNAPSHOT.jar -deegree-layers-feature-3.6.0-SNAPSHOT.jar -deegree-layers-gdal-3.6.0-SNAPSHOT.jar -deegree-layers-remotewms-3.6.0-SNAPSHOT.jar -deegree-layers-tile-3.6.0-SNAPSHOT.jar -deegree-mdstore-commons-3.6.0-SNAPSHOT.jar -deegree-mdstore-iso-3.6.0-SNAPSHOT.jar -deegree-mdstore-iso-memory-3.6.0-SNAPSHOT.jar +deegree-connectionprovider-datasource-3.6.0-pre3.1.jar +deegree-core-annotations-3.6.0-pre3.1.jar +deegree-core-base-3.6.0-pre3.1.jar +deegree-core-commons-3.6.0-pre3.1.jar +deegree-core-coverage-3.6.0-pre3.1.jar +deegree-core-cs-3.6.0-pre3.1.jar +deegree-core-db-3.6.0-pre3.1.jar +deegree-core-featureinfo-3.6.0-pre3.1.jar +deegree-core-filterfunctions-3.6.0-pre3.1.jar +deegree-core-gdal-3.6.0-pre3.1.jar +deegree-core-geometry-3.6.0-pre3.1.jar +deegree-core-layer-3.6.0-pre3.1.jar +deegree-core-metadata-3.6.0-pre3.1.jar +deegree-core-moduleinfo-3.6.0-pre3.1.jar +deegree-core-rendering-2d-3.6.0-pre3.1.jar +deegree-core-style-3.6.0-pre3.1.jar +deegree-core-theme-3.6.0-pre3.1.jar +deegree-core-tile-3.6.0-pre3.1.jar +deegree-core-workspace-3.6.0-pre3.1.jar +deegree-featurestore-commons-3.6.0-pre3.1.jar +deegree-featurestore-memory-3.6.0-pre3.1.jar +deegree-featurestore-shape-3.6.0-pre3.1.jar +deegree-featurestore-simplesql-3.6.0-pre3.1.jar +deegree-featurestore-sql-3.6.0-pre3.1.jar +deegree-jsf-core-3.6.0-pre3.1.jar +deegree-layers-coverage-3.6.0-pre3.1.jar +deegree-layers-feature-3.6.0-pre3.1.jar +deegree-layers-gdal-3.6.0-pre3.1.jar +deegree-layers-remotewms-3.6.0-pre3.1.jar +deegree-layers-tile-3.6.0-pre3.1.jar +deegree-mdstore-commons-3.6.0-pre3.1.jar +deegree-mdstore-iso-3.6.0-pre3.1.jar +deegree-mdstore-iso-memory-3.6.0-pre3.1.jar deegree-ogcschemas-20230513.jar -deegree-processprovider-fme-3.6.0-SNAPSHOT.jar -deegree-protocol-commons-3.6.0-SNAPSHOT.jar -deegree-protocol-wfs-3.6.0-SNAPSHOT.jar -deegree-protocol-wms-3.6.0-SNAPSHOT.jar -deegree-protocol-wmts-3.6.0-SNAPSHOT.jar -deegree-remoteows-commons-3.6.0-SNAPSHOT.jar -deegree-remoteows-wms-3.6.0-SNAPSHOT.jar -deegree-remoteows-wmts-3.6.0-SNAPSHOT.jar -deegree-services-commons-3.6.0-SNAPSHOT.jar -deegree-services-config-3.6.0-SNAPSHOT.jar -deegree-services-csw-3.6.0-SNAPSHOT.jar -deegree-services-wfs-3.6.0-SNAPSHOT.jar -deegree-services-wms-3.6.0-SNAPSHOT.jar -deegree-services-wmts-3.6.0-SNAPSHOT.jar -deegree-services-wps-3.6.0-SNAPSHOT.jar -deegree-sqldialect-commons-3.6.0-SNAPSHOT.jar -deegree-sqldialect-mssql-3.6.0-SNAPSHOT.jar -deegree-sqldialect-oracle-3.6.0-SNAPSHOT.jar -deegree-sqldialect-postgis-3.6.0-SNAPSHOT.jar -deegree-themes-remotewms-3.6.0-SNAPSHOT.jar -deegree-tilestore-cache-3.6.0-SNAPSHOT.jar -deegree-tilestore-commons-3.6.0-SNAPSHOT.jar -deegree-tilestore-filesystem-3.6.0-SNAPSHOT.jar -deegree-tilestore-gdal-3.6.0-SNAPSHOT.jar -deegree-tilestore-geotiff-3.6.0-SNAPSHOT.jar -deegree-tilestore-merge-3.6.0-SNAPSHOT.jar -deegree-tilestore-remotewms-3.6.0-SNAPSHOT.jar -deegree-tilestore-remotewmts-3.6.0-SNAPSHOT.jar -deegree-webservices-3.6.0-SNAPSHOT.jar +deegree-processprovider-fme-3.6.0-pre3.1.jar +deegree-protocol-commons-3.6.0-pre3.1.jar +deegree-protocol-wfs-3.6.0-pre3.1.jar +deegree-protocol-wms-3.6.0-pre3.1.jar +deegree-protocol-wmts-3.6.0-pre3.1.jar +deegree-remoteows-commons-3.6.0-pre3.1.jar +deegree-remoteows-wms-3.6.0-pre3.1.jar +deegree-remoteows-wmts-3.6.0-pre3.1.jar +deegree-services-commons-3.6.0-pre3.1.jar +deegree-services-config-3.6.0-pre3.1.jar +deegree-services-csw-3.6.0-pre3.1.jar +deegree-services-wfs-3.6.0-pre3.1.jar +deegree-services-wms-3.6.0-pre3.1.jar +deegree-services-wmts-3.6.0-pre3.1.jar +deegree-services-wps-3.6.0-pre3.1.jar +deegree-sqldialect-commons-3.6.0-pre3.1.jar +deegree-sqldialect-mssql-3.6.0-pre3.1.jar +deegree-sqldialect-oracle-3.6.0-pre3.1.jar +deegree-sqldialect-postgis-3.6.0-pre3.1.jar +deegree-themes-remotewms-3.6.0-pre3.1.jar +deegree-tilestore-cache-3.6.0-pre3.1.jar +deegree-tilestore-commons-3.6.0-pre3.1.jar +deegree-tilestore-filesystem-3.6.0-pre3.1.jar +deegree-tilestore-gdal-3.6.0-pre3.1.jar +deegree-tilestore-geotiff-3.6.0-pre3.1.jar +deegree-tilestore-merge-3.6.0-pre3.1.jar +deegree-tilestore-remotewms-3.6.0-pre3.1.jar +deegree-tilestore-remotewmts-3.6.0-pre3.1.jar +deegree-webservices-3.6.0-pre3.1.jar ehcache-3.10.8-jakarta.jar error_prone_annotations-2.27.0.jar FastInfoset-1.2.18.jar diff --git a/xplan-webservices/xplan-webservices-services/xplan-services-wfs/src/test/resources/de/latlon/xplanbox/services/wfs/libs.expected.txt b/xplan-webservices/xplan-webservices-services/xplan-services-wfs/src/test/resources/de/latlon/xplanbox/services/wfs/libs.expected.txt index e4c9bb7d3..93929f4ba 100644 --- a/xplan-webservices/xplan-webservices-services/xplan-services-wfs/src/test/resources/de/latlon/xplanbox/services/wfs/libs.expected.txt +++ b/xplan-webservices/xplan-webservices-services/xplan-services-wfs/src/test/resources/de/latlon/xplanbox/services/wfs/libs.expected.txt @@ -40,69 +40,69 @@ commons-lang-2.6.jar commons-math-2.2.jar commons-pool2-2.12.0.jar com.sun.xml.bind-jaxb-core-4.0.5.jar -deegree-connectionprovider-datasource-3.6.0-SNAPSHOT.jar -deegree-core-annotations-3.6.0-SNAPSHOT.jar -deegree-core-base-3.6.0-SNAPSHOT.jar -deegree-core-commons-3.6.0-SNAPSHOT.jar -deegree-core-coverage-3.6.0-SNAPSHOT.jar -deegree-core-cs-3.6.0-SNAPSHOT.jar -deegree-core-db-3.6.0-SNAPSHOT.jar -deegree-core-featureinfo-3.6.0-SNAPSHOT.jar -deegree-core-filterfunctions-3.6.0-SNAPSHOT.jar -deegree-core-gdal-3.6.0-SNAPSHOT.jar -deegree-core-geometry-3.6.0-SNAPSHOT.jar -deegree-core-layer-3.6.0-SNAPSHOT.jar -deegree-core-metadata-3.6.0-SNAPSHOT.jar -deegree-core-moduleinfo-3.6.0-SNAPSHOT.jar -deegree-core-rendering-2d-3.6.0-SNAPSHOT.jar -deegree-core-style-3.6.0-SNAPSHOT.jar -deegree-core-theme-3.6.0-SNAPSHOT.jar -deegree-core-tile-3.6.0-SNAPSHOT.jar -deegree-core-workspace-3.6.0-SNAPSHOT.jar -deegree-featurestore-commons-3.6.0-SNAPSHOT.jar -deegree-featurestore-memory-3.6.0-SNAPSHOT.jar -deegree-featurestore-shape-3.6.0-SNAPSHOT.jar -deegree-featurestore-simplesql-3.6.0-SNAPSHOT.jar -deegree-featurestore-sql-3.6.0-SNAPSHOT.jar -deegree-jsf-core-3.6.0-SNAPSHOT.jar -deegree-layers-coverage-3.6.0-SNAPSHOT.jar -deegree-layers-feature-3.6.0-SNAPSHOT.jar -deegree-layers-gdal-3.6.0-SNAPSHOT.jar -deegree-layers-remotewms-3.6.0-SNAPSHOT.jar -deegree-layers-tile-3.6.0-SNAPSHOT.jar -deegree-mdstore-commons-3.6.0-SNAPSHOT.jar -deegree-mdstore-iso-3.6.0-SNAPSHOT.jar -deegree-mdstore-iso-memory-3.6.0-SNAPSHOT.jar +deegree-connectionprovider-datasource-3.6.0-pre3.1.jar +deegree-core-annotations-3.6.0-pre3.1.jar +deegree-core-base-3.6.0-pre3.1.jar +deegree-core-commons-3.6.0-pre3.1.jar +deegree-core-coverage-3.6.0-pre3.1.jar +deegree-core-cs-3.6.0-pre3.1.jar +deegree-core-db-3.6.0-pre3.1.jar +deegree-core-featureinfo-3.6.0-pre3.1.jar +deegree-core-filterfunctions-3.6.0-pre3.1.jar +deegree-core-gdal-3.6.0-pre3.1.jar +deegree-core-geometry-3.6.0-pre3.1.jar +deegree-core-layer-3.6.0-pre3.1.jar +deegree-core-metadata-3.6.0-pre3.1.jar +deegree-core-moduleinfo-3.6.0-pre3.1.jar +deegree-core-rendering-2d-3.6.0-pre3.1.jar +deegree-core-style-3.6.0-pre3.1.jar +deegree-core-theme-3.6.0-pre3.1.jar +deegree-core-tile-3.6.0-pre3.1.jar +deegree-core-workspace-3.6.0-pre3.1.jar +deegree-featurestore-commons-3.6.0-pre3.1.jar +deegree-featurestore-memory-3.6.0-pre3.1.jar +deegree-featurestore-shape-3.6.0-pre3.1.jar +deegree-featurestore-simplesql-3.6.0-pre3.1.jar +deegree-featurestore-sql-3.6.0-pre3.1.jar +deegree-jsf-core-3.6.0-pre3.1.jar +deegree-layers-coverage-3.6.0-pre3.1.jar +deegree-layers-feature-3.6.0-pre3.1.jar +deegree-layers-gdal-3.6.0-pre3.1.jar +deegree-layers-remotewms-3.6.0-pre3.1.jar +deegree-layers-tile-3.6.0-pre3.1.jar +deegree-mdstore-commons-3.6.0-pre3.1.jar +deegree-mdstore-iso-3.6.0-pre3.1.jar +deegree-mdstore-iso-memory-3.6.0-pre3.1.jar deegree-ogcschemas-20230513.jar -deegree-processprovider-fme-3.6.0-SNAPSHOT.jar -deegree-protocol-commons-3.6.0-SNAPSHOT.jar -deegree-protocol-wfs-3.6.0-SNAPSHOT.jar -deegree-protocol-wms-3.6.0-SNAPSHOT.jar -deegree-protocol-wmts-3.6.0-SNAPSHOT.jar -deegree-remoteows-commons-3.6.0-SNAPSHOT.jar -deegree-remoteows-wms-3.6.0-SNAPSHOT.jar -deegree-remoteows-wmts-3.6.0-SNAPSHOT.jar -deegree-services-commons-3.6.0-SNAPSHOT.jar -deegree-services-config-3.6.0-SNAPSHOT.jar -deegree-services-csw-3.6.0-SNAPSHOT.jar -deegree-services-wfs-3.6.0-SNAPSHOT.jar -deegree-services-wms-3.6.0-SNAPSHOT.jar -deegree-services-wmts-3.6.0-SNAPSHOT.jar -deegree-services-wps-3.6.0-SNAPSHOT.jar -deegree-sqldialect-commons-3.6.0-SNAPSHOT.jar -deegree-sqldialect-mssql-3.6.0-SNAPSHOT.jar -deegree-sqldialect-oracle-3.6.0-SNAPSHOT.jar -deegree-sqldialect-postgis-3.6.0-SNAPSHOT.jar -deegree-themes-remotewms-3.6.0-SNAPSHOT.jar -deegree-tilestore-cache-3.6.0-SNAPSHOT.jar -deegree-tilestore-commons-3.6.0-SNAPSHOT.jar -deegree-tilestore-filesystem-3.6.0-SNAPSHOT.jar -deegree-tilestore-gdal-3.6.0-SNAPSHOT.jar -deegree-tilestore-geotiff-3.6.0-SNAPSHOT.jar -deegree-tilestore-merge-3.6.0-SNAPSHOT.jar -deegree-tilestore-remotewms-3.6.0-SNAPSHOT.jar -deegree-tilestore-remotewmts-3.6.0-SNAPSHOT.jar -deegree-webservices-3.6.0-SNAPSHOT.jar +deegree-processprovider-fme-3.6.0-pre3.1.jar +deegree-protocol-commons-3.6.0-pre3.1.jar +deegree-protocol-wfs-3.6.0-pre3.1.jar +deegree-protocol-wms-3.6.0-pre3.1.jar +deegree-protocol-wmts-3.6.0-pre3.1.jar +deegree-remoteows-commons-3.6.0-pre3.1.jar +deegree-remoteows-wms-3.6.0-pre3.1.jar +deegree-remoteows-wmts-3.6.0-pre3.1.jar +deegree-services-commons-3.6.0-pre3.1.jar +deegree-services-config-3.6.0-pre3.1.jar +deegree-services-csw-3.6.0-pre3.1.jar +deegree-services-wfs-3.6.0-pre3.1.jar +deegree-services-wms-3.6.0-pre3.1.jar +deegree-services-wmts-3.6.0-pre3.1.jar +deegree-services-wps-3.6.0-pre3.1.jar +deegree-sqldialect-commons-3.6.0-pre3.1.jar +deegree-sqldialect-mssql-3.6.0-pre3.1.jar +deegree-sqldialect-oracle-3.6.0-pre3.1.jar +deegree-sqldialect-postgis-3.6.0-pre3.1.jar +deegree-themes-remotewms-3.6.0-pre3.1.jar +deegree-tilestore-cache-3.6.0-pre3.1.jar +deegree-tilestore-commons-3.6.0-pre3.1.jar +deegree-tilestore-filesystem-3.6.0-pre3.1.jar +deegree-tilestore-gdal-3.6.0-pre3.1.jar +deegree-tilestore-geotiff-3.6.0-pre3.1.jar +deegree-tilestore-merge-3.6.0-pre3.1.jar +deegree-tilestore-remotewms-3.6.0-pre3.1.jar +deegree-tilestore-remotewmts-3.6.0-pre3.1.jar +deegree-webservices-3.6.0-pre3.1.jar ehcache-3.10.8-jakarta.jar error_prone_annotations-2.27.0.jar FastInfoset-1.2.18.jar diff --git a/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/test/resources/de/latlon/xplan/services/wms/libs.expected.txt b/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/test/resources/de/latlon/xplan/services/wms/libs.expected.txt index 85fd4e0d5..2de77885c 100644 --- a/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/test/resources/de/latlon/xplan/services/wms/libs.expected.txt +++ b/xplan-webservices/xplan-webservices-services/xplan-services-wms/src/test/resources/de/latlon/xplan/services/wms/libs.expected.txt @@ -41,69 +41,69 @@ commons-logging-1.2.jar commons-math-2.2.jar commons-pool2-2.12.0.jar com.sun.xml.bind-jaxb-core-4.0.5.jar -deegree-connectionprovider-datasource-3.6.0-SNAPSHOT.jar -deegree-core-annotations-3.6.0-SNAPSHOT.jar -deegree-core-base-3.6.0-SNAPSHOT.jar -deegree-core-commons-3.6.0-SNAPSHOT.jar -deegree-core-coverage-3.6.0-SNAPSHOT.jar -deegree-core-cs-3.6.0-SNAPSHOT.jar -deegree-core-db-3.6.0-SNAPSHOT.jar -deegree-core-featureinfo-3.6.0-SNAPSHOT.jar -deegree-core-filterfunctions-3.6.0-SNAPSHOT.jar -deegree-core-gdal-3.6.0-SNAPSHOT.jar -deegree-core-geometry-3.6.0-SNAPSHOT.jar -deegree-core-layer-3.6.0-SNAPSHOT.jar -deegree-core-metadata-3.6.0-SNAPSHOT.jar -deegree-core-moduleinfo-3.6.0-SNAPSHOT.jar -deegree-core-rendering-2d-3.6.0-SNAPSHOT.jar -deegree-core-style-3.6.0-SNAPSHOT.jar -deegree-core-theme-3.6.0-SNAPSHOT.jar -deegree-core-tile-3.6.0-SNAPSHOT.jar -deegree-core-workspace-3.6.0-SNAPSHOT.jar -deegree-featurestore-commons-3.6.0-SNAPSHOT.jar -deegree-featurestore-memory-3.6.0-SNAPSHOT.jar -deegree-featurestore-shape-3.6.0-SNAPSHOT.jar -deegree-featurestore-simplesql-3.6.0-SNAPSHOT.jar -deegree-featurestore-sql-3.6.0-SNAPSHOT.jar -deegree-jsf-core-3.6.0-SNAPSHOT.jar -deegree-layers-coverage-3.6.0-SNAPSHOT.jar -deegree-layers-feature-3.6.0-SNAPSHOT.jar -deegree-layers-gdal-3.6.0-SNAPSHOT.jar -deegree-layers-remotewms-3.6.0-SNAPSHOT.jar -deegree-layers-tile-3.6.0-SNAPSHOT.jar -deegree-mdstore-commons-3.6.0-SNAPSHOT.jar -deegree-mdstore-iso-3.6.0-SNAPSHOT.jar -deegree-mdstore-iso-memory-3.6.0-SNAPSHOT.jar +deegree-connectionprovider-datasource-3.6.0-pre3.1.jar +deegree-core-annotations-3.6.0-pre3.1.jar +deegree-core-base-3.6.0-pre3.1.jar +deegree-core-commons-3.6.0-pre3.1.jar +deegree-core-coverage-3.6.0-pre3.1.jar +deegree-core-cs-3.6.0-pre3.1.jar +deegree-core-db-3.6.0-pre3.1.jar +deegree-core-featureinfo-3.6.0-pre3.1.jar +deegree-core-filterfunctions-3.6.0-pre3.1.jar +deegree-core-gdal-3.6.0-pre3.1.jar +deegree-core-geometry-3.6.0-pre3.1.jar +deegree-core-layer-3.6.0-pre3.1.jar +deegree-core-metadata-3.6.0-pre3.1.jar +deegree-core-moduleinfo-3.6.0-pre3.1.jar +deegree-core-rendering-2d-3.6.0-pre3.1.jar +deegree-core-style-3.6.0-pre3.1.jar +deegree-core-theme-3.6.0-pre3.1.jar +deegree-core-tile-3.6.0-pre3.1.jar +deegree-core-workspace-3.6.0-pre3.1.jar +deegree-featurestore-commons-3.6.0-pre3.1.jar +deegree-featurestore-memory-3.6.0-pre3.1.jar +deegree-featurestore-shape-3.6.0-pre3.1.jar +deegree-featurestore-simplesql-3.6.0-pre3.1.jar +deegree-featurestore-sql-3.6.0-pre3.1.jar +deegree-jsf-core-3.6.0-pre3.1.jar +deegree-layers-coverage-3.6.0-pre3.1.jar +deegree-layers-feature-3.6.0-pre3.1.jar +deegree-layers-gdal-3.6.0-pre3.1.jar +deegree-layers-remotewms-3.6.0-pre3.1.jar +deegree-layers-tile-3.6.0-pre3.1.jar +deegree-mdstore-commons-3.6.0-pre3.1.jar +deegree-mdstore-iso-3.6.0-pre3.1.jar +deegree-mdstore-iso-memory-3.6.0-pre3.1.jar deegree-ogcschemas-20230513.jar -deegree-processprovider-fme-3.6.0-SNAPSHOT.jar -deegree-protocol-commons-3.6.0-SNAPSHOT.jar -deegree-protocol-wfs-3.6.0-SNAPSHOT.jar -deegree-protocol-wms-3.6.0-SNAPSHOT.jar -deegree-protocol-wmts-3.6.0-SNAPSHOT.jar -deegree-remoteows-commons-3.6.0-SNAPSHOT.jar -deegree-remoteows-wms-3.6.0-SNAPSHOT.jar -deegree-remoteows-wmts-3.6.0-SNAPSHOT.jar -deegree-services-commons-3.6.0-SNAPSHOT.jar -deegree-services-config-3.6.0-SNAPSHOT.jar -deegree-services-csw-3.6.0-SNAPSHOT.jar -deegree-services-wfs-3.6.0-SNAPSHOT.jar -deegree-services-wms-3.6.0-SNAPSHOT.jar -deegree-services-wmts-3.6.0-SNAPSHOT.jar -deegree-services-wps-3.6.0-SNAPSHOT.jar -deegree-sqldialect-commons-3.6.0-SNAPSHOT.jar -deegree-sqldialect-mssql-3.6.0-SNAPSHOT.jar -deegree-sqldialect-oracle-3.6.0-SNAPSHOT.jar -deegree-sqldialect-postgis-3.6.0-SNAPSHOT.jar -deegree-themes-remotewms-3.6.0-SNAPSHOT.jar -deegree-tilestore-cache-3.6.0-SNAPSHOT.jar -deegree-tilestore-commons-3.6.0-SNAPSHOT.jar -deegree-tilestore-filesystem-3.6.0-SNAPSHOT.jar -deegree-tilestore-gdal-3.6.0-SNAPSHOT.jar -deegree-tilestore-geotiff-3.6.0-SNAPSHOT.jar -deegree-tilestore-merge-3.6.0-SNAPSHOT.jar -deegree-tilestore-remotewms-3.6.0-SNAPSHOT.jar -deegree-tilestore-remotewmts-3.6.0-SNAPSHOT.jar -deegree-webservices-3.6.0-SNAPSHOT.jar +deegree-processprovider-fme-3.6.0-pre3.1.jar +deegree-protocol-commons-3.6.0-pre3.1.jar +deegree-protocol-wfs-3.6.0-pre3.1.jar +deegree-protocol-wms-3.6.0-pre3.1.jar +deegree-protocol-wmts-3.6.0-pre3.1.jar +deegree-remoteows-commons-3.6.0-pre3.1.jar +deegree-remoteows-wms-3.6.0-pre3.1.jar +deegree-remoteows-wmts-3.6.0-pre3.1.jar +deegree-services-commons-3.6.0-pre3.1.jar +deegree-services-config-3.6.0-pre3.1.jar +deegree-services-csw-3.6.0-pre3.1.jar +deegree-services-wfs-3.6.0-pre3.1.jar +deegree-services-wms-3.6.0-pre3.1.jar +deegree-services-wmts-3.6.0-pre3.1.jar +deegree-services-wps-3.6.0-pre3.1.jar +deegree-sqldialect-commons-3.6.0-pre3.1.jar +deegree-sqldialect-mssql-3.6.0-pre3.1.jar +deegree-sqldialect-oracle-3.6.0-pre3.1.jar +deegree-sqldialect-postgis-3.6.0-pre3.1.jar +deegree-themes-remotewms-3.6.0-pre3.1.jar +deegree-tilestore-cache-3.6.0-pre3.1.jar +deegree-tilestore-commons-3.6.0-pre3.1.jar +deegree-tilestore-filesystem-3.6.0-pre3.1.jar +deegree-tilestore-gdal-3.6.0-pre3.1.jar +deegree-tilestore-geotiff-3.6.0-pre3.1.jar +deegree-tilestore-merge-3.6.0-pre3.1.jar +deegree-tilestore-remotewms-3.6.0-pre3.1.jar +deegree-tilestore-remotewmts-3.6.0-pre3.1.jar +deegree-webservices-3.6.0-pre3.1.jar ehcache-3.10.8-jakarta.jar error_prone_annotations-2.27.0.jar FastInfoset-1.2.18.jar diff --git a/xplan-webservices/xplan-webservices-validator-wms/src/test/resources/de/latlon/xplan/validator/wms/libs.expected.txt b/xplan-webservices/xplan-webservices-validator-wms/src/test/resources/de/latlon/xplan/validator/wms/libs.expected.txt index 32debc65e..595879312 100644 --- a/xplan-webservices/xplan-webservices-validator-wms/src/test/resources/de/latlon/xplan/validator/wms/libs.expected.txt +++ b/xplan-webservices/xplan-webservices-validator-wms/src/test/resources/de/latlon/xplan/validator/wms/libs.expected.txt @@ -44,69 +44,69 @@ commons-logging-1.1.3.jar commons-math-2.2.jar commons-pool2-2.12.0.jar com.sun.xml.bind-jaxb-core-4.0.5.jar -deegree-connectionprovider-datasource-3.6.0-SNAPSHOT.jar -deegree-core-annotations-3.6.0-SNAPSHOT.jar -deegree-core-base-3.6.0-SNAPSHOT.jar -deegree-core-commons-3.6.0-SNAPSHOT.jar -deegree-core-coverage-3.6.0-SNAPSHOT.jar -deegree-core-cs-3.6.0-SNAPSHOT.jar -deegree-core-db-3.6.0-SNAPSHOT.jar -deegree-core-featureinfo-3.6.0-SNAPSHOT.jar -deegree-core-filterfunctions-3.6.0-SNAPSHOT.jar -deegree-core-gdal-3.6.0-SNAPSHOT.jar -deegree-core-geometry-3.6.0-SNAPSHOT.jar -deegree-core-layer-3.6.0-SNAPSHOT.jar -deegree-core-metadata-3.6.0-SNAPSHOT.jar -deegree-core-moduleinfo-3.6.0-SNAPSHOT.jar -deegree-core-rendering-2d-3.6.0-SNAPSHOT.jar -deegree-core-style-3.6.0-SNAPSHOT.jar -deegree-core-theme-3.6.0-SNAPSHOT.jar -deegree-core-tile-3.6.0-SNAPSHOT.jar -deegree-core-workspace-3.6.0-SNAPSHOT.jar -deegree-featurestore-commons-3.6.0-SNAPSHOT.jar -deegree-featurestore-memory-3.6.0-SNAPSHOT.jar -deegree-featurestore-shape-3.6.0-SNAPSHOT.jar -deegree-featurestore-simplesql-3.6.0-SNAPSHOT.jar -deegree-featurestore-sql-3.6.0-SNAPSHOT.jar -deegree-jsf-core-3.6.0-SNAPSHOT.jar -deegree-layers-coverage-3.6.0-SNAPSHOT.jar -deegree-layers-feature-3.6.0-SNAPSHOT.jar -deegree-layers-gdal-3.6.0-SNAPSHOT.jar -deegree-layers-remotewms-3.6.0-SNAPSHOT.jar -deegree-layers-tile-3.6.0-SNAPSHOT.jar -deegree-mdstore-commons-3.6.0-SNAPSHOT.jar -deegree-mdstore-iso-3.6.0-SNAPSHOT.jar -deegree-mdstore-iso-memory-3.6.0-SNAPSHOT.jar +deegree-connectionprovider-datasource-3.6.0-pre3.1.jar +deegree-core-annotations-3.6.0-pre3.1.jar +deegree-core-base-3.6.0-pre3.1.jar +deegree-core-commons-3.6.0-pre3.1.jar +deegree-core-coverage-3.6.0-pre3.1.jar +deegree-core-cs-3.6.0-pre3.1.jar +deegree-core-db-3.6.0-pre3.1.jar +deegree-core-featureinfo-3.6.0-pre3.1.jar +deegree-core-filterfunctions-3.6.0-pre3.1.jar +deegree-core-gdal-3.6.0-pre3.1.jar +deegree-core-geometry-3.6.0-pre3.1.jar +deegree-core-layer-3.6.0-pre3.1.jar +deegree-core-metadata-3.6.0-pre3.1.jar +deegree-core-moduleinfo-3.6.0-pre3.1.jar +deegree-core-rendering-2d-3.6.0-pre3.1.jar +deegree-core-style-3.6.0-pre3.1.jar +deegree-core-theme-3.6.0-pre3.1.jar +deegree-core-tile-3.6.0-pre3.1.jar +deegree-core-workspace-3.6.0-pre3.1.jar +deegree-featurestore-commons-3.6.0-pre3.1.jar +deegree-featurestore-memory-3.6.0-pre3.1.jar +deegree-featurestore-shape-3.6.0-pre3.1.jar +deegree-featurestore-simplesql-3.6.0-pre3.1.jar +deegree-featurestore-sql-3.6.0-pre3.1.jar +deegree-jsf-core-3.6.0-pre3.1.jar +deegree-layers-coverage-3.6.0-pre3.1.jar +deegree-layers-feature-3.6.0-pre3.1.jar +deegree-layers-gdal-3.6.0-pre3.1.jar +deegree-layers-remotewms-3.6.0-pre3.1.jar +deegree-layers-tile-3.6.0-pre3.1.jar +deegree-mdstore-commons-3.6.0-pre3.1.jar +deegree-mdstore-iso-3.6.0-pre3.1.jar +deegree-mdstore-iso-memory-3.6.0-pre3.1.jar deegree-ogcschemas-20230513.jar -deegree-processprovider-fme-3.6.0-SNAPSHOT.jar -deegree-protocol-commons-3.6.0-SNAPSHOT.jar -deegree-protocol-wfs-3.6.0-SNAPSHOT.jar -deegree-protocol-wms-3.6.0-SNAPSHOT.jar -deegree-protocol-wmts-3.6.0-SNAPSHOT.jar -deegree-remoteows-commons-3.6.0-SNAPSHOT.jar -deegree-remoteows-wms-3.6.0-SNAPSHOT.jar -deegree-remoteows-wmts-3.6.0-SNAPSHOT.jar -deegree-services-commons-3.6.0-SNAPSHOT.jar -deegree-services-config-3.6.0-SNAPSHOT.jar -deegree-services-csw-3.6.0-SNAPSHOT.jar -deegree-services-wfs-3.6.0-SNAPSHOT.jar -deegree-services-wms-3.6.0-SNAPSHOT.jar -deegree-services-wmts-3.6.0-SNAPSHOT.jar -deegree-services-wps-3.6.0-SNAPSHOT.jar -deegree-sqldialect-commons-3.6.0-SNAPSHOT.jar -deegree-sqldialect-mssql-3.6.0-SNAPSHOT.jar -deegree-sqldialect-oracle-3.6.0-SNAPSHOT.jar -deegree-sqldialect-postgis-3.6.0-SNAPSHOT.jar -deegree-themes-remotewms-3.6.0-SNAPSHOT.jar -deegree-tilestore-cache-3.6.0-SNAPSHOT.jar -deegree-tilestore-commons-3.6.0-SNAPSHOT.jar -deegree-tilestore-filesystem-3.6.0-SNAPSHOT.jar -deegree-tilestore-gdal-3.6.0-SNAPSHOT.jar -deegree-tilestore-geotiff-3.6.0-SNAPSHOT.jar -deegree-tilestore-merge-3.6.0-SNAPSHOT.jar -deegree-tilestore-remotewms-3.6.0-SNAPSHOT.jar -deegree-tilestore-remotewmts-3.6.0-SNAPSHOT.jar -deegree-webservices-3.6.0-SNAPSHOT.jar +deegree-processprovider-fme-3.6.0-pre3.1.jar +deegree-protocol-commons-3.6.0-pre3.1.jar +deegree-protocol-wfs-3.6.0-pre3.1.jar +deegree-protocol-wms-3.6.0-pre3.1.jar +deegree-protocol-wmts-3.6.0-pre3.1.jar +deegree-remoteows-commons-3.6.0-pre3.1.jar +deegree-remoteows-wms-3.6.0-pre3.1.jar +deegree-remoteows-wmts-3.6.0-pre3.1.jar +deegree-services-commons-3.6.0-pre3.1.jar +deegree-services-config-3.6.0-pre3.1.jar +deegree-services-csw-3.6.0-pre3.1.jar +deegree-services-wfs-3.6.0-pre3.1.jar +deegree-services-wms-3.6.0-pre3.1.jar +deegree-services-wmts-3.6.0-pre3.1.jar +deegree-services-wps-3.6.0-pre3.1.jar +deegree-sqldialect-commons-3.6.0-pre3.1.jar +deegree-sqldialect-mssql-3.6.0-pre3.1.jar +deegree-sqldialect-oracle-3.6.0-pre3.1.jar +deegree-sqldialect-postgis-3.6.0-pre3.1.jar +deegree-themes-remotewms-3.6.0-pre3.1.jar +deegree-tilestore-cache-3.6.0-pre3.1.jar +deegree-tilestore-commons-3.6.0-pre3.1.jar +deegree-tilestore-filesystem-3.6.0-pre3.1.jar +deegree-tilestore-gdal-3.6.0-pre3.1.jar +deegree-tilestore-geotiff-3.6.0-pre3.1.jar +deegree-tilestore-merge-3.6.0-pre3.1.jar +deegree-tilestore-remotewms-3.6.0-pre3.1.jar +deegree-tilestore-remotewmts-3.6.0-pre3.1.jar +deegree-webservices-3.6.0-pre3.1.jar ehcache-3.10.8-jakarta.jar error_prone_annotations-2.27.0.jar FastInfoset-1.2.18.jar diff --git a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/services/html.gfi b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/services/html.gfi index 01de15182..4400a01fd 100644 --- a/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/services/html.gfi +++ b/xplan-webservices/xplan-webservices-workspaces/src/main/workspace/services/html.gfi @@ -28,7 +28,7 @@ <body> <script> - var XPLAN_GATEWAY_URL = "http://localhost:8080/xplan-ows"; + var XPLAN_GATEWAY_URL = "http://localhost:8080/xplan-gateway/ows"; window.onload = function () { updateComplexProperties(); -- GitLab