?? biwsdlbijsstubcodegen.py
字號:
from BiWsdlJsCodeGen import *import reimport itertoolsimport stringimport os.path"""<summary>BiWsdiBiJsStubCodeGen is a class for generating BiWebService based JS WSDL stubs.</summary>"""class BiWsdlBiJsStubCodeGen (BiWsdlJsCodeGen): """ <summary> Constructor. </summary> """ def __init__(self): super(BiWsdlBiJsStubCodeGen, self).__init__() self.__genAsyncCalls = True self.__genSyncCalls = True def startGen(self): super(BiWsdlBiJsStubCodeGen, self).startGen() self.emitIndentedCommentLine("/// <summary>") self.emitIndentedCommentLine("/// This file includes WebService client stub definitions. File was automatically generated") self.emitIndentedCommentLine("/// by BiWsdl2Js.") self.emitIndentedCommentLine("/// </summary>") self.emitLine("") def endGen(self): super(BiWsdlBiJsStubCodeGen, self).endGen() def startService(self, aServiceName): super(BiWsdlBiJsStubCodeGen, self).startService(aServiceName) self.emitIndentedLine("// #region Service " + aServiceName) self.__currentClassName = self.getStubClassName(aServiceName) self.startClassCtor(self.__currentClassName, [("aWebService", "BiWebService instance to use for operating service."), ("aWsdl", "URL to WSDL describing service (WSDL used to generate this stub or compatible)")], "BiObject", self.__currentClassName + " implements a service stub for service " + aServiceName + ".") self.emitIndentedLine("BiObject.call(this);") self.emitIndentedLine("this._webService = aWebService;"); self.emitIndentedLine("this._webService.useService(aWsdl, \"" + self.__currentClassName + "\");"); self.endClassCtor() self.startClassMethod("_getServiceObj", [], "Return the web-service object (from BiWebService) to use for invoking service calls.") self.emitIndentedLine("return this._webService[\"" + self.__currentClassName + "\"];"); self.endClassMethod() def endService(self, aServiceName): super(BiWsdlBiJsStubCodeGen, self).endService(aServiceName) self.emitIndentedLine("// #endregion"); self.emitLine(""); def startPort(self, aPortName): super(BiWsdlBiJsStubCodeGen, self).startPort(aPortName) self.emitIndentedLine("// #region Port " + aPortName); def endPort(self, aPortName): super(BiWsdlBiJsStubCodeGen, self).endPort(aPortName) self.emitIndentedLine("// #endregion"); self.emitLine(""); def genMethod(self, aName, aArgs, aArgTypes): # Prepare java names for all... lArgNames = list(itertools.imap(self.convertQNameToJName, aArgs)) # Generate synchronous call method if self.__genSyncCalls: self.emitIndentedCommentLine("/// <summary>"); self.emitIndentedCommentLine("/// Invoke the port's " + aName + " operation synchronously. Returns result from web service."); self.emitIndentedCommentLine("/// </summary>"); for lParamIdx in range(len(lArgNames)): self.emitIndentedCommentLine("/// <param name=\"" + lArgNames[lParamIdx] + "\"> Value of " + aArgs[lParamIdx] + " as defined in source WSDL. Type: " + aArgTypes[lParamIdx] + ".</param>"); lFnName = self.__currentClassName + ".prototype." + self.getStubMethodName(self.getCurrentService(), self.getCurrentPort(), aName, False) self.emitIndentedLine(lFnName + " = function(" + string.join(lArgNames, ", ") + ")"); self.emitIndentedLine("{"); self.indent(); self.emitIndentedLine("var lCallObject = {"); self.indent(); self.emitIndentedLine("funcName:\""+aName+"\","); self.emitIndentedLine("portName:\""+self.getCurrentPort()+"\","); self.emitIndentedLine("async:false"); self.outdent(); self.emitIndentedLine("};"); self.emitLine(""); self.emitIndentedLine("var lRes=this._getServiceObj().callService(" + string.join(["lCallObject"] + lArgNames, ", ") + ");"); self.emitIndentedLine("if(lRes.error)") self.startBlock() self.emitIndentedLine("var lErr = new Error();") self.emitIndentedLine("lErr.message = lRes.errorDetail.code + \" / \" + lRes.errorDetail.string;"); self.emitIndentedLine("throw lErr;") self.endBlock() self.emitIndentedLine("") self.emitIndentedLine("return lRes.value;"); self.outdent(); self.emitIndentedLine("}"); self.emitLine(""); # Generate asynchronous call method if self.__genAsyncCalls: self.emitIndentedCommentLine("/// <summary>"); self.emitIndentedCommentLine("/// Invoke the port's " + aName + " operation asynchronously. Call a callback when done."); self.emitIndentedCommentLine("/// </summary>"); self.emitIndentedCommentLine("/// <param name=\"aCallback\">Callback function to invoke upon completion of operation. Function "); self.emitIndentedCommentLine("/// receives results object as a parameter. Result object.value is the result, Result object.error indicates "); self.emitIndentedCommentLine("/// whether an error ocurred or not.</param>"); self.emitIndentedCommentLine("/// <param name=\"aCallbackThis\">this to use for callback function invocation."); for lParamIdx in range(len(lArgNames)): self.emitIndentedCommentLine("/// <param name=\"" + lArgNames[lParamIdx] + "\"> Value of " + aArgs[lParamIdx] + " as defined in source WSDL. Type: " + aArgTypes[lParamIdx] + ".</param>"); lFnName = self.__currentClassName + ".prototype." + self.getStubMethodName(self.getCurrentService(), self.getCurrentPort(), aName, True) self.emitIndentedLine(lFnName + " = function(" + string.join(["aCallback", "aCallbackThis"]+lArgNames, ", ") + ")"); self.emitIndentedLine("{"); self.indent(); self.emitIndentedLine("var lCallObject = {"); self.indent(); self.emitIndentedLine("funcName:\""+aName+"\","); self.emitIndentedLine("portName:\""+self.getCurrentPort()+"\","); self.emitIndentedLine("async:true"); self.outdent(); self.emitIndentedLine("};"); self.emitLine(""); lCallServiceArgs = ["function (aRes) {aCallback.call(aCallbackThis, aRes);}", "lCallObject"] + lArgNames self.emitIndentedLine("this._getServiceObj().callService(" + string.join(lCallServiceArgs, ", ") + ");"); self.outdent(); self.emitIndentedLine("}"); self.emitLine(""); def getStubClassName(aServiceName): return BiWsdlJsCodeGen.convertQNameToJName(aServiceName) getStubClassName=staticmethod(getStubClassName) def getStubMethodName(aServiceName, aPortName, aMethodName, aAsync): if aAsync: lSyncPfx = "async" else: lSyncPfx = "sync" return lSyncPfx+"_"+BiWsdlJsCodeGen.convertQNameToJName(aPortName)+"_"+BiWsdlJsCodeGen.convertQNameToJName(aMethodName) getStubMethodName=staticmethod(getStubMethodName) """ <summary> Set generated call type -- to sync, async or both. </summary> <param name="aCallType">Type of call to generate. sync for synchronous calls, async for asynchronous calls, both for both </param> """ def setCalltype(self, aCallType): if aCallType not in ["async", "sync", "both"]: raise Exception("Invalid callType value: " + aCallType) self.__genAsyncCalls = aCallType in ["async", "both"] self.__genSyncCalls = aCallType in ["sync", "both"]
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -