| 2753 | /************************************************************************/ |
| 2754 | |
| 2755 | int msWCSException20(mapObj *map, const char *exceptionCode, |
| 2756 | const char *locator, const char *version) |
| 2757 | { |
| 2758 | int size = 0; |
| 2759 | char *errorString = NULL; |
| 2760 | char *errorMessage = NULL; |
| 2761 | char *schemasLocation = NULL; |
| 2762 | const char * encoding; |
| 2763 | char *xsi_schemaLocation = NULL; |
| 2764 | char version_string[OWS_VERSION_MAXLEN]; |
| 2765 | |
| 2766 | xmlDocPtr psDoc = NULL; |
| 2767 | xmlNodePtr psRootNode = NULL; |
| 2768 | xmlNodePtr psMainNode = NULL; |
| 2769 | xmlNodePtr psNode = NULL; |
| 2770 | xmlNsPtr psNsOws = NULL; |
| 2771 | xmlNsPtr psNsXsi = NULL; |
| 2772 | xmlChar *buffer = NULL; |
| 2773 | |
| 2774 | encoding = msOWSLookupMetadata(&(map->web.metadata), "CO", "encoding"); |
| 2775 | errorString = msGetErrorString("\n"); |
| 2776 | errorMessage = msEncodeHTMLEntities(errorString); |
| 2777 | schemasLocation = msEncodeHTMLEntities(msOWSGetSchemasLocation(map)); |
| 2778 | |
| 2779 | psDoc = xmlNewDoc(BAD_CAST "1.0"); |
| 2780 | |
| 2781 | psRootNode = xmlNewNode(NULL, BAD_CAST "ExceptionReport"); |
| 2782 | psNsOws = xmlNewNs(psRootNode, BAD_CAST MS_OWSCOMMON_OWS_20_NAMESPACE_URI, |
| 2783 | BAD_CAST MS_OWSCOMMON_OWS_NAMESPACE_PREFIX); |
| 2784 | xmlSetNs(psRootNode, psNsOws); |
| 2785 | |
| 2786 | psNsXsi = xmlNewNs(psRootNode, BAD_CAST MS_OWSCOMMON_W3C_XSI_NAMESPACE_URI, BAD_CAST MS_OWSCOMMON_W3C_XSI_NAMESPACE_PREFIX); |
| 2787 | |
| 2788 | /* add attributes to root element */ |
| 2789 | xmlNewProp(psRootNode, BAD_CAST "version", BAD_CAST version); |
| 2790 | xmlNewProp(psRootNode, BAD_CAST "xml:lang", BAD_CAST msOWSGetLanguage(map, "exception")); |
| 2791 | |
| 2792 | /* get 2 digits version string: '2.0' */ |
| 2793 | msOWSGetVersionString(OWS_2_0_0, version_string); |
| 2794 | version_string[3]= '\0'; |
| 2795 | |
| 2796 | xsi_schemaLocation = msStrdup((char *)psNsOws->href); |
| 2797 | xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, " "); |
| 2798 | xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, (char *)schemasLocation); |
| 2799 | xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, "/ows/"); |
| 2800 | xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, version_string); |
| 2801 | xsi_schemaLocation = msStringConcatenate(xsi_schemaLocation, "/owsExceptionReport.xsd"); |
| 2802 | |
| 2803 | /* add namespace'd attributes to root element */ |
| 2804 | xmlNewNsProp(psRootNode, psNsXsi, BAD_CAST "schemaLocation", BAD_CAST xsi_schemaLocation); |
| 2805 | |
| 2806 | /* add child element */ |
| 2807 | psMainNode = xmlNewChild(psRootNode, NULL, BAD_CAST "Exception", NULL); |
| 2808 | |
| 2809 | /* add attributes to child */ |
| 2810 | xmlNewProp(psMainNode, BAD_CAST "exceptionCode", BAD_CAST exceptionCode); |
| 2811 | |
| 2812 | if (locator != NULL) |
no test coverage detected