2011-10-04 99 views
0

我试图提出“registerSensor”请求。看到下面的xml文件。 但不幸的是,我只收到一个异常,关于一个NULL GET请求。 什么混淆我最深的是,我发送和POST方法读取的事实。从服务器请求(ogc)“Sensor Observation Service”(传感器观察服务)请求

我知道这个问题可能不适合那个论坛,但我不知道在哪里寻找....(如果你只是给出任何建议,除了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()); 
         } 
       } 

      } 
     } 

的exceptionCode =“InvalidRequest”是很明显的,但还是让我困惑,我无法找到与它线索的数独....

我很高兴每个答案!

+0

有没有人有想法? – user972851

回答

1

这其实很简单。您将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文档传感器。这意味着你已经在SOAP信封中包装了RegisterSensor XML(假设这是RegisterSensor而不是GetCapabilities,我在这里简要说明)。还要注意,服务/版本是与上面相同,但现在的请求参数是标签:

<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服务器上请求,看看如果你没有得到一个性能文档回。