Skip to content

Commit 0b5c19e

Browse files
author
sensiasoft
committed
Added support for SOAP faults and SOAP GetObs
1 parent cd5c002 commit 0b5c19e

File tree

4 files changed

+44
-40
lines changed

4 files changed

+44
-40
lines changed

sensorhub-service-swe/src/main/java/org/sensorhub/impl/service/sos/SOSService.java

Lines changed: 41 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,9 @@
3535
import javax.servlet.http.HttpServletRequest;
3636
import javax.servlet.http.HttpServletResponse;
3737
import javax.xml.namespace.QName;
38-
import javax.xml.stream.XMLEventFactory;
39-
import javax.xml.stream.XMLEventReader;
40-
import javax.xml.stream.XMLEventWriter;
41-
import javax.xml.stream.XMLInputFactory;
4238
import javax.xml.stream.XMLOutputFactory;
39+
import javax.xml.stream.XMLStreamException;
4340
import javax.xml.stream.XMLStreamWriter;
44-
import javax.xml.stream.events.XMLEvent;
45-
import javax.xml.transform.dom.DOMSource;
4641
import net.opengis.fes.v20.Conformance;
4742
import net.opengis.fes.v20.FilterCapabilities;
4843
import net.opengis.fes.v20.SpatialCapabilities;
@@ -708,11 +703,14 @@ else if (!request.getOfferings().isEmpty())
708703

709704
// init xml document writing
710705
OutputStream os = new BufferedOutputStream(request.getResponseStream());
711-
XMLEventFactory xmlFactory = XMLEventFactory.newInstance();
712-
XMLEventWriter xmlWriter = XMLOutputFactory.newInstance().createXMLEventWriter(os, "UTF-8");
713-
xmlWriter.add(xmlFactory.createStartDocument());
714-
xmlWriter.add(xmlFactory.createStartElement(SOS_PREFIX, sosNsUri, "GetObservationResponse"));
715-
xmlWriter.add(xmlFactory.createNamespace(SOS_PREFIX, sosNsUri));
706+
XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(os, "UTF-8");
707+
xmlWriter = new IndentingXMLStreamWriter(xmlWriter);
708+
709+
// wrap with SOAP envelope if needed
710+
xmlWriter.writeStartDocument();
711+
startSoapEnvelope(request, xmlWriter);
712+
xmlWriter.writeStartElement(SOS_PREFIX, "GetObservationResponse", sosNsUri);
713+
xmlWriter.writeNamespace(SOS_PREFIX, sosNsUri);
716714

717715
// send obs from each selected offering
718716
// TODO sort by time by multiplexing obs from different offerings?
@@ -785,28 +783,21 @@ else if (result instanceof DataArray)
785783
if (firstObs)
786784
{
787785
for (Entry<String, String> nsDef: dom.getXmlDocument().getNSTable().entrySet())
788-
xmlWriter.add(xmlFactory.createNamespace(nsDef.getKey(), nsDef.getValue()));
786+
xmlWriter.writeNamespace(nsDef.getKey(), nsDef.getValue());
789787
firstObs = false;
790788
}
791789

792790
// serialize observation DOM tree into stream writer
793-
xmlWriter.add(xmlFactory.createStartElement(SOS_PREFIX, sosNsUri, "observationData"));
794-
XMLInputFactory factory = XMLImplFinder.getStaxInputFactory();
795-
XMLEventReader domReader = factory.createXMLEventReader(new DOMSource(obsElt));
796-
while (domReader.hasNext())
797-
{
798-
XMLEvent event = domReader.nextEvent();
799-
if (!event.isStartDocument() && !event.isEndDocument())
800-
xmlWriter.add(event);
801-
}
802-
xmlWriter.add(xmlFactory.createEndElement(SOS_PREFIX, sosNsUri, "observationData"));
791+
xmlWriter.writeStartElement(SOS_PREFIX, "observationData", sosNsUri);
792+
dom.writeToStreamWriter(obsElt, xmlWriter);
793+
xmlWriter.writeEndElement();
803794
xmlWriter.flush();
804-
os.write('\n');
805795
}
806796
}
807797
}
808798

809-
xmlWriter.add(xmlFactory.createEndDocument());
799+
// this will automatically close all open elements
800+
xmlWriter.writeEndDocument();
810801
xmlWriter.close();
811802
}
812803
finally
@@ -1038,13 +1029,7 @@ protected void handleRequest(final GetFeatureOfInterestRequest request) throws E
10381029
xmlWriter.writeStartDocument();
10391030

10401031
// wrap with SOAP envelope if requested
1041-
String soapUri = request.getSoapVersion();
1042-
if (soapUri != null)
1043-
{
1044-
xmlWriter.writeStartElement(SOAP_PREFIX, "Envelope", soapUri);
1045-
xmlWriter.writeNamespace(SOAP_PREFIX, soapUri);
1046-
xmlWriter.writeStartElement(SOAP_PREFIX, "Body", soapUri);
1047-
}
1032+
startSoapEnvelope(request, xmlWriter);
10481033

10491034
// write response root element
10501035
String sosNsUri = OGCRegistry.getNamespaceURI(SOSUtils.SOS, DEFAULT_VERSION);
@@ -1093,12 +1078,8 @@ protected void handleRequest(final GetFeatureOfInterestRequest request) throws E
10931078
}
10941079

10951080
// close SOAP elements
1096-
if (soapUri != null)
1097-
{
1098-
xmlWriter.writeEndElement();
1099-
xmlWriter.writeEndElement();
1100-
}
1101-
1081+
endSoapEnvelope(request, xmlWriter);
1082+
11021083
xmlWriter.writeEndDocument();
11031084
xmlWriter.close();
11041085
}
@@ -1231,6 +1212,29 @@ protected void handleRequest(InsertSensorRequest request) throws Exception
12311212
}
12321213

12331214

1215+
protected void startSoapEnvelope(OWSRequest request, XMLStreamWriter writer) throws XMLStreamException
1216+
{
1217+
String soapUri = request.getSoapVersion();
1218+
if (soapUri != null)
1219+
{
1220+
writer.writeStartElement(SOAP_PREFIX, "Envelope", soapUri);
1221+
writer.writeNamespace(SOAP_PREFIX, soapUri);
1222+
writer.writeStartElement(SOAP_PREFIX, "Body", soapUri);
1223+
}
1224+
}
1225+
1226+
1227+
protected void endSoapEnvelope(OWSRequest request, XMLStreamWriter writer) throws XMLStreamException
1228+
{
1229+
String soapUri = request.getSoapVersion();
1230+
if (soapUri != null)
1231+
{
1232+
writer.writeEndElement();
1233+
writer.writeEndElement();
1234+
}
1235+
}
1236+
1237+
12341238
protected boolean writeCustomFormatStream(GetResultRequest request, ISOSDataProvider dataProvider, OutputStream os) throws Exception
12351239
{
12361240
DataComponent resultStructure = dataProvider.getResultStructure();

sensorhub-test/src/test/resources/config_avl_with_storage.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"commSettings":
2929
{
3030
"objClass": "org.sensorhub.impl.sensor.avl.MultipleFilesProviderConfig",
31-
"dataFolder": "/home/alex/Documents/Projects/Workspace_OGC/sensorhub/sensorhub-driver-avl-911"
31+
"dataFolder": "../../osh-sensors/sensorhub-driver-avl-911"
3232
}
3333
},
3434
{

0 commit comments

Comments
 (0)