📄 service.cpp
字号:
} fprintf(stream, "};\n"); } /* The SOAP Fault struct below is autogenerated by soapcpp2 (kept here for future mods) if (!mflag && !faults.empty()) { fprintf(stream, "struct SOAP_ENV__Code\n{\n"); fprintf(stream, elementformat, "_QName", "SOAP_ENV__Value"); fprintf(stream, ";\n"); fprintf(stream, pointerformat, "char", "SOAP_ENV__Node"); fprintf(stream, ";\n"); fprintf(stream, pointerformat, "char", "SOAP_ENV__Role"); fprintf(stream, ";\n};\n"); fprintf(stream, "struct SOAP_ENV__Detail\n{\n"); fprintf(stream, elementformat, "int", "__type"); fprintf(stream, ";\n"); fprintf(stream, pointerformat, "void", "fault"); fprintf(stream, ";\n"); fprintf(stream, elementformat, "_XML", "__any"); fprintf(stream, ";\n};\n"); fprintf(stream, "struct SOAP_ENV__Fault\n{\n"); fprintf(stream, elementformat, "_QName", "faultcode"); fprintf(stream, ";\n"); fprintf(stream, pointerformat, "char", "faultstring"); fprintf(stream, ";\n"); fprintf(stream, pointerformat, "char", "faultactor"); fprintf(stream, ";\n"); fprintf(stream, pointerformat, "struct SOAP_ENV__Detail", "detail"); fprintf(stream, ";\n"); fprintf(stream, pointerformat, "struct SOAP_ENV__Code", "SOAP_ENV__Code"); fprintf(stream, ";\n"); fprintf(stream, pointerformat, "char", "SOAP_ENV__Reason"); fprintf(stream, ";\n"); fprintf(stream, pointerformat, "struct SOAP_ENV__Detail", "SOAP_ENV__Detail"); fprintf(stream, ";\n};\n"); } */ for (MapOfStringToService::const_iterator service2 = services.begin(); service2 != services.end(); ++service2) if ((*service2).second) (*service2).second->generate(types);}//////////////////////////////////////////////////////////////////////////////////// Service methods//////////////////////////////////////////////////////////////////////////////////Service::Service(){ prefix = NULL; URI = NULL; name = NULL; type = NULL; transport = NULL;}void Service::generate(Types& types){ if (name) banner(name); for (vector<Operation*>::const_iterator op2 = operation.begin(); op2 != operation.end(); ++op2) { if (*op2 && (*op2)->input) { bool flag = false, anonymous = ((*op2)->style != document && (*op2)->parameterOrder != NULL); banner((*op2)->input_name); if ((*op2)->output && (*op2)->output_name) { if ((*op2)->style == document) flag = (*op2)->output->message && (*op2)->output->message->part.size() == 1; else if (!wflag) flag = (*op2)->output->message && (*op2)->output->use == encoded && (*op2)->output->message->part.size() == 1 && !(*(*op2)->output->message->part.begin()).simpleTypePtr() && !(*(*op2)->output->message->part.begin()).complexTypePtr(); if (flag && (*op2)->input->message && (*(*op2)->output->message->part.begin()).element) for (vector<wsdl__part>::const_iterator part = (*op2)->input->message->part.begin(); part != (*op2)->input->message->part.end(); ++part) if ((*part).element && !strcmp((*part).element, (*(*op2)->output->message->part.begin()).element)) flag = false; if (!flag) { fprintf(stream, "/// Operation response struct \"%s\" of service binding \"%s\" operation \"%s\"\n", (*op2)->output_name, name, (*op2)->input_name); fprintf(stream, "struct %s\n{", (*op2)->output_name); (*op2)->output->generate(types, ";", anonymous, true, false); fprintf(stream, "\n};\n"); } } fprintf(stream, "\n/// Operation \"%s\" of service binding \"%s\"\n\n/**\n\nOperation details:\n\n", (*op2)->input_name, name); if ((*op2)->documentation) text((*op2)->documentation); if ((*op2)->operation_documentation) text((*op2)->operation_documentation); if ((*op2)->input->documentation) { fprintf(stream, "Input request:\n"); text((*op2)->input->documentation); } if ((*op2)->input->ext_documentation) { fprintf(stream, "Input request:\n"); text((*op2)->input->ext_documentation); } if ((*op2)->output) { if ((*op2)->output->documentation) { fprintf(stream, "Output response:\n"); text((*op2)->output->documentation); } if ((*op2)->output->ext_documentation) { fprintf(stream, "Output response:\n"); text((*op2)->output->ext_documentation); } } if ((*op2)->output) { if ((*op2)->output->content) { fprintf(stream, " - Response has MIME content"); if ((*op2)->output->content->type) { fprintf(stream, " type=\""); text((*op2)->output->content->type); fprintf(stream, "\""); } fprintf(stream, "\n TODO: this form of MIME content response is not automatically handled.\n Use one-way request and implement code to parse response.\n"); } } else fprintf(stream, " - One-way message\n"); if ((*op2)->style == document) fprintf(stream, " - SOAP document/literal style\n"); else { if ((*op2)->input->use == literal) fprintf(stream, " - SOAP RPC literal style\n"); else if ((*op2)->input->encodingStyle) fprintf(stream, " - SOAP RPC encodingStyle=\"%s\"\n", (*op2)->input->encodingStyle); else fprintf(stream, " - SOAP RPC encoded\n"); } if ((*op2)->output) { if ((*op2)->input->use != (*op2)->output->use) { if ((*op2)->output->use == literal) fprintf(stream, " - SOAP RPC literal response\n"); else if ((*op2)->output->encodingStyle) fprintf(stream, " - SOAP RPC response encodingStyle=\"%s\"\n", (*op2)->output->encodingStyle); else fprintf(stream, " - SOAP RPC encoded response\n"); } } if ((*op2)->soapAction) { if (*(*op2)->soapAction) fprintf(stream, " - SOAP action=\"%s\"\n", (*op2)->soapAction); } for (vector<Message*>::const_iterator message = (*op2)->fault.begin(); message != (*op2)->fault.end(); ++message) { if ((*message)->message && (*message)->message->name) fprintf(stream, " - SOAP Fault: %s\n", (*message)->name); } if (!(*op2)->input->header.empty()) fprintf(stream, " - Request message has mandatory header part(s):\n"); for (vector<soap__header>::const_iterator inputheader = (*op2)->input->header.begin(); inputheader != (*op2)->input->header.end(); ++inputheader) { if ((*inputheader).part) { if ((*inputheader).use == encoded && (*inputheader).namespace_) fprintf(stream, " - %s\n", types.aname(NULL, (*inputheader).namespace_, (*inputheader).part)); else if ((*inputheader).partPtr() && (*inputheader).partPtr()->element) fprintf(stream, " - %s\n", types.aname(NULL, NULL, (*inputheader).partPtr()->element)); } } if ((*op2)->input->multipartRelated) { int k = 2; fprintf(stream, " - Request message has MIME multipart/related attachments:\n"); for (vector<mime__part>::const_iterator part = (*op2)->input->multipartRelated->part.begin(); part != (*op2)->input->multipartRelated->part.end(); ++part) { if ((*part).soap__body_) { fprintf(stream, " -# MIME attachment with SOAP Body and mandatory header part(s):\n"); for (vector<soap__header>::const_iterator header = (*part).soap__header_.begin(); header != (*part).soap__header_.end(); ++header) { if ((*header).part) { if ((*header).use == encoded && (*header).namespace_) fprintf(stream, " - %s\n", types.aname(NULL, (*header).namespace_, (*header).part)); else if ((*header).partPtr() && (*header).partPtr()->element) fprintf(stream, " - %s\n", types.aname(NULL, NULL, (*header).partPtr()->element)); } } } else { fprintf(stream, " -# MIME attachment %d:\n", k++); for (vector<mime__content>::const_iterator content = (*part).content.begin(); content != (*part).content.end(); ++content) { fprintf(stream, " -"); if ((*content).part) { fprintf(stream, " part=\""); text((*content).part); fprintf(stream, "\""); } if ((*content).type) { fprintf(stream, " type=\""); text((*content).type); fprintf(stream, "\""); } fprintf(stream, "\n"); } } } } if ((*op2)->input->layout) fprintf(stream, " - Request message has DIME attachments in compliance with %s\n", (*op2)->input->layout); if ((*op2)->output) { if (!(*op2)->output->header.empty()) fprintf(stream, " - Response message has mandatory header part(s):\n"); for (vector<soap__header>::const_iterator outputheader = (*op2)->output->header.begin(); outputheader != (*op2)->output->header.end(); ++outputheader) { if ((*outputheader).part) { if ((*outputheader).use == encoded && (*outputheader).namespace_) fprintf(stream, " - %s\n", types.aname(NULL, (*outputheader).namespace_, (*outputheader).part)); else if ((*outputheader).partPtr() && (*outputheader).partPtr()->element) fprintf(stream, " - %s\n", types.aname(NULL, NULL, (*outputheader).partPtr()->element)); } } } if ((*op2)->output && (*op2)->output_name && (*op2)->output->multipartRelated) { int k = 2; fprintf(stream, " - Response message has MIME multipart/related attachments\n"); for (vector<mime__part>::const_iterator part = (*op2)->output->multipartRelated->part.begin(); part != (*op2)->output->multipartRelated->part.end(); ++part) { if ((*part).soap__body_) { fprintf(stream, " -# MIME attachment with SOAP Body and mandatory header part(s):\n"); for (vector<soap__header>::const_iterator header = (*part).soap__header_.begin(); header != (*part).soap__header_.end(); ++header) { if ((*header).part) { if ((*header).use == encoded && (*header).namespace_) fprintf(stream, " - %s\n", types.aname(NULL, (*header).namespace_, (*header).part)); else if ((*header).partPtr() && (*header).partPtr()->element) fprintf(stream, " - %s\n", types.aname(NULL, NULL, (*header).partPtr()->element)); } } } else { fprintf(stream, " -# MIME attachment %d:\n", k++); for (vector<mime__content>::const_iterator content = (*part).content.begin(); content != (*part).content.end(); ++content) { fprintf(stream, " -"); if ((*content).part) { fprintf(stream, " part=\""); text((*content).part); fprintf(stream, "\""); } if ((*content).type) { fprintf(stream, " type=\""); text((*content).type); fprintf(stream, "\""); } fprintf(stream, "\n"); } } } } if ((*op2)->output && (*op2)->output_name && (*op2)->output->layout) fprintf(stream, " - Response message has DIME attachments in compliance with %s\n", (*op2)->output->layout); fprintf(stream, "\nC stub function (defined in soapClient.c[pp] after running soapcpp2):\n@code\n int soap_call_%s(struct soap *soap,\n NULL, // char *endpoint = NULL selects default endpoint for this operation\n NULL, // char *action = NULL selects default action for this operation\n // request parameters:", (*op2)->input_name); (*op2)->input->generate(types, ",", false, false, false); fprintf(stream, "\n // response parameters:"); if ((*op2)->output && (*op2)->output_name) { if (flag) { if ((*op2)->style == document) { // Shortcut: do not generate wrapper struct (*op2)->output->generate(types, "", false, false, true); } else if ((*(*op2)->output->message->part.begin()).name) { fprintf(stream, "\n"); fprintf(stream, anonymous ? anonformat : paraformat, types.tname(NULL, NULL, (*(*op2)->output->message->part.begin()).type), cflag ? "*" : "&", types.aname(NULL, NULL, (*(*op2)->output->message->part.begin()).name), ""); } } else fprintf(stream, "\n struct %s%s", (*op2)->output_name, cflag ? "*" : "&"); } fprintf(stream, "\n );\n@endcode\n\n"); if (!cflag) { fprintf(stream, "C++ proxy class (defined in soap%sProxy.h):\n", name); fprintf(stream, " class %s;\n\n", name); } fprintf(stream, "*/\n\n"); (*op2)->generate(types);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -