本文整理汇总了C++中ObjectRef::SerializeDom方法的典型用法代码示例。如果您正苦于以下问题:C++ ObjectRef::SerializeDom方法的具体用法?C++ ObjectRef::SerializeDom怎么用?C++ ObjectRef::SerializeDom使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ObjectRef
的用法示例。
在下文中一共展示了ObjectRef::SerializeDom方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: svc
int HttpServer::svc(void)
{
char buf[2048];
buf[2047] = '\0'; // security
ACE_Time_Value timeout;
timeout.sec(5);
ssize_t size = peer().recv(buf, 2040, &timeout);
if (size > 5)
{
try
{
int startUrlOffset = 5; // get rid of "GET /" from Http request, so skip 5 chars
char* stopUrl = ACE_OS::strstr(buf+startUrlOffset, " HTTP"); // detect location of post-URL trailing stuff
if(!stopUrl)
{
throw (CStdString("Malformed http request")); ;
}
*stopUrl = '\0'; // Remove post-URL trailing stuff
CStdString url(buf+startUrlOffset);
int queryOffset = url.Find("?");
if (queryOffset > 0)
{
// Strip beginning of URL in case the command is received as an URL "query" of the form:
// http://hostname/service/command?type=ping
url = url.Right(url.size() - queryOffset - 1);
}
CStdString className = UrlSerializer::FindClass(url);
ObjectRef objRef = ObjectFactory::GetSingleton()->NewInstance(className);
if (objRef.get())
{
objRef->DeSerializeUrl(url);
ObjectRef response = objRef->Process();
if(response.get() == NULL)
{
throw (CStdString("Command does not return a response:") + className);
}
else
{
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(XStr("Core").unicodeForm());
XERCES_CPP_NAMESPACE::DOMDocument* myDoc;
myDoc = impl->createDocument(
0, // root element namespace URI.
XStr("response").unicodeForm(), // root element name
0); // document type object (DTD).
response->SerializeDom(myDoc);
CStdString pingResponse = DomSerializer::DomNodeToString(myDoc);
CStdString httpOk("HTTP/1.0 200 OK\r\nContent-type: text/xml\r\n\r\n");
peer().send(httpOk, httpOk.GetLength(), MSG_NOSIGNAL);
peer().send(pingResponse, pingResponse.GetLength(), MSG_NOSIGNAL);
myDoc->release();
}
}
else
{
throw (CStdString("Command not found:") + className); ;
}
}
catch (CStdString &e)
{
CStdString error("HTTP/1.0 404 not found\r\nContent-type: text/html\r\n\r\nError\r\n");
error = error + e + "\r\n";
peer().send(error, error.GetLength(), MSG_NOSIGNAL);
}
catch(const XMLException& e)
{
CStdString error("HTTP/1.0 404 not found\r\nContent-type: text/html\r\n\r\nXML Error\r\n");
peer().send(error, error.GetLength(), MSG_NOSIGNAL);
}
}
else
{
CStdString notFound("HTTP/1.0 404 not found\r\nContent-type: text/html\r\n\r\nNot found\r\n");
peer().send(notFound, notFound.GetLength(), MSG_NOSIGNAL);
}
return 0;
}