2011-10-04 2 views
0

J'essaie de faire une requête "registerSensor". Voir le fichier xml suivant. Mais malheureusement, je reçois seulement une exception, à propos d'une requête NULL GET. Ce qui me trouble le plus, c'est le fait que j'envoie et que je lis par la méthode POST.Aucune réponse de (ogc) requête "Service d'observation de capteur" du serveur

Je sais que probablement ce problème ne correspond pas à ce forum, mais je ne sais pas où chercher d'autre .... (serait même heureux si vous venez de donner des conseils, à côté de l'ogc dokus)

Je l'ai testé deux fois sur mon propre serveur et aussi à: http: //giv-sos.uni-muenster.de: 8080/52nSOSv3/

ma demande:

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

L'exception Réponse que je reçois du serveur:

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

Le code 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()); 
         } 
       } 

      } 
     } 

Le ExceptionCode = "InvalidRequest" est assez évident, mais me confondez encore que je ne trouve pas et la moindre idée de ce dans le Doku ....

Je suis heureux de chaque réponse!

+0

Y a-t-il quelqu'un qui a une idée ??? – user972851

Répondre

1

C'est en fait assez simple. Vous mélangez le GET (dans les documentations OGC, appelées KVP ou Key Value Pair) et les interfaces SOAP du serveur. Ainsi, vous pouvez obtenir les capacités du serveur en utilisant KVP faire quelque chose comme ceci:

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

Mais normalement enregistrer un capteur, vous devez avoir la permission d'administration et être en mesure d'utiliser le protocole SOAP pour inclure le document XML complet décrivant le capteur. Cela signifie que vous avez enveloppé le XML RegisterSensor dans l'enveloppe SOAP comme cela (prétendre que c'est RegisterSensor et non GetCapabilities, je suis ici laconique). Notez également que le service/version est le même que ci-dessus, mais le paramètre de requête est maintenant le tag:

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

Essayez cette requête GetCapabilities sur votre serveur SOAP SOS préféré et voir si vous ne recevez pas un document de capacités de retour .

Questions connexes