0

「registerSensor」リクエストを作成しようとしています。次のxmlファイルを参照してください。しかし、残念ながら、NULLGETリクエストに関する例外しか発生しません。私が最も混乱しているのは、POSTメソッドで送受信するという事実です。

おそらくこの問題はそのフォーラムに当てはまらないことは知っていますが、他にどこを探すべきかわかりません....(ogc dokusのほかに、アドバイスをいただければ幸いです)

私は自分のサーバーと次のサーバーで2回テストしました: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"はかなり明白ですが、それでも私がドクでそれを見つけて手がかりを見つけることができないことを私に混乱させます...。

私はすべての答えに満足しています!

4

1 に答える 1

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 エンベロープでラップしたことを意味します (これは GetCapabilities ではなく RegisterSensor であることに注意してください。ここでは簡潔にしています)。また、サービス/バージョンは上記と同じですが、リクエスト パラメータがタグになっていることに注意してください。

<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 リクエストを試して、ケーパビリティ ドキュメントが返されないかどうかを確認してください。

于 2012-06-12T19:42:36.517 に答える