Нет ответа (ogc) на запрос «Служба наблюдения датчика» от сервера - PullRequest
0 голосов
/ 04 октября 2011

Я пытаюсь сделать запрос "registerSensor".Смотрите следующий XML-файл.Но, к сожалению, я получаю только исключение о запросе NULL GET.Больше всего меня смущает тот факт, что я отправляю и читаю методом POST.

Я знаю, что, вероятно, эта проблема не подходит для этого форума, но я не знаю, где еще искать ..... (был бы даже рад, если бы вы просто дали какой-нибудь совет, кроме ogc dokus)

Я дважды проверил его на своем собственном сервере, а также по адресу: 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());
                        }
                }

            }
        }

ИсключениеCode = "InvalidRequest" довольно очевидно, но все же меня смущает то, что я не могу найти и понять это в доку ....

Я рад каждому ответу!

1 Ответ

1 голос
/ 12 июня 2012

Это на самом деле довольно просто.Вы смешиваете GET (в документах OGC они называются KVP или Key Value Pair) и SOAP-интерфейсы сервера.Таким образом, вы можете получить возможности сервера с помощью KVP, выполнив что-то вроде этого:

http://giv-sos.uni-muenster.de:8080/52nSOSv3?service=SOS&version=1.0.0&request=getCapabilities

Но обычно для регистрации датчика необходимо разрешение администратора и возможность использовать протокол SOAP для включения полного XMLдокумент, описывающий датчик.Это означает, что вы завернули XML-файл RegisterSensor в конверт SOAP следующим образом (представьте, что это RegisterSensor, а не GetCapabilities, я здесь кратко).Также обратите внимание, что service / version та же, что и выше, но параметр запроса теперь является тегом:

<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>

Попробуйте этот запрос GetCapabilities на вашем любимом SOS SOAP-сервере и посмотрите, не получите ли вы возможностидокумент обратно.

...