瀏覽代碼

HPCC-17346 DESDL Enable JSON req/resp samples

- Adds JSON Request sample link conditionally (service and method level)
- Adds espctx option flag to declare if json req samples are supported
- Defers to httpbinding onGetRespSampleJson
- Ensures esdl_binding getschema overrides base class implementation

Signed-off-by: Rodrigo Pastrana <rodrigo.pastrana@lexisnexis.com>
Rodrigo Pastrana 8 年之前
父節點
當前提交
9160c8c574

+ 14 - 0
esp/bindings/http/platform/httpbinding.cpp

@@ -560,6 +560,7 @@ int EspHttpBinding::onGet(CHttpRequest* request, CHttpResponse* response)
         case sub_serv_reqsamplexml:
         case sub_serv_respsamplexml:
         case sub_serv_respsamplejson:
+        case sub_serv_reqsamplejson:
             context.setClientVersion(atof(m_defaultSvcVersion));
 
         default:
@@ -609,6 +610,8 @@ int EspHttpBinding::onGet(CHttpRequest* request, CHttpResponse* response)
             return onGetRespSampleXml(context, request, response, serviceName.str(), methodName.str());
         case sub_serv_respsamplejson:
             return onGetRespSampleJson(context, request, response, serviceName.str(), methodName.str());
+        case sub_serv_reqsamplejson:
+            return onGetReqSampleJson(context, request, response, serviceName.str(), methodName.str());
         case sub_serv_query:
             return onGetQuery(context, request, response, serviceName.str(), methodName.str());
         case sub_serv_file_upload:
@@ -1519,6 +1522,13 @@ int EspHttpBinding::onGetRespSampleXml(IEspContext &ctx, CHttpRequest* request,
     return 0;
 }
 
+
+int EspHttpBinding::onGetReqSampleJson(IEspContext &ctx, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)
+{
+    generateSampleJson(true, ctx, request, response, serv, method);
+    return 0;
+}
+
 int EspHttpBinding::onGetRespSampleJson(IEspContext &ctx, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)
 {
     generateSampleJson(false, ctx, request, response, serv, method);
@@ -1782,6 +1792,10 @@ int EspHttpBinding::onGetIndex(IEspContext &context, CHttpRequest* request,  CHt
         list = (CHtmlList *)page.appendContent(new CHtmlList);
         list->appendContent(new CHtmlLink("XML Requests", wsLink.set(urlParams).append("&reqxml_").str()));
         list->appendContent(new CHtmlLink("XML Responses", wsLink.set(urlParams).append("&respxml_").str()));
+        IProperties *parms = request->queryParameters();
+        if (parms->hasProp("include_jsonreqs_"))
+            list->appendContent(new CHtmlLink("JSON Requests", wsLink.set(urlParams).append("&reqjson_").str()));
+
         list->appendContent(new CHtmlLink("JSON Responses", wsLink.set(urlParams).append("&respjson_").str()));
 
         page.appendContent(new CHtmlText("The following operations are supported:<br/>"));

+ 3 - 1
esp/bindings/http/platform/httpbinding.hpp

@@ -91,6 +91,7 @@ interface IEspHttpBinding
     virtual int onGetReqSampleXml(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)=0;
     virtual int onGetRespSampleXml(IEspContext &context, CHttpRequest* request, CHttpResponse* response,    const char *serv, const char *method)=0;
     virtual int onGetRespSampleJson(IEspContext &context, CHttpRequest* request, CHttpResponse* response,    const char *serv, const char *method)=0;
+    virtual int onGetReqSampleJson(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)=0;
     virtual int onStartUpload(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)=0;
     virtual int onFinishUpload(IEspContext &context, CHttpRequest* request, CHttpResponse* response,    const char *serv, const char *method,
     StringArray& fileNames, StringArray& files, IMultiException *me)=0;
@@ -250,6 +251,7 @@ public:
     virtual int onGetReqSampleXml(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method);
     virtual int onGetRespSampleXml(IEspContext &context, CHttpRequest* request, CHttpResponse* response,    const char *serv, const char *method);
     virtual int onGetRespSampleJson(IEspContext &context, CHttpRequest* request, CHttpResponse* response,    const char *serv, const char *method);
+    virtual int onGetReqSampleJson(IEspContext &ctx, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method);
 
     virtual int onStartUpload(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method);
     virtual int onFinishUpload(IEspContext &context, CHttpRequest* request, CHttpResponse* response,    const char *serv, const char *method,
@@ -294,7 +296,7 @@ public:
 protected:
     virtual bool basicAuth(IEspContext* ctx);
     int getWsdlOrXsd(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *service, const char *method, bool isWsdl);
-    bool getSchema(StringBuffer& schema, IEspContext &ctx, CHttpRequest* req, const char *service, const char *method,bool standalone);
+    virtual bool getSchema(StringBuffer& schema, IEspContext &ctx, CHttpRequest* req, const char *service, const char *method,bool standalone);
     virtual void appendSchemaNamespaces(IPropertyTree *namespaces, IEspContext &ctx, CHttpRequest* req, const char *service, const char *method){}
     void generateSampleXml(bool isRequest, IEspContext &context, CHttpRequest* request, CHttpResponse* response,    const char *serv, const char *method);
     void generateSampleXml(bool isRequest, IEspContext &context, CHttpRequest* request, StringBuffer &content, const char *serv, const char *method);

+ 2 - 0
esp/bindings/http/platform/httptransport.cpp

@@ -1458,6 +1458,8 @@ void CHttpRequest::parseEspPathInfo()
                     m_sstype=sub_serv_respsamplexml;
                 else if (m_queryparams && (m_queryparams->hasProp("respjson_")))
                     m_sstype=sub_serv_respsamplejson;
+                else if (m_queryparams && (m_queryparams->hasProp("reqjson_")))
+                    m_sstype=sub_serv_reqsamplejson;
                 else if (m_queryparams && (m_queryparams->hasProp("soap_builder_")))
                     m_sstype=sub_serv_soap_builder;
                 else if (m_queryparams && (m_queryparams->hasProp("roxie_builder_")))

+ 1 - 0
esp/bindings/http/platform/httptransport.ipp

@@ -279,6 +279,7 @@ typedef enum sub_service_
     sub_serv_reqsamplexml,
     sub_serv_respsamplexml,
     sub_serv_respsamplejson,
+    sub_serv_reqsamplejson,
     sub_serv_file_upload,
 
     sub_serv_max

+ 3 - 5
esp/services/esdl_svc_engine/esdl_binding.cpp

@@ -1782,6 +1782,8 @@ int EsdlBindingImpl::onGet(CHttpRequest* request, CHttpResponse* response)
         IEspContext *context = request->queryContext();
         IProperties *parms = request->queryParameters();
 
+        parms->setProp("include_jsonreqs_", "1");
+
         const char *thepath = request->queryPath();
 
         StringBuffer root;
@@ -2076,6 +2078,7 @@ int EsdlBindingImpl::onGetXForm(IEspContext &context,
 
         xform->setParameter("includeRoxieTest", "1");
         xform->setParameter("includeJsonTest", "1");
+        xform->setParameter("includeJsonReqSample", "1");
 
         // set the prop noDefaultValue param
         IProperties* props = context.queryRequestParameters();
@@ -2756,11 +2759,6 @@ int EsdlBindingImpl::onGetRespSampleXml(IEspContext &ctx, CHttpRequest* request,
     return onGetSampleXml(false, ctx, request, response, serv, method);
 }
 
-int EsdlBindingImpl::onGetRespSampleJson(IEspContext &ctx, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)
-{
-    return 0;
-}
-
 int EsdlBindingImpl::onGetSampleXml(bool isRequest, IEspContext &ctx, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)
 {
     StringBuffer schema;

+ 1 - 2
esp/services/esdl_svc_engine/esdl_binding.hpp

@@ -339,7 +339,7 @@ public:
     void handleJSONPost(CHttpRequest *request, CHttpResponse *response);
 
     int onGetXsd(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serviceName, const char *methodName);
-    virtual bool getSchema(StringBuffer& schema, IEspContext &ctx, CHttpRequest* req, const char *service, const char *method, bool standalone);
+    virtual bool getSchema(StringBuffer& schema, IEspContext &ctx, CHttpRequest* req, const char *service, const char *method, bool standalone) override;
     int onGetWsdl(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serviceName, const char *methodName);
     int onJavaPlugin(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serviceName, const char *methodName);
 
@@ -366,7 +366,6 @@ public:
     virtual StringBuffer &generateNamespace(IEspContext &context, CHttpRequest* request, const char *serv, const char *method, StringBuffer &ns);
     virtual int onGetReqSampleXml(IEspContext &ctx, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method);
     virtual int onGetRespSampleXml(IEspContext &ctx, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method);
-    virtual int onGetRespSampleJson(IEspContext &ctx, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method);
     virtual void handleSoapRequestException(IException *e, const char *source);
 
     int onGetSampleXml(bool isRequest, IEspContext &ctx, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method);

+ 5 - 1
esp/xslt/gen_form.xsl

@@ -40,7 +40,7 @@
     <xsl:param name="includeSoapTest" select="1"/>
     <xsl:param name="includeRoxieTest" select="0"/>
     <xsl:param name="includeJsonTest" select="0"/>
-    <!--xsl:param name="includeGatewayTest" select="0"/-->
+    <xsl:param name="includeJsonReqSample" select="0"/>
     <xsl:param name="schemaRoot" select="xsd:schema"/>
     <xsl:param name="esdl_links" select="0"/>
     
@@ -182,6 +182,9 @@
                                 &nbsp;<a><xsl:attribute name="href"><xsl:call-template name="build_link"><xsl:with-param name="type" select="'xsd'"/></xsl:call-template></xsl:attribute>XSD</a>
                                 &nbsp;<a><xsl:attribute name="href"><xsl:call-template name="build_link"><xsl:with-param name="type" select="'reqxml'"/></xsl:call-template></xsl:attribute>XMLRequest</a>
                                 &nbsp;<a><xsl:attribute name="href"><xsl:call-template name="build_link"><xsl:with-param name="type" select="'respxml'"/></xsl:call-template></xsl:attribute>XMLResponse</a>
+                                <xsl:if test="$includeJsonTest">
+                                    &nbsp;<a><xsl:attribute name="href"><xsl:call-template name="build_link"><xsl:with-param name="type" select="'reqjson'"/></xsl:call-template></xsl:attribute>JSONRequest</a>
+                                </xsl:if>
                                 &nbsp;<a><xsl:attribute name="href"><xsl:call-template name="build_link"><xsl:with-param name="type" select="'respjson'"/></xsl:call-template></xsl:attribute>JSONResponse</a>
                         </td>
                     </tr>
@@ -1452,6 +1455,7 @@
                     <xsl:choose>
                         <xsl:when test="$type='reqxml'"><xsl:value-of select="concat($methodName,'?reqxml_','&amp;',$params)"/></xsl:when>
                         <xsl:when test="$type='respxml'"><xsl:value-of select="concat($methodName,'?respxml_','&amp;',$params)"/></xsl:when>
+                        <xsl:when test="$type='reqjson'"><xsl:value-of select="concat($methodName,'?reqjson_','&amp;',$params)"/></xsl:when>
                         <xsl:when test="$type='respjson'"><xsl:value-of select="concat($methodName,'?respjson_','&amp;',$params)"/></xsl:when>
                         <xsl:when test="$type='xsd'"><xsl:value-of select="concat($methodName,'?xsd','&amp;',$params)"/></xsl:when>
                         <xsl:when test="$type='wsdl'"><xsl:value-of select="concat($methodName,'?wsdl','&amp;',$params)"/></xsl:when>