Service.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // wrapped by build app
  2. define("dojox/wire/ml/Service", ["dijit","dojo","dojox","dojo/require!dijit/_Widget,dojox/xml/parser,dojox/wire/_base,dojox/wire/ml/util"], function(dijit,dojo,dojox){
  3. dojo.provide("dojox.wire.ml.Service");
  4. dojo.require("dijit._Widget");
  5. dojo.require("dojox.xml.parser");
  6. dojo.require("dojox.wire._base");
  7. dojo.require("dojox.wire.ml.util");
  8. dojo.declare("dojox.wire.ml.Service", dijit._Widget, {
  9. // summary:
  10. // A widget for a service
  11. // description:
  12. // This widget represents a service defined by a service description
  13. // specified with 'url' attribute.
  14. // If 'serviceType' and 'serviceUrl' attributes are specified, 'url'
  15. // attribute can be omitted.
  16. // url:
  17. // A URL to a service description
  18. // serviceUrl:
  19. // A URL to a service
  20. // serviceType:
  21. // A service type
  22. // handlerClass:
  23. // A service handler class name
  24. url: "",
  25. serviceUrl: "",
  26. serviceType: "",
  27. handlerClass: "",
  28. preventCache: true,
  29. postCreate: function(){
  30. // summary:
  31. // Call _createHandler()
  32. // description:
  33. // See _createHandler().
  34. this.handler = this._createHandler();
  35. },
  36. _handlerClasses: {
  37. "TEXT": "dojox.wire.ml.RestHandler",
  38. "XML": "dojox.wire.ml.XmlHandler",
  39. "JSON": "dojox.wire.ml.JsonHandler",
  40. "JSON-RPC": "dojo.rpc.JsonService"
  41. },
  42. _createHandler: function(){
  43. // summary:
  44. // Create a service handler
  45. // desription:
  46. // A service handler class is determined by:
  47. // 1. 'handlerClass' attribute
  48. // 2. 'serviceType' attribute
  49. // 3. 'serviceType' property in a service description
  50. // returns:
  51. // A service handler
  52. if(this.url){
  53. var self = this;
  54. var d = dojo.xhrGet({
  55. url: this.url,
  56. handleAs: "json",
  57. sync: true
  58. });
  59. d.addCallback(function(result){
  60. self.smd = result;
  61. });
  62. if(this.smd && !this.serviceUrl){
  63. this.serviceUrl = (this.smd.serviceUrl || this.smd.serviceURL);
  64. }
  65. }
  66. var handlerClass = undefined;
  67. if(this.handlerClass){
  68. handlerClass = dojox.wire._getClass(this.handlerClass);
  69. }else if(this.serviceType){
  70. handlerClass = this._handlerClasses[this.serviceType];
  71. if(handlerClass && dojo.isString(handlerClass)){
  72. handlerClass = dojox.wire._getClass(handlerClass);
  73. this._handlerClasses[this.serviceType] = handlerClass;
  74. }
  75. }else if(this.smd && this.smd.serviceType){
  76. handlerClass = this._handlerClasses[this.smd.serviceType];
  77. if(handlerClass && dojo.isString(handlerClass)){
  78. handlerClass = dojox.wire._getClass(handlerClass);
  79. this._handlerClasses[this.smd.serviceType] = handlerClass;
  80. }
  81. }
  82. if(!handlerClass){
  83. return null; //null
  84. }
  85. return new handlerClass(); //Object
  86. },
  87. callMethod: function(method, parameters){
  88. // summary:
  89. // Call a service method with parameters
  90. // method:
  91. // A method name
  92. // parameters:
  93. // An array parameters
  94. var deferred = new dojo.Deferred();
  95. this.handler.bind(method, parameters, deferred, this.serviceUrl);
  96. return deferred;
  97. }
  98. });
  99. });