Poco::AutoPtr<Poco::XML::Document> Twitter::invoke(const std::string& httpMethod, const std::string& twitterMethod, Poco::Net::HTMLForm& form) { // Create the request URI. // We use the XML version of the Twitter API. Poco::URI uri(_uri + twitterMethod + ".xml"); std::string path(uri.getPath()); Poco::Net::HTTPClientSession session(uri.getHost(), uri.getPort()); Poco::Net::HTTPRequest req(httpMethod, path, Poco::Net::HTTPMessage::HTTP_1_1); // Add username and password (HTTP basic authentication) to the request. Poco::Net::HTTPBasicCredentials cred(_username, _password); cred.authenticate(req); // Send the request. form.prepareSubmit(req); std::ostream& ostr = session.sendRequest(req); form.write(ostr); // Receive the response. Poco::Net::HTTPResponse res; std::istream& rs = session.receiveResponse(res); // Create a DOM document from the response. Poco::XML::DOMParser parser; parser.setFeature(Poco::XML::DOMParser::FEATURE_FILTER_WHITESPACE, true); parser.setFeature(Poco::XML::XMLReader::FEATURE_NAMESPACES, false); Poco::XML::InputSource source(rs); Poco::AutoPtr<Poco::XML::Document> pDoc = parser.parse(&source); // If everything went fine, return the XML document. // Otherwise look for an error message in the XML document. if (res.getStatus() == Poco::Net::HTTPResponse::HTTP_OK) { return pDoc; } else { std::string error(res.getReason()); Poco::AutoPtr<Poco::XML::NodeList> pList = pDoc->getElementsByTagName("error"); if (pList->length() > 0) { error += ": "; error += pList->item(0)->innerText(); } throw Poco::ApplicationException("Twitter Error", error); } }
void XMLConfiguration::load(Poco::XML::InputSource* pInputSource) { poco_check_ptr (pInputSource); Poco::XML::DOMParser parser; parser.setFeature(Poco::XML::XMLReader::FEATURE_NAMESPACES, false); parser.setFeature(Poco::XML::DOMParser::FEATURE_FILTER_WHITESPACE, true); Poco::XML::AutoPtr<Poco::XML::Document> pDoc = parser.parse(pInputSource); load(pDoc); }
void ExtensionPointService::handleExtensions(Bundle::ConstPtr pBundle, std::istream& istr, GenericHandler handler, Direction dir) { Poco::XML::DOMParser parser; parser.setFeature(Poco::XML::XMLReader::FEATURE_NAMESPACES, false); parser.setFeature(Poco::XML::DOMParser::FEATURE_FILTER_WHITESPACE, true); Poco::XML::InputSource source(istr); AutoPtr<Document> pDoc(parser.parse(&source)); Node* pRoot = pDoc->firstChild(); while (pRoot && pRoot->nodeName() != EXTENSIONS_ELEM) { pRoot = pRoot->nextSibling(); } if (pRoot) { Node* pNode = (dir == DIR_FORWARD ? pRoot->firstChild() : pRoot->lastChild()); while (pNode) { if (pNode->nodeType() == Node::ELEMENT_NODE) { if (pNode->nodeName() == EXTENSION_ELEM) { Element* pElem = static_cast<Element*>(pNode); const std::string& id = pElem->getAttribute(POINT_ATTR); if (!id.empty()) { (this->*handler)(pBundle, id, pElem); } else { _logger.error(std::string("No point attribute found in extension element of bundle ") + pBundle->symbolicName()); } } else { _logger.warning(std::string("Unsupported element '") + pNode->nodeName() + "' found in " + EXTENSIONS_XML + " of bundle " + pBundle->symbolicName()); } } pNode = (dir == DIR_FORWARD ? pNode->nextSibling() : pNode->previousSibling()); } } else throw Poco::NotFoundException("No extensions element found"); }