⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 service.cpp

📁 linux下简单对象应用协议的开发库
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  }  t = types.deftypemap["SOAP_ENV__Detail"];  if (t && *t)  { banner("Custom SOAP Detail");    types.format(t);  }  else if (!jflag && !faults.empty())  { SetOfString fault_elements;    banner("SOAP Fault Detail");    fprintf(stream, "/**\n\nThe SOAP Fault is part of the gSOAP context and its content is accessed\nthrough the soap.fault->detail variable (SOAP 1.1) or the\nsoap.fault->SOAP_ENV__Detail variable (SOAP 1.2).\nUse option -j to omit.\n\n*/\n");    fprintf(stream, "struct SOAP_ENV__Detail\n{\n");    types.modify("SOAP_ENV__Detail");    fprintf(stream, elementformat, "int", "__type");    fprintf(stream, ";\t///< set to SOAP_TYPE_X for a serializable type X\n");    fprintf(stream, pointerformat, "void", "fault");    fprintf(stream, ";\t///< points to serializable object X or NULL\n");    if (dflag)    { fprintf(stream, pointerformat, "xsd__anyType", "__any");      fprintf(stream, ";\t///< Catch any element content in DOM.\n");    }    else    { fprintf(stream, elementformat, "_XML", "__any");      fprintf(stream, ";\t///< Catch any element content in XML string.\n");    }    for (MapOfStringToMessage::const_iterator fault = faults.begin(); fault != faults.end(); ++fault)    { if ((*fault).second->URI && !types.uris[(*fault).second->URI])        fprintf(stream, schemaformat, types.nsprefix(NULL, (*fault).second->URI), "namespace", (*fault).second->URI);      comment("Fault", (*fault).first, "WSDL", (*fault).second->ext_documentation);      comment("Fault", (*fault).first, "SOAP", (*fault).second->documentation);      if ((*fault).second->use == literal)      { for (vector<wsdl__part>::const_iterator part = (*fault).second->message->part.begin(); part != (*fault).second->message->part.end(); ++part)        { if ((*part).elementPtr())          { if (fault_elements.find((*part).element) == fault_elements.end())            { if ((*part).elementPtr()->type)                fprintf(stream, elementformat, types.pname(true, NULL, NULL, (*part).elementPtr()->type), types.aname(NULL, (*fault).second->URI, (*part).element));              else                fprintf(stream, elementformat, types.pname(true, "_", NULL, (*part).element), types.aname(NULL, (*fault).second->URI, (*part).element));              fprintf(stream, ";\n");              fault_elements.insert((*part).element);            }            fprintf(stream, "///< SOAP Fault element \"%s\" part \"%s\"\n", (*part).element?(*part).element:"", (*part).name?(*part).name:"");          }          else if ((*part).name && (*part).type)          { if (fault_elements.find((*part).name) == fault_elements.end())            { fprintf(stream, elementformat, types.pname(true, NULL, NULL, (*part).type), types.aname("_", (*fault).second->URI, (*part).name));              fprintf(stream, ";\n");              fault_elements.insert((*part).name);            }            fprintf(stream, "///< SOAP Fault type \"%s\" part \"%s\"\n", (*part).type, (*part).name);          }          else            fprintf(stream, "// Unknown SOAP Fault element \"%s\" part \"%s\"\n", (*fault).second->message->name, (*part).name?(*part).name:"");        }      }      else      { fprintf(stream, pointerformat, (*fault).first, types.aname(NULL, (*fault).second->URI, (*fault).second->message->name));        fprintf(stream, ";\t///< SOAP Fault detail message \"%s\":%s\n", (*fault).second->URI, (*fault).second->message->name);      }    }    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)->use == literal)        { for (vector<wsdl__part>::const_iterator part = (*message)->message->part.begin(); part != (*message)->message->part.end(); ++part)          { if ((*part).element)              fprintf(stream, "  - SOAP Fault: %s (literal)\n", (*part).element);            else if ((*part).name && (*part).type)              fprintf(stream, "  - SOAP Fault: %s (literal)\n", (*part).name);          }        }        else 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -