void KDSoapServerSocket::makeCall(KDSoapServerObjectInterface* serverObjectInterface, const KDSoapMessage &requestMsg, KDSoapMessage& replyMsg, const KDSoapHeaders& requestHeaders, const QByteArray& soapAction, const QString& path) { Q_ASSERT(serverObjectInterface); //const QString method = requestMsg.name(); if (requestMsg.isFault()) { // Can this happen? Getting a fault as a request !? Doesn't make sense... // reply with a fault, but we don't even know what main element name to use // Oh well, just use the incoming fault :-) replyMsg = requestMsg; handleError(replyMsg, "Client.Data", QString::fromLatin1("Request was a fault")); } else { // Call method on m_serverObject serverObjectInterface->setRequestHeaders(requestHeaders, soapAction); KDSoapServer* server = m_owner->server(); if (path != server->path()) { serverObjectInterface->processRequestWithPath(requestMsg, replyMsg, soapAction, path); } else { serverObjectInterface->processRequest(requestMsg, replyMsg, soapAction); } if (serverObjectInterface->hasFault()) { //qDebug() << "Got fault!"; replyMsg.setFault(true); serverObjectInterface->storeFaultAttributes(replyMsg); } } }
void KDSoapServerSocket::handleError(KDSoapMessage &replyMsg, const char *errorCode, const QString &error) { qWarning("%s", qPrintable(error)); replyMsg.setFault(true); replyMsg.addArgument(QString::fromLatin1("faultcode"), QString::fromLatin1(errorCode)); replyMsg.addArgument(QString::fromLatin1("faultstring"), error); }
void KDSoapServerObjectInterface::processRequest(const KDSoapMessage &request, KDSoapMessage& response, const QByteArray& soapAction) { const QString method = request.name(); qDebug() << "Slot not found:" << method << "[soapAction =" << soapAction << "]" /* << "in" << metaObject()->className()*/; response.setFault(true); response.addArgument(QString::fromLatin1("faultcode"), QString::fromLatin1("Server.MethodNotFound")); response.addArgument(QString::fromLatin1("faultstring"), QString::fromLatin1("%1 not found").arg(method)); }
void KDSoapServerObjectInterface::processRequestWithPath(const KDSoapMessage &request, KDSoapMessage &response, const QByteArray &soapAction, const QString &path) { Q_UNUSED(soapAction); const QString method = request.name(); qWarning("Invalid path: \"%s\"", qPrintable(path)); //qWarning() << "Invalid path:" << path << "[method =" << method << "; soapAction =" << soapAction << "]" /* << "in" << metaObject()->className()*/; response.setFault(true); response.addArgument(QString::fromLatin1("faultcode"), QString::fromLatin1("Client.Data")); response.addArgument(QString::fromLatin1("faultstring"), QString::fromLatin1("Method %1 not found in path %2").arg(method, path)); }