- DOMElement* rootElement = NULL;
- StatusResponseType* response = dynamic_cast<StatusResponseType*>(xmlObject);
- if (response) {
+ bool detachOnFailure = false;
+ DOMElement* rootElement = nullptr;
+
+ // Check for a naked message.
+ SignableObject* msg = dynamic_cast<SignableObject*>(xmlObject);
+ if (msg) {
+ // Wrap it in a SOAP envelope and point xmlObject at that.
+ detachOnFailure = true;
+ Envelope* env = EnvelopeBuilder::buildEnvelope();
+ Body* body = BodyBuilder::buildBody();
+ env->setBody(body);
+ body->getUnknownXMLObjects().push_back(msg);
+ xmlObject = env;
+ }
+
+ Envelope* env = dynamic_cast<Envelope*>(xmlObject);
+ if (env) {
+ if (!msg) {
+ msg = (env->getBody() && env->getBody()->hasChildren()) ?
+ dynamic_cast<SignableObject*>(env->getBody()->getUnknownXMLObjects().front()) : nullptr;
+ }