|
void
XMLMessageBuilder::Build(HalfStructuredMessageSmartPtr
psmsg,
ServiceLayerMessage&
strMsg)
{
if (psmsg == NULL || psmsg->m_msgHeader ==
NULL)
return;
strMsg.erase(strMsg.begin(), strMsg.end());
// 创建空的DOM树,树根为元素<msg>
DOMDocumentPair docPair = \
XMLDOMDocumentCreator::createDOMDocument( \
XMLRootElement_msg::name());
if (docPair.first == NULL || docPair.second == NULL)
return;
XMLElement *pRootElem = docPair.second; //
指向根元素<msg>
// 检查消息类型
MessageType
curMsgType(psmsg->m_msgHeader->GetMessageType());
if (curMsgType != MESSAGE_TYPE_REQUEST
&&
curMsgType != MESSAGE_TYPE_ACK
&&
curMsgType != MESSAGE_TYPE_NOTIFY
&&
curMsgType != MESSAGE_TYPE_BROADCAST)
return;
//
向DOM树根添加子元素<Header>
XMLElement *pHeaderElement = \
pRootElem->append_element(XMLSubElement_Header::name());
if (pHeaderElement == NULL) return;
// 添加消息头的内容
XMLLeaf *pLeaf = NULL;
pLeaf =
pHeaderElement->append_leaf(XMLSubElement_type::name(),
\
curMsgType.c_str());
if (pLeaf == NULL) return;
pLeaf =
pHeaderElement->append_leaf(XMLSubElement_source::name(),
\
Convert(psmsg->m_msgHeader->GetSource()).c_str());
if (pLeaf == NULL) return;
pLeaf =
pHeaderElement->append_leaf(XMLSubElement_dest::name(),
\
Convert(psmsg->m_msgHeader->GetDestination()).c_str());
if (pLeaf == NULL) return;
pLeaf =
pHeaderElement->append_leaf(XMLSubElement_sn::name(),
\
Convert(psmsg->m_msgHeader->GetSn()).c_str());
if (pLeaf == NULL) return;
pLeaf =
pHeaderElement->append_leaf(XMLSubElement_id::name(),
\
psmsg->m_msgHeader->GetMessageID().c_str());
if (pLeaf == NULL) return;
// 导入消息体(DOM子树)
if (!(psmsg->m_msgBody.IsEmpty()))
{
XERCES_CPP_NAMESPACE::DOMNode *pNode = \
pRootElem->import_node(psmsg->m_msgBody.GetDummyRootElement());
if (pNode == NULL) return;
}
// 将整棵DOM树串化
m_serializer.convert_to_string(pRootElem, strMsg);
}
|