我正在尝试制作“registerSensor”请求。请参阅以下xml文件。 但不幸的是,我只得到一个关于NULL GET请求的异常。 最让我困惑的是我通过POST方法发送和读取的事实。
我知道可能这个问题不适合那个论坛,但我不知道还有什么地方可以找......(如果你只是提出任何建议,甚至会高兴ogc dokus) / p>
我在自己的服务器上测试了两次,也在:http://giv-sos.uni-muenster.de:8080 / 52nSOSv3 /
我的要求:
<RegisterSensor
service="SOS"
version="1.0.0"
xmlns="http://www.opengis.net/sos/1.0"
xmlns:swe="http://www.opengis.net/swe/1.0.1"
xmlns:ows="http://www.opengeospatial.net/ows"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:gml="http://www.opengis.net/gml"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:om="http://www.opengis.net/om/1.0"
xmlns:sml="http://www.opengis.net/sensorML/1.0.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/sos/1.0"
http://schemas.opengis.net/sos/1.0.0/sosRegisterSensor.xsd http://www.opengis.net/om/1.0
http://schemas.opengis.net/om/1.0.0/extensions/observationSpecialization_override.xsd>
<SensorDescription>
<sml:SensorML version="1.0.1">
<sml:member>
<sml:System xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<sml:identification>
<sml:IdentifierList>
<sml:identifier>
<sml:Term definition="urn:ogc:def:identifier:OGC:uniqueID">
<sml:value>Test Sensor1</sml:value>
</sml:Term>
</sml:identifier>
</sml:IdentifierList>
</sml:identification>
<sml:capabilities>
<swe:SimpleDataRecord>
<swe:field name="status">
<swe:Boolean>
<swe:value>true</swe:value>
</swe:Boolean>
</swe:field>
<!-- status indicates, whether sensor is mobile (true) or fixed (false) -->
<swe:field name="mobile">
<swe:Boolean>
<swe:value>true</swe:value>
</swe:Boolean>
</swe:field>
</swe:SimpleDataRecord>
</sml:capabilities>
<sml:position name="sensorPosition">
<swe:Position referenceFrame="urn:ogc:def:crs:EPSG:4326">
<swe:location>
<swe:Vector gml:id="STATION_LOCATION">
<swe:coordinate name="easting">
<swe:Quantity>
<swe:uom code="degree"/>
<swe:value>12.99734</swe:value>
</swe:Quantity>
</swe:coordinate>
<swe:coordinate name="northing">
<swe:Quantity>
<swe:uom code="degree"/>
<swe:value>47.79367</swe:value>
</swe:Quantity>
</swe:coordinate>
<swe:coordinate name="altitude">
<swe:Quantity>
<swe:uom code="m"/>
<swe:value>433</swe:value>
</swe:Quantity>
</swe:coordinate>
</swe:Vector>
</swe:location>
</swe:Position>
</sml:position>
<sml:inputs>
<sml:InputList>
<sml:input name="position">
<swe:ObservableProperty definition="urn:ogc:def:phenomenon:OGC:1.0.30:position"/>
</sml:input>
</sml:InputList>
</sml:inputs>
<sml:outputs>
<sml:OutputList>
<sml:output name="position">
<swe:Quantity definition="urn:ogc:def:phenomenon:OGC:1.0.30:position">
<gml:metaDataProperty>
<offering>
<id>position</id>
<name>Tracking Position Cartesian, in 2D</name>
</offering>
</gml:metaDataProperty>
<swe:uom code="m"/>
</swe:Quantity>
</sml:output>
<sml:output name="altitude">
<swe:Quantity definition="urn:ogc:def:property:OGC:AltitudeAboveMSL">
<gml:metaDataProperty>
<offering>
<id>altitude</id>
<name>Altitude above Mean Sea Level</name>
</offering>
</gml:metaDataProperty>
<swe:uom code="m"/>
</swe:Quantity>
</sml:output>
<sml:output name="convell_a">
<swe:Quantity definition="urn:ogc:def:property:OGC:conva">
<gml:metaDataProperty>
<offering>
<id>convell_a</id>
<name>Convidence Ellipse Semiaxis a</name>
</offering>
</gml:metaDataProperty>
<swe:uom code="m"/>
</swe:Quantity>
</sml:output>
<sml:output name="convell_b">
<swe:Quantity definition="urn:ogc:def:property:OGC:convb">
<gml:metaDataProperty>
<offering>
<id>convell_b</id>
<name>Convidence Ellipse Semiaxis b</name>
</offering>
</gml:metaDataProperty>
<swe:uom code="m"/>
</swe:Quantity>
</sml:output>
<sml:output name="convell_phi">
<swe:Quantity definition="urn:ogc:def:property:OGC:convphi">
<gml:metaDataProperty><offering>
<id>convell_phi</id>
<name>Convidence Ellipse Angle Phi</name>
</offering>
</gml:metaDataProperty>
<swe:uom code="m"/>
</swe:Quantity>
</sml:output>
</sml:OutputList>
</sml:outputs>
<sml:components>
<sml:ComponentList>
<sml:component name="sensorsystem"><sml:Component>
<sml:identification>
<sml:IdentifierList>
<sml:identifier>
<sml:Term definition="urn:ogc:def:identifier:OGC:uniqueID">
<sml:value>urn:ogc:object:feature:Sensor:TUWSystem</sml:value>
</sml:Term>
</sml:identifier>
</sml:IdentifierList>
</sml:identification>
<sml:inputs>
<sml:InputList>
<sml:input name="position">
<swe:ObservableProperty definition="urn:ogc:def:phenomenon:OGC:1.0.30:position"/>
</sml:input>
</sml:InputList>
</sml:inputs>
<sml:outputs>
<sml:OutputList>
<sml:output name="position">
<swe:Quantity definition="urn:ogc:def:phenomenon:OGC:1.0.30:position">
<gml:metaDataProperty>
<offering>
<id>position</id>
<name>Tracking Position Cartesian, in 2D</name>
</offering>
</gml:metaDataProperty>
<swe:uom code="m"/>
</swe:Quantity>
</sml:output>
<sml:output name="altitude">
<swe:Quantity definition="urn:ogc:def:property:OGC:AltitudeAboveMSL">
<gml:metaDataProperty>
<offering>
<id>altitude</id>
<name>Altitude above Mean Sea Level</name>
</offering>
</gml:metaDataProperty>
<swe:uom code="m"/>
</swe:Quantity>
</sml:output>
<sml:output name="convell_a">
<swe:Quantity definition="urn:ogc:def:property:OGC:conva">
<gml:metaDataProperty>
<offering>
<id>convell_a</id>
<name>Convidence Ellipse Semiaxis a</name>
</offering>
</gml:metaDataProperty>
<swe:uom code="m"/>
</swe:Quantity>
</sml:output>
<sml:output name="convell_b">
<swe:Quantity definition="urn:ogc:def:property:OGC:convb">
<gml:metaDataProperty>
<offering>
<id>convell_b</id>
<name>Convidence Ellipse Semiaxis b</name>
</offering>
</gml:metaDataProperty>
<swe:uom code="m"/>
</swe:Quantity>
</sml:output>
<sml:output name="convell_phi">
<swe:Quantity definition="urn:ogc:def:property:OGC:convphi">
<gml:metaDataProperty>
<offering>
<id>convell_phi</id>
<name>Convidence Ellipse Angle Phi</name>
</offering>
</gml:metaDataProperty>
<swe:uom code="m"/>
</swe:Quantity>
</sml:output>
</sml:OutputList>
</sml:outputs>
</sml:Component>
</sml:component>
</sml:ComponentList>
</sml:components>
</sml:System>
</sml:member>
</sml:SensorML>
</SensorDescription>
<ObservationTemplate>
<om:Measurement>
<om:samplingTime/>
<om:procedure/>
<om:observedProperty/>
<om:featureOfInterest>
</om:featureOfInterest>
<om:result uom="">
</om:result>
</om:Measurement>
</ObservationTemplate>
</RegisterSensor>
我从服务器获得的异常响应:
<?xml version="1.0" encoding="UTF-8"?>
<ows:ExceptionReport xmlns:ows="http://www.opengis.net/ows/1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0.0"
xsi:schemaLocation="http://schemas.opengis.net/ows/1.1.0/owsExceptionReport.xsd">
<ows:Exception exceptionCode="InvalidRequest" locator="REQUEST">
<ows:ExceptionText>The GET request null is not supported by this SOS.
</ows:ExceptionText>
</ows:Exception>
</ows:ExceptionReport>
Java代码:
public class HttpRequest
extends Thread {
private String url = "http://giv-sos.uni-muenster.de:8080/52nSOSv3/sos";
private String charset = "UTF-8";
private String xml_request; //request to db in xml format
private URLConnection connection;
private OutputStream output;
private InputStream input;
private String query; //transformed xml request
/** Ctor.
* @param xml ogc request as String
*/
HttpRequest(String xml) {
this.xml_request = xml;
}
//thread
public void run() {
// converting String xml to application/x-www-form-urlencoded MIME format
try {
query = URLEncoder.encode(xml_request, charset); //transforms special chars
} catch (UnsupportedEncodingException e) {
System.out.println(e.toString());
}
System.out.println("REQUEST: "+xml_request.toString());
// create connection
try {
connection = new URL(url).openConnection();
System.out.println("CONNECTION: "+connection. toString());
connection.setDoOutput(true); //true = set method to POST
connection.setDoInput(true);
connection.setRequestProperty("Accept-Charset", charset);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset="+charset);
} catch (MalformedURLException ex) {
System.out.println("MalformedURLException: " + ex.toString());
} catch (IOException ex) {
System.out.println("IOException: " + ex.toString());
} catch (Exception ex) {
System.out.println("Exception: " + ex.toString());
}
// open connection link
try {
connection.connect();
} catch (IOException ex) {
System.out.println(ex.toString());
}
try {
//write outputstream to server
output = connection.getOutputStream();
output.write(query.getBytes(charset));
//read response from server
input = new URL(url).openStream();
Reader reader = new InputStreamReader(input);
BufferedReader bufferedReader = new BufferedReader(reader);
StringBuilder response = new StringBuilder();
String line = null;
//read
while((line = bufferedReader.readLine()) != null)
response.append(line+"\n");
System.out.println("RESPONSE: "+response.toString());
//close reader
bufferedReader.close();
// close stream
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (output != null)
try {
output.close();
} catch (IOException ex) {
System.out.println("IOEXCEPTION: "+ex.toString());
}
}
}
}
exceptionCode =“InvalidRequest”非常明显,但仍然让我感到困惑,因为我无法在doku中找到它并提供线索......
我对每个答案感到高兴!
答案 0 :(得分:1)
这实际上非常简单。您正在混合GET(在OGC文档中称为KVP或密钥值对)和服务器的SOAP接口。所以你可以使用KVP来获得服务器的功能:
http://giv-sos.uni-muenster.de:8080/52nSOSv3?service=SOS&version=1.0.0&request=getCapabilities
但通常要注册传感器,您必须具有管理权限,并且能够使用SOAP协议来包含描述传感器的完整XML文档。这意味着你已经将RegisterSensor XML包装在SOAP信封中(假设这是RegisterSensor而不是GetCapabilities,我在这里简洁)。另请注意,service / version与上面的相同,但request参数现在是标记:
<soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding" xmlns:sos="http://www.opengis.net/sos/1.0">
<soap:Header />
<soap:Body>
<ns:GetCapabilities service="SOS" version="1.0.0" />
</soap:Body>
</soap:Envelope>
在您最喜爱的SOS SOAP服务器上尝试此GetCapabilities请求,看看您是否没有获得功能文档。