From: Asbjorn M. <ste...@us...> - 2002-05-31 15:55:07
|
Update of /cvsroot/epp-rtk/name-rtk-addon/c++/src/data In directory usw-pr-cvs1:/tmp/cvs-serv1194/src/data Modified Files: epp_persRegXMLbase.h epp_persRegXMLbase.cc Log Message: Added function parsePersRegCreateError, parsing the persreg:creErrData element and putting it onto the epp_PersRegCreErrDataType class. Index: epp_persRegXMLbase.h =================================================================== RCS file: /cvsroot/epp-rtk/name-rtk-addon/c++/src/data/epp_persRegXMLbase.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** epp_persRegXMLbase.h 26 Apr 2002 09:49:14 -0000 1.1 --- epp_persRegXMLbase.h 31 May 2002 15:55:02 -0000 1.2 *************** *** 36,39 **** --- 36,40 ---- #include <epprtk/data/epp_eppXMLbase.h> #include "epp_persRegdata.h" + #include "epp_PersRegCreErrDataType.h" *************** *** 45,49 **** */ void setCommandSchemaAttributes(eppobject::epp::EPP_output & outputobject); ! }} #endif --- 46,57 ---- */ void setCommandSchemaAttributes(eppobject::epp::EPP_output & outputobject); ! ! /** Function that takes the persReg create error response extension ! * eppobject::epp#epp_xml_string_ref, parses it, and puts elements into ! * the corresponding epp_PersRegCreErrDataType object ! * @param creError The extension response xml string ! * @return The error extension object ! */ ! epp_PersRegCreErrDataType parsePersRegCreateError(const eppobject::epp::epp_xml_string_ref & creError); }} #endif Index: epp_persRegXMLbase.cc =================================================================== RCS file: /cvsroot/epp-rtk/name-rtk-addon/c++/src/data/epp_persRegXMLbase.cc,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** epp_persRegXMLbase.cc 26 Apr 2002 09:49:14 -0000 1.1 --- epp_persRegXMLbase.cc 31 May 2002 15:55:03 -0000 1.2 *************** *** 35,39 **** --- 35,41 ---- #include <epprtk/data/epp_XMLException.h> #include "epp_persRegXMLbase.h" + #include <domtools/dom_wrapper.h> + using namespace domtools; using namespace eppobject::persReg; using namespace eppobject::epp; *************** *** 44,46 **** --- 46,102 ---- outputobject.putAttribute("xmlns:persReg","http://www.nic.name/epp/persReg-1.0"); outputobject.putAttribute("xsi:schemaLocation","http://www.nic.name/epp/persReg-1.0 persReg-1.0.xsd"); + }; + + epp_PersRegCreErrDataType eppobject::persReg::parsePersRegCreateError(const eppobject::epp::epp_xml_string_ref & creError) + { + epp_PersRegCreErrDataType errEl; + + if(creError == NULL || *creError == "") { + return errEl; + } + + string xml2parse = "<extension xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + + *creError + "</extension>"; + + dom_ptr doc = createDOMDocument(xml2parse); + if(doc->isNull()) { + throw epp_XMLException(__FILE__, __LINE__, "Parsed extension string returned an empty document"); + return errEl; + } + + dom_ptr docChild = dom_ptr(doc->getTag("extension")); + if(docChild->isNull()) { + throw epp_XMLException(__FILE__, __LINE__, "Document node has no children"); + } + + dom_ptr extChild = dom_ptr(docChild->getFirstChildElement()); + if(extChild->isNull()) { + throw epp_XMLException(__FILE__, __LINE__, "Extension element is empty"); + } + + if(extChild->getNodeName() != "persReg:creErrData") { + throw epp_XMLException(__FILE__, __LINE__, "Unable to find creErrData-element"); + } + + dom_ptr creMsgNode = dom_ptr(extChild->getFirstChildElement()); + if(!creMsgNode->isNull() && creMsgNode->getNodeName() == "persReg:msg") { + errEl.m_msg.ref(new epp_PersRegMsgType()); + + string code = creMsgNode->getAttribute("code"); + // cout << "code: " << code << endl; + + if(code == "1") errEl.m_msg->m_code.ref(new epp_PersRegCreErrCodeType(CORRESPONDING_SERVICE_EXISTS)); + else if(code == "2") errEl.m_msg->m_code.ref(new epp_PersRegCreErrCodeType(CONFLICTING_DEF_REG_EXISTS)); + else throw epp_XMLException(__FILE__, __LINE__, "Empty or unknown code-attribute"); + + string lang = creMsgNode->getAttribute("lang"); + // cout << "lang: " << lang << endl; + if(!lang.empty()) errEl.m_msg->m_lang.ref(new epp_string(lang)); + + errEl.m_msg->m_value.ref(new epp_string(creMsgNode->getNodeData())); + // cout << "value: " << *errEl.m_msg->m_value << endl; + + } + + return errEl; }; |