@Override public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { if (value != null) { Wfs20FeatureCollection wfc = (Wfs20FeatureCollection) value; String schemaLoc = generateSchemaLocationFromMetacards(wfc.getMembers(), prefixToUriMapping); for (Entry<String, String> entry : prefixToUriMapping.entrySet()) { writer.addAttribute(XMLConstants.XMLNS_ATTRIBUTE + ":" + entry.getKey(), entry.getValue()); } writer.addAttribute(Wfs20Constants.ATTRIBUTE_SCHEMA_LOCATION, schemaLoc); Geometry allGeometry = getBounds(wfc.getMembers()); if (!allGeometry.isEmpty()) { XmlNode.writeEnvelope( Wfs20Constants.GML_PREFIX + ":" + "boundedBy", context, writer, allGeometry.getEnvelopeInternal()); } for (Metacard mc : wfc.getMembers()) { writer.startNode(Wfs20Constants.GML_PREFIX + ":" + FEATURE_MEMBER); context.convertAnother(mc); writer.endNode(); } } else { LOGGER.warn("Incoming value was null"); } }
private Wfs20FeatureCollection addMetacardToFeatureCollection( Wfs20FeatureCollection featureCollection, UnmarshallingContext context, HierarchicalStreamReader reader) { featureCollection .getMembers() .add( (Metacard) context.convertAnother( null, MetacardImpl.class, featureConverterMap.get(reader.getNodeName()))); return featureCollection; }
public WfsSource getWfsSource( final String schema, final FilterCapabilities filterCapabilities, final String srsName, final int numFeatures, final boolean throwExceptionOnDescribeFeatureType, boolean prefix, int numReturned) throws WfsException { // GetCapabilities Response when(mockWfs.getCapabilities(any(GetCapabilitiesRequest.class))).thenReturn(mockCapabilites); when(mockFeatureCollection.getMembers()) .thenAnswer( new Answer<List<Metacard>>() { @Override public List<Metacard> answer(InvocationOnMock invocation) { // Create as many metacards as there are features List<Metacard> metacards = new ArrayList<Metacard>(numFeatures); for (int i = 0; i < numFeatures; i++) { MetacardImpl mc = new MetacardImpl(); mc.setId("ID_" + String.valueOf(i + 1)); metacards.add(mc); } return metacards; } }); if (numReturned != NULL_NUM_RETURNED) { when(mockFeatureCollection.getNumberReturned()).thenReturn(BigInteger.valueOf(numReturned)); } else { when(mockFeatureCollection.getNumberReturned()).thenReturn(null); } when(mockWfs.getFeature(any(GetFeatureType.class))).thenReturn(mockFeatureCollection); mockCapabilites.setFilterCapabilities(filterCapabilities); when(mockAvailabilityTask.isAvailable()).thenReturn(true); mockCapabilites.setFeatureTypeList(new FeatureTypeListType()); for (int ii = 0; ii < numFeatures; ii++) { FeatureTypeType feature = new FeatureTypeType(); QName qName; if (prefix) { qName = new QName("http://example.com", SAMPLE_FEATURE_NAME + ii, "Prefix" + ii); } else { qName = new QName("http://example.com", SAMPLE_FEATURE_NAME + ii); } feature.setName(qName); feature.setDefaultCRS(Wfs20Constants.EPSG_4326_URN); mockCapabilites.getFeatureTypeList().getFeatureType().add(feature); } XmlSchema xmlSchema = null; if (StringUtils.isNotBlank(schema)) { XmlSchemaCollection schemaCollection = new XmlSchemaCollection(); WfsUriResolver wfsUriResolver = new WfsUriResolver(); wfsUriResolver.setGmlNamespace(Wfs20Constants.GML_3_2_NAMESPACE); wfsUriResolver.setWfsNamespace(Wfs20Constants.WFS_2_0_NAMESPACE); schemaCollection.setSchemaResolver(wfsUriResolver); xmlSchema = schemaCollection.read(new StreamSource(new ByteArrayInputStream(schema.getBytes()))); } if (throwExceptionOnDescribeFeatureType) { when(mockWfs.describeFeatureType(any(DescribeFeatureTypeRequest.class))) .thenThrow(new WfsException("")); } else { when(mockWfs.describeFeatureType(any(DescribeFeatureTypeRequest.class))) .thenReturn(xmlSchema); } when(mockWfs.getFeatureCollectionReader()).thenReturn(mockReader); return new WfsSource( mockWfs, new GeotoolsFilterAdapterImpl(), mockContext, mockAvailabilityTask); }