void QgsConfigParser::serviceCapabilities( QDomElement& parentElement, QDomDocument& doc ) const { Q_UNUSED( doc ); QFile wmsService( "wms_metadata.xml" ); if ( wmsService.open( QIODevice::ReadOnly ) ) { QDomDocument externServiceDoc; QString parseError; int errorLineNo; if ( externServiceDoc.setContent( &wmsService, false, &parseError, &errorLineNo ) ) { wmsService.close(); QDomElement service = externServiceDoc.firstChildElement(); parentElement.appendChild( service ); } } }
void QgsSOAPRequestHandler::setGetCapabilitiesResponse( const QDomDocument& doc ) { //Parse the QDomDocument Document and create a SOAP response QDomElement DocCapabilitiesElement = doc.firstChildElement(); if ( !DocCapabilitiesElement.isNull() ) { QDomNodeList capabilitiesNodes = DocCapabilitiesElement.elementsByTagName( "Capability" ); if ( !capabilitiesNodes.isEmpty() ) { //create response document QDomDocument soapResponseDoc; //Envelope element QDomElement soapEnvelopeElement = soapResponseDoc.createElement( "soap:Envelope" ); soapEnvelopeElement.setAttribute( "xmlns:soap", "http://schemas.xmlsoap.org/soap/envelope/" ); soapEnvelopeElement.setAttribute( "soap:encoding", "http://schemas.xmlsoap.org/soap/encoding/" ); soapResponseDoc.appendChild( soapEnvelopeElement ); //Body element QDomElement soapBodyElement = soapResponseDoc.createElementNS( "http://schemas.xmlsoap.org/soap/envelope/", "soap:Body" ); soapEnvelopeElement.appendChild( soapBodyElement ); // check if WMS or MS SOAP request if ( mService == "MS" || mService == "MDS" || mService == "MAS" ) { //OA_MI_MS_Capabilities element QDomElement msCapabilitiesElement = soapResponseDoc.createElement( "ms:OA_MI_Service_Capabilities" ); msCapabilitiesElement.setAttribute( "service", "MS" ); msCapabilitiesElement.setAttribute( "version", "1.1" ); msCapabilitiesElement.setAttribute( "xmlns:ms", "http://www.eu-orchestra.org/services/ms" ); msCapabilitiesElement.setAttribute( "xmlns", "http://www.eu-orchestra.org/services/oas/oa_basic" ); msCapabilitiesElement.setAttribute( "xmlns:gml", "http://www.opengis.net/gml" ); msCapabilitiesElement.setAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); msCapabilitiesElement.setAttribute( "xmlns:xsd", "http://www.w3.org/2001/XMLSchema" ); soapBodyElement.appendChild( msCapabilitiesElement ); // import the orchestra common capabilities QFile common( "common.xml" ); if ( !common.open( QIODevice::ReadOnly ) ) { //throw an exception... QgsDebugMsg( "external orchestra common capabilities not found" ); } else { QDomDocument externCapDoc; QString parseError; int errorLineNo; if ( !externCapDoc.setContent( &common, false, &parseError, &errorLineNo ) ) { QgsDebugMsg( "parse error at setting content of external orchestra common capabilities: " + parseError + " at line " + QString::number( errorLineNo ) ); common.close(); } common.close(); // write common capabilities QDomElement orchestraCommon = externCapDoc.firstChildElement(); msCapabilitiesElement.appendChild( orchestraCommon ); // write specific capabilities QDomElement msSpecificCapabilitiesElement = soapResponseDoc.createElement( "serviceSpecificCapabilities" ); soapBodyElement.appendChild( msSpecificCapabilitiesElement ); QDomElement capabilitiesElement = capabilitiesNodes.item( 0 ).toElement(); msSpecificCapabilitiesElement.appendChild( capabilitiesElement ); // to do supportedOperations QDomNodeList requestNodes = capabilitiesElement.elementsByTagName( "Request" ); if ( !requestNodes.isEmpty() ) { QDomElement requestElement = requestNodes.item( 0 ).toElement(); QDomNodeList requestChildNodes = requestElement.childNodes(); //append an array element for 'supportedOperations' to the soap document QDomElement supportedOperationsElement = soapResponseDoc.createElement( "supportedOperations" ); supportedOperationsElement.setAttribute( "xsi:type", "soapenc:Array" ); supportedOperationsElement.setAttribute( "soap:arrayType", "xsd:string[" + QString::number( requestChildNodes.size() ) + "]" ); for ( int i = 0; i < requestChildNodes.size(); ++i ) { QDomElement itemElement = soapResponseDoc.createElement( "item" ); QDomText itemText = soapResponseDoc.createTextNode( requestChildNodes.item( i ).toElement().tagName() ); itemElement.appendChild( itemText ); supportedOperationsElement.appendChild( itemElement ); } } //operationTypeInfo //predefinedLayers //predefinedDimensions //layerTypeInfo //predefinedStyles //supportedLayerDataInputFormat //supportedExceptionFormats //supportedDCP } } else if ( mService == "WMS" ) { //WMS_Capabilities element QDomElement msCapabilitiesElement = soapResponseDoc.createElement( "wms:Capabilities" ); msCapabilitiesElement.setAttribute( "service", "WMS" ); msCapabilitiesElement.setAttribute( "version", "1.3.0" ); msCapabilitiesElement.setAttribute( "xmlns:wms", "http://www.opengis.net/wms" ); msCapabilitiesElement.setAttribute( "xmlns:gml", "http://www.opengis.net/gml" ); msCapabilitiesElement.setAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); msCapabilitiesElement.setAttribute( "xmlns:xsd", "http://www.w3.org/2001/XMLSchema" ); soapBodyElement.appendChild( msCapabilitiesElement ); QFile wmsService( "wms_metadata.xml" ); if ( !wmsService.open( QIODevice::ReadOnly ) ) { //throw an exception... QgsDebugMsg( "external wms service capabilities not found" ); } else { QDomDocument externServiceDoc; QString parseError; int errorLineNo; if ( !externServiceDoc.setContent( &wmsService, false, &parseError, &errorLineNo ) ) { QgsDebugMsg( "parse error at setting content of external wms service capabilities: " + parseError + " at line " + QString::number( errorLineNo ) ); wmsService.close(); } wmsService.close(); // write WMS Service capabilities QDomElement service = externServiceDoc.firstChildElement(); msCapabilitiesElement.appendChild( service ); } QDomElement msServiceElement = soapResponseDoc.createElement( "Service" ); msCapabilitiesElement.appendChild( msServiceElement ); QDomElement capabilitiesElement = capabilitiesNodes.item( 0 ).toElement(); msCapabilitiesElement.appendChild( capabilitiesElement ); } else { //OA_MI_MS_Capabilities element QDomElement msCapabilitiesElement = soapResponseDoc.createElement( "ms:OA_MI_Service_Capabilities" ); msCapabilitiesElement.setAttribute( "service", "MS" ); msCapabilitiesElement.setAttribute( "version", "1.1" ); msCapabilitiesElement.setAttribute( "xmlns:ms", "http://www.eu-orchestra.org/services/ms" ); msCapabilitiesElement.setAttribute( "xmlns", "http://www.eu-orchestra.org/services/oas/oa_basic" ); msCapabilitiesElement.setAttribute( "xmlns:gml", "http://www.opengis.net/gml" ); msCapabilitiesElement.setAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); msCapabilitiesElement.setAttribute( "xmlns:xsd", "http://www.w3.org/2001/XMLSchema" ); soapBodyElement.appendChild( msCapabilitiesElement ); // import the orchestra common capabilities QFile common( "common.xml" ); if ( !common.open( QIODevice::ReadOnly ) ) { //throw an exception... QgsDebugMsg( "external orchestra common capabilities not found" ); } else { QDomDocument externCapDoc; QString parseError; int errorLineNo; if ( !externCapDoc.setContent( &common, false, &parseError, &errorLineNo ) ) { QgsDebugMsg( "parse error at setting content of external orchestra common capabilities: " + parseError + " at line " + QString::number( errorLineNo ) ); common.close(); } common.close(); // write common capabilities QDomElement orchestraCommon = externCapDoc.firstChildElement(); msCapabilitiesElement.appendChild( orchestraCommon ); } } QByteArray ba = soapResponseDoc.toByteArray(); setHttpResponse( &ba, "text/xml" ); } } }