void CEspBinding::getNavigationData(IEspContext &context, IPropertyTree & data) { IEspWsdlSections *wsdl = dynamic_cast<IEspWsdlSections *>(this); if (wsdl) { StringBuffer serviceName, params; wsdl->getServiceName(serviceName); if (!getUrlParams(context.queryRequestParameters(), params)) { if (context.getClientVersion()>0) params.appendf("%cver_=%g", params.length()?'&':'?', context.getClientVersion()); } StringBuffer encodedparams; if (params.length()) encodeUtf8XML(params.str(), encodedparams, 0); if (params.length()) params.setCharAt(0,'&'); //the entire params string will follow the initial param: "?form" VStringBuffer folderpath("Folder[@name='%s']", serviceName.str()); IPropertyTree *folder = data.queryPropTree(folderpath.str()); if(!folder) { folder=createPTree("Folder"); folder->addProp("@name", serviceName.str()); folder->addProp("@info", serviceName.str()); folder->addProp("@urlParams", encodedparams); if (showSchemaLinks()) folder->addProp("@showSchemaLinks", "true"); folder->addPropBool("@isDynamicBinding", isDynamicBinding()); folder->addPropBool("@isBound", isBound()); data.addPropTree("Folder", folder); } MethodInfoArray methods; wsdl->getQualifiedNames(context, methods); ForEachItemIn(idx, methods) { CMethodInfo &method = methods.item(idx); IPropertyTree *link=createPTree("Link"); link->addProp("@name", method.m_label.str()); link->addProp("@info", method.m_label.str()); StringBuffer path; path.appendf("../%s/%s?form%s", serviceName.str(), method.m_label.str(),params.str()); link->addProp("@path", path.str()); folder->addPropTree("Link", link); } }
static void serializeAttributes(StringBuffer& outbuf, IProperties* attrs) { if (attrs) { Owned<IPropertyIterator> it = attrs->getIterator(); for (it->first(); it->isValid(); it->next()) { const char* k = it->getPropKey(); const char* v = attrs->queryProp(k); outbuf.append(' ').append(k).append("=\""); encodeUtf8XML(v,outbuf); outbuf.append('"'); } } }
virtual void endNode(const char *tag, unsigned length, const void *value, bool binary, offset_t endOffset) { if (datasetLevel) { if (length) { if (binary) JBASE64_Encode(value, length, buffer); else encodeUtf8XML((const char *)value, buffer); } buffer.append("</").append(tag).append('>'); if (streq("Dataset", tag) || streq("Exception", tag)) datasetLevel--; } }
virtual void endNode(const char *tag, unsigned length, const void *value, bool binary, offset_t endOffset) { if (resultlevel) { if (length) { if (binary) JBASE64_Encode(value, length, buffer); else encodeUtf8XML((const char *)value, buffer); } buffer.append("</").append(tag).append('>'); bool *pIsResultTag = resultChildTags.getValue(tag); if (pIsResultTag && *pIsResultTag) resultlevel--; } }
virtual void newAttribute(const char *name, const char *value) { if (resultlevel) { if (streq(name, "@xmlns")) { if (!(flags & WWV_INCL_NAMESPACES)) return; if (resultlevel==1) hasXmlns=true; } if (resultlevel==1 && streq(name, "@name")) dsname.set(value).toLowerCase().replace(' ', '_');; buffer.append(' ').append(name+1).append("=\""); encodeUtf8XML(value, buffer); buffer.append('\"'); } }
inline StringBuffer& operator<<(StringBuffer& buf, const XML& f) { encodeUtf8XML(f.s,buf); return buf; }