Fossil SCM

Fixed POST sending for rhino-based ajax impl (was sending Content-Type form-urlencoded). Login over rhino works :).

stephan 2011-09-30 15:50 UTC json
Commit a36d5c0ed89cd175b7013f38abf83fc866c93bc2
--- ajax/i-test/rhino-test.js
+++ ajax/i-test/rhino-test.js
@@ -1,7 +1,12 @@
11
var TestApp = {
2
- serverUrl:'http://localhost:8080'
2
+ serverUrl:
3
+ 'http://localhost:8080'
4
+ //'http://fjson/cgi-bin/fossil-json.cgi'
5
+ //'http://192.168.1.62:8080'
6
+ ,
7
+ verbose:true
38
};
49
(function bootstrap() {
510
var srcdir = '../js/';
611
var includes = [srcdir+'json2.js',
712
srcdir+'whajaj.js',
@@ -13,19 +18,25 @@
1318
WhAjaj.Connector.prototype.sendImpl = WhAjaj.Connector.sendImpls.rhino;
1419
TestApp.fossil = new FossilAjaj({
1520
asynchronous:false, /* rhino-based impl doesn't support asynch. */
1621
url:TestApp.serverUrl,
1722
beforeSend:function(req,opt){
18
- print("SENDING REQUEST: "+WhAjaj.stringify(opt));
23
+ if(!TestApp.verbose) return;
24
+ print("SENDING REQUEST: opt="+JSON.stringify(opt));
25
+ if(req) print("Request="+WhAjaj.stringify(req));
1926
},
2027
afterSend:function(req,opt){
21
- print("SENT REQUEST: "+WhAjaj.stringify(opt));
28
+ if(!TestApp.verbose) return;
29
+ print("SENT REQUEST: opt="+JSON.stringify(opt));
30
+ if(req) print("Request="+WhAjaj.stringify(req));
2231
},
2332
onError:function(req,opt){
33
+ if(!TestApp.verbose) return;
2434
print("ERROR: "+WhAjaj.stringify(opt));
2535
},
2636
onResponse:function(resp,req){
37
+ if(!TestApp.verbose) return;
2738
print("GOT RESPONSE: "+(('string'===typeof resp) ? resp : WhAjaj.stringify(resp)));
2839
}
2940
});
3041
})();
3142
@@ -33,12 +44,11 @@
3344
Throws an exception of cond is a falsy value.
3445
*/
3546
function assert(cond, descr){
3647
descr = descr || "Undescribed condition failed.";
3748
if(!cond){
38
- print("Assertion failed: "+descr);
39
- throw new Error(descr);
49
+ throw new Error("Assertion failed: "+descr);
4050
}else{
4151
print("Assertion OK: "+descr);
4252
}
4353
}
4454
@@ -73,13 +83,20 @@
7383
!resp.resultCode.
7484
*/
7585
function assertResponseOK(resp){
7686
assert('object' === typeof resp,'Response is-a object.');
7787
assert( 'string' === typeof resp.fossil, 'Response contains fossil property.');
78
- assert( !resp.resultCode, 'Response contains no error state.');
88
+ assert( !resp.resultCode, 'resp.resultCode='+resp.resultCode);
7989
}
80
-
90
+function assertResponseError(resp,expectCode){
91
+ assert('object' === typeof resp,'Response is-a object.');
92
+ assert( 'string' === typeof resp.fossil, 'Response contains fossil property.');
93
+ assert( resp.resultCode, 'resp.resultCode='+resp.resultCode);
94
+ if(expectCode){
95
+ assert( 'FOSSIL-'+expectCode == resp.resultCode, 'Expecting result code '+expectCode );
96
+ }
97
+}
8198
function testHAI(){
8299
TestApp.fossil.HAI({
83100
onResponse:function(resp,req){
84101
assertResponseOK(resp);
85102
TestApp.serverVersion = resp.fossil;
@@ -87,24 +104,33 @@
87104
});
88105
assert( 'string' === typeof TestApp.serverVersion, 'server version = '+TestApp.serverVersion);
89106
}
90107
testHAI.description = 'Get server version info.';
91108
92
-function testWhoAmI_1(){
109
+function testIAmNobody(){
93110
TestApp.fossil.whoami('/json/whoami');
94111
assert('nobody' === TestApp.fossil.userName, 'User == nobody.' );
95
- assert('anonymous' !== TestApp.fossil.userName, 'User != anonymous.' );
96
-
112
+ assert(!TestApp.fossil.authToken, 'authToken is not set.' );
113
+
114
+}
115
+testIAmNobody.description = 'Ensure that current user is "nobody".';
116
+
117
+
118
+function testAnonymousLogin(){
119
+ TestApp.fossil.login();
120
+ assert('string' === typeof TestApp.fossil.authToken, 'authToken = '+TestApp.fossil.authToken);
121
+ assert( 'string' === typeof TestApp.fossil.userName, 'User name = '+TestApp.fossil.userName);
97122
}
98
-testWhoAmI_1.description = 'First ever fossil-over-rhino test.';
123
+testAnonymousLogin.description = 'Perform anonymous login.';
99124
100125
101126
102127
(function runAllTests(){
103128
var testList = [
104129
testHAI,
105
- testWhoAmI_1
130
+ testIAmNobody,
131
+ testAnonymousLogin
106132
];
107133
var i, f;
108134
for( i = 0; i < testList.length; ++i ){
109135
f = testList[i];
110136
try{
111137
--- ajax/i-test/rhino-test.js
+++ ajax/i-test/rhino-test.js
@@ -1,7 +1,12 @@
1 var TestApp = {
2 serverUrl:'http://localhost:8080'
 
 
 
 
 
3 };
4 (function bootstrap() {
5 var srcdir = '../js/';
6 var includes = [srcdir+'json2.js',
7 srcdir+'whajaj.js',
@@ -13,19 +18,25 @@
13 WhAjaj.Connector.prototype.sendImpl = WhAjaj.Connector.sendImpls.rhino;
14 TestApp.fossil = new FossilAjaj({
15 asynchronous:false, /* rhino-based impl doesn't support asynch. */
16 url:TestApp.serverUrl,
17 beforeSend:function(req,opt){
18 print("SENDING REQUEST: "+WhAjaj.stringify(opt));
 
 
19 },
20 afterSend:function(req,opt){
21 print("SENT REQUEST: "+WhAjaj.stringify(opt));
 
 
22 },
23 onError:function(req,opt){
 
24 print("ERROR: "+WhAjaj.stringify(opt));
25 },
26 onResponse:function(resp,req){
 
27 print("GOT RESPONSE: "+(('string'===typeof resp) ? resp : WhAjaj.stringify(resp)));
28 }
29 });
30 })();
31
@@ -33,12 +44,11 @@
33 Throws an exception of cond is a falsy value.
34 */
35 function assert(cond, descr){
36 descr = descr || "Undescribed condition failed.";
37 if(!cond){
38 print("Assertion failed: "+descr);
39 throw new Error(descr);
40 }else{
41 print("Assertion OK: "+descr);
42 }
43 }
44
@@ -73,13 +83,20 @@
73 !resp.resultCode.
74 */
75 function assertResponseOK(resp){
76 assert('object' === typeof resp,'Response is-a object.');
77 assert( 'string' === typeof resp.fossil, 'Response contains fossil property.');
78 assert( !resp.resultCode, 'Response contains no error state.');
79 }
80
 
 
 
 
 
 
 
81 function testHAI(){
82 TestApp.fossil.HAI({
83 onResponse:function(resp,req){
84 assertResponseOK(resp);
85 TestApp.serverVersion = resp.fossil;
@@ -87,24 +104,33 @@
87 });
88 assert( 'string' === typeof TestApp.serverVersion, 'server version = '+TestApp.serverVersion);
89 }
90 testHAI.description = 'Get server version info.';
91
92 function testWhoAmI_1(){
93 TestApp.fossil.whoami('/json/whoami');
94 assert('nobody' === TestApp.fossil.userName, 'User == nobody.' );
95 assert('anonymous' !== TestApp.fossil.userName, 'User != anonymous.' );
96
 
 
 
 
 
 
 
 
97 }
98 testWhoAmI_1.description = 'First ever fossil-over-rhino test.';
99
100
101
102 (function runAllTests(){
103 var testList = [
104 testHAI,
105 testWhoAmI_1
 
106 ];
107 var i, f;
108 for( i = 0; i < testList.length; ++i ){
109 f = testList[i];
110 try{
111
--- ajax/i-test/rhino-test.js
+++ ajax/i-test/rhino-test.js
@@ -1,7 +1,12 @@
1 var TestApp = {
2 serverUrl:
3 'http://localhost:8080'
4 //'http://fjson/cgi-bin/fossil-json.cgi'
5 //'http://192.168.1.62:8080'
6 ,
7 verbose:true
8 };
9 (function bootstrap() {
10 var srcdir = '../js/';
11 var includes = [srcdir+'json2.js',
12 srcdir+'whajaj.js',
@@ -13,19 +18,25 @@
18 WhAjaj.Connector.prototype.sendImpl = WhAjaj.Connector.sendImpls.rhino;
19 TestApp.fossil = new FossilAjaj({
20 asynchronous:false, /* rhino-based impl doesn't support asynch. */
21 url:TestApp.serverUrl,
22 beforeSend:function(req,opt){
23 if(!TestApp.verbose) return;
24 print("SENDING REQUEST: opt="+JSON.stringify(opt));
25 if(req) print("Request="+WhAjaj.stringify(req));
26 },
27 afterSend:function(req,opt){
28 if(!TestApp.verbose) return;
29 print("SENT REQUEST: opt="+JSON.stringify(opt));
30 if(req) print("Request="+WhAjaj.stringify(req));
31 },
32 onError:function(req,opt){
33 if(!TestApp.verbose) return;
34 print("ERROR: "+WhAjaj.stringify(opt));
35 },
36 onResponse:function(resp,req){
37 if(!TestApp.verbose) return;
38 print("GOT RESPONSE: "+(('string'===typeof resp) ? resp : WhAjaj.stringify(resp)));
39 }
40 });
41 })();
42
@@ -33,12 +44,11 @@
44 Throws an exception of cond is a falsy value.
45 */
46 function assert(cond, descr){
47 descr = descr || "Undescribed condition failed.";
48 if(!cond){
49 throw new Error("Assertion failed: "+descr);
 
50 }else{
51 print("Assertion OK: "+descr);
52 }
53 }
54
@@ -73,13 +83,20 @@
83 !resp.resultCode.
84 */
85 function assertResponseOK(resp){
86 assert('object' === typeof resp,'Response is-a object.');
87 assert( 'string' === typeof resp.fossil, 'Response contains fossil property.');
88 assert( !resp.resultCode, 'resp.resultCode='+resp.resultCode);
89 }
90 function assertResponseError(resp,expectCode){
91 assert('object' === typeof resp,'Response is-a object.');
92 assert( 'string' === typeof resp.fossil, 'Response contains fossil property.');
93 assert( resp.resultCode, 'resp.resultCode='+resp.resultCode);
94 if(expectCode){
95 assert( 'FOSSIL-'+expectCode == resp.resultCode, 'Expecting result code '+expectCode );
96 }
97 }
98 function testHAI(){
99 TestApp.fossil.HAI({
100 onResponse:function(resp,req){
101 assertResponseOK(resp);
102 TestApp.serverVersion = resp.fossil;
@@ -87,24 +104,33 @@
104 });
105 assert( 'string' === typeof TestApp.serverVersion, 'server version = '+TestApp.serverVersion);
106 }
107 testHAI.description = 'Get server version info.';
108
109 function testIAmNobody(){
110 TestApp.fossil.whoami('/json/whoami');
111 assert('nobody' === TestApp.fossil.userName, 'User == nobody.' );
112 assert(!TestApp.fossil.authToken, 'authToken is not set.' );
113
114 }
115 testIAmNobody.description = 'Ensure that current user is "nobody".';
116
117
118 function testAnonymousLogin(){
119 TestApp.fossil.login();
120 assert('string' === typeof TestApp.fossil.authToken, 'authToken = '+TestApp.fossil.authToken);
121 assert( 'string' === typeof TestApp.fossil.userName, 'User name = '+TestApp.fossil.userName);
122 }
123 testAnonymousLogin.description = 'Perform anonymous login.';
124
125
126
127 (function runAllTests(){
128 var testList = [
129 testHAI,
130 testIAmNobody,
131 testAnonymousLogin
132 ];
133 var i, f;
134 for( i = 0; i < testList.length; ++i ){
135 f = testList[i];
136 try{
137
--- ajax/js/fossil-ajaj.js
+++ ajax/js/fossil-ajaj.js
@@ -55,26 +55,12 @@
5555
authToken:this.authToken || undefined,
5656
jsonp:('string' === typeof ajajOpt.jsonp) ? ajajOpt.jsonp : undefined
5757
};
5858
}
5959
ajajOpt.method = req ? 'POST' : 'GET';
60
+ // just for debuggering: ajajOpt.method = 'POST'; if(!req) req={};
6061
if(command) ajajOpt.url = this.ajaj.derivedOption('url',ajajOpt) + command;
61
- if( 0 && this.authToken ) {
62
- if( req ) req.authToken = this.authToken;
63
- else { // GET request: extend ajajOpt.urlParam
64
- var urlArgs = ajajOpt.urlParam;
65
- if( 'string' === typeof urlArgs ) {
66
- ajajOpt.urlParam += '&authToken='+encodeUriComponent(this.authToken);
67
- }
68
- else if( 'object' === typeof urlArgs ) {
69
- ajajOpt.urlParam.authToken = this.authToken;
70
- }
71
- else {
72
- ajajOpt.urlParam = {authToken: this.authToken};
73
- }
74
- }
75
- }
7662
this.ajaj.sendRequest(req,ajajOpt);
7763
};
7864
7965
/**
8066
Sends a login request to the back-end.
@@ -104,11 +90,14 @@
10490
ajajOpt = this.ajaj.normalizeAjaxParameters( ajajOpt || {} );
10591
var oldOnResponse = ajajOpt.onResponse;
10692
ajajOpt.onResponse = function(resp,req) {
10793
var thisOpt = this;
10894
//alert('login response:\n'+WhAjaj.stringify(resp));
109
- if( resp && resp.payload ) self.authToken = resp.payload;
95
+ if( resp && resp.payload ) {
96
+ self.authToken = resp.payload;
97
+ self.userName = name;
98
+ }
11099
if( WhAjaj.isFunction( self.onLogin ) ){
111100
try{ self.onLogin(); }
112101
catch(e){}
113102
}
114103
if( WhAjaj.isFunction(oldOnResponse) ) {
@@ -119,19 +108,16 @@
119108
function doLogin(){
120109
//alert("Sending login request..."+WhAjaj.stringify(loginReq));
121110
self.sendCommand('/json/login', loginReq, ajajOpt);
122111
}
123112
if( 'anonymous' === name ){
124
- this.sendCommand('/json/anonymousPassword',null,{
113
+ this.sendCommand('/json/anonymousPassword',undefined,{
125114
onResponse:function(resp,req){
126
- if(!resp || resp.resultCode){
127
- //alert("Error getting PW. "+WhAjaj.stringify(resp));
128
- try{ ajajOpt.onResponse(resp,req); }
129
- catch(e){}
130
- return;
131
- }
132
- else{
115
+ if( WhAjaj.isFunction(oldOnResponse) ){
116
+ oldOnResponse.apply(this, [resp,req]);
117
+ };
118
+ if(resp && !resp.resultCode){
133119
//alert("Got PW. Trying to log in..."+WhAjaj.stringify(resp));
134120
loginReq.anonymousSeed = resp.payload.seed;
135121
loginReq.password = resp.payload.password;
136122
doLogin();
137123
}
138124
--- ajax/js/fossil-ajaj.js
+++ ajax/js/fossil-ajaj.js
@@ -55,26 +55,12 @@
55 authToken:this.authToken || undefined,
56 jsonp:('string' === typeof ajajOpt.jsonp) ? ajajOpt.jsonp : undefined
57 };
58 }
59 ajajOpt.method = req ? 'POST' : 'GET';
 
60 if(command) ajajOpt.url = this.ajaj.derivedOption('url',ajajOpt) + command;
61 if( 0 && this.authToken ) {
62 if( req ) req.authToken = this.authToken;
63 else { // GET request: extend ajajOpt.urlParam
64 var urlArgs = ajajOpt.urlParam;
65 if( 'string' === typeof urlArgs ) {
66 ajajOpt.urlParam += '&authToken='+encodeUriComponent(this.authToken);
67 }
68 else if( 'object' === typeof urlArgs ) {
69 ajajOpt.urlParam.authToken = this.authToken;
70 }
71 else {
72 ajajOpt.urlParam = {authToken: this.authToken};
73 }
74 }
75 }
76 this.ajaj.sendRequest(req,ajajOpt);
77 };
78
79 /**
80 Sends a login request to the back-end.
@@ -104,11 +90,14 @@
104 ajajOpt = this.ajaj.normalizeAjaxParameters( ajajOpt || {} );
105 var oldOnResponse = ajajOpt.onResponse;
106 ajajOpt.onResponse = function(resp,req) {
107 var thisOpt = this;
108 //alert('login response:\n'+WhAjaj.stringify(resp));
109 if( resp && resp.payload ) self.authToken = resp.payload;
 
 
 
110 if( WhAjaj.isFunction( self.onLogin ) ){
111 try{ self.onLogin(); }
112 catch(e){}
113 }
114 if( WhAjaj.isFunction(oldOnResponse) ) {
@@ -119,19 +108,16 @@
119 function doLogin(){
120 //alert("Sending login request..."+WhAjaj.stringify(loginReq));
121 self.sendCommand('/json/login', loginReq, ajajOpt);
122 }
123 if( 'anonymous' === name ){
124 this.sendCommand('/json/anonymousPassword',null,{
125 onResponse:function(resp,req){
126 if(!resp || resp.resultCode){
127 //alert("Error getting PW. "+WhAjaj.stringify(resp));
128 try{ ajajOpt.onResponse(resp,req); }
129 catch(e){}
130 return;
131 }
132 else{
133 //alert("Got PW. Trying to log in..."+WhAjaj.stringify(resp));
134 loginReq.anonymousSeed = resp.payload.seed;
135 loginReq.password = resp.payload.password;
136 doLogin();
137 }
138
--- ajax/js/fossil-ajaj.js
+++ ajax/js/fossil-ajaj.js
@@ -55,26 +55,12 @@
55 authToken:this.authToken || undefined,
56 jsonp:('string' === typeof ajajOpt.jsonp) ? ajajOpt.jsonp : undefined
57 };
58 }
59 ajajOpt.method = req ? 'POST' : 'GET';
60 // just for debuggering: ajajOpt.method = 'POST'; if(!req) req={};
61 if(command) ajajOpt.url = this.ajaj.derivedOption('url',ajajOpt) + command;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62 this.ajaj.sendRequest(req,ajajOpt);
63 };
64
65 /**
66 Sends a login request to the back-end.
@@ -104,11 +90,14 @@
90 ajajOpt = this.ajaj.normalizeAjaxParameters( ajajOpt || {} );
91 var oldOnResponse = ajajOpt.onResponse;
92 ajajOpt.onResponse = function(resp,req) {
93 var thisOpt = this;
94 //alert('login response:\n'+WhAjaj.stringify(resp));
95 if( resp && resp.payload ) {
96 self.authToken = resp.payload;
97 self.userName = name;
98 }
99 if( WhAjaj.isFunction( self.onLogin ) ){
100 try{ self.onLogin(); }
101 catch(e){}
102 }
103 if( WhAjaj.isFunction(oldOnResponse) ) {
@@ -119,19 +108,16 @@
108 function doLogin(){
109 //alert("Sending login request..."+WhAjaj.stringify(loginReq));
110 self.sendCommand('/json/login', loginReq, ajajOpt);
111 }
112 if( 'anonymous' === name ){
113 this.sendCommand('/json/anonymousPassword',undefined,{
114 onResponse:function(resp,req){
115 if( WhAjaj.isFunction(oldOnResponse) ){
116 oldOnResponse.apply(this, [resp,req]);
117 };
118 if(resp && !resp.resultCode){
 
 
 
119 //alert("Got PW. Trying to log in..."+WhAjaj.stringify(resp));
120 loginReq.anonymousSeed = resp.payload.seed;
121 loginReq.password = resp.payload.password;
122 doLogin();
123 }
124
+30 -13
--- ajax/js/whajaj.js
+++ ajax/js/whajaj.js
@@ -788,11 +788,11 @@
788788
{
789789
args.errorMessage = e.toString();
790790
WhAjaj.Connector.sendHelper.onSendError( request, args );
791791
return undefined;
792792
}
793
- }/*XMLHttpRequest*/,
793
+ }/*XMLHttpRequest()*/,
794794
/**
795795
This is a concrete implementation of
796796
WhAjaj.Connector.prototype.sendImpl() which uses the jQuery
797797
AJAX API to send requests and fetch the responses.
798798
@@ -871,11 +871,11 @@
871871
{
872872
args.errorMessage = e.toString();
873873
WhAjaj.Connector.sendHelper.onSendError( request, args );
874874
return undefined;
875875
}
876
- }/*jQuery*/,
876
+ }/*jQuery()*/,
877877
/**
878878
This is a concrete implementation of
879879
WhAjaj.Connector.prototype.sendImpl() which uses the rhino
880880
Java API to send requests and fetch the responses.
881881
@@ -899,35 +899,52 @@
899899
WhAjaj.Connector.sendHelper.onSendError( request, args );
900900
return;
901901
}
902902
}
903903
}
904
- var url = new java.net.URL( args.url );
904
+ var url;
905905
var con;
906906
var IO = new JavaImporter(java.io);
907907
var wr;
908908
var rd, ln, json = [];
909909
try{
910
- con = url.openConnection();
911
- con.setDoOutput( true );
912
- wr = new IO.OutputStreamWriter(con.getOutputStream())
913
- wr.write(data);
914
- wr.flush();
910
+ url = new java.net.URL( args.url )
911
+ con = url.openConnection(/*FIXME: add proxy support!*/);
912
+ con.setRequestProperty("Accept-Charset","utf-8");
913
+ if(data){
914
+ con.setRequestProperty("Content-Type","application/json; charset=utf-8");
915
+ con.setDoOutput( true );
916
+ wr = new IO.OutputStreamWriter(con.getOutputStream())
917
+ wr.write(data);
918
+ wr.flush();
919
+ wr.close();
920
+ wr = null;
921
+ //print("POSTED: "+data);
922
+ }
915923
rd = new IO.BufferedReader(new IO.InputStreamReader(con.getInputStream()));
916
- while ((line = rd.readLine()) != null) {
924
+ //var skippedHeaders = false;
925
+ while ((line = rd.readLine()) !== null) {
926
+ //print("LINE: "+line);
927
+ //if(!line.length && !skippedHeaders){
928
+ // skippedHeaders = true;
929
+ // json = [];
930
+ // continue;
931
+ //}
917932
json.push(line);
918933
}
919934
920935
}catch(e){
921936
args.errorMessage = e.toString();
922937
WhAjaj.Connector.sendHelper.onSendError( request, args );
923938
return undefined;
924939
}
925
- try { wr.close(); } catch(e) { /*ignore*/}
926
- try { rd.close(); } catch(e) { /*ignore*/}
927
- WhAjaj.Connector.sendHelper.onSendSuccess( request, json.join(''), args );
928
- }
940
+ try { if(wr) wr.close(); } catch(e) { /*ignore*/}
941
+ try { if(rd) rd.close(); } catch(e) { /*ignore*/}
942
+ json = json.join('');
943
+ //print("READ IN JSON: "+json);
944
+ WhAjaj.Connector.sendHelper.onSendSuccess( request, json, args );
945
+ }/*rhino()*/
929946
};
930947
931948
/**
932949
An internal function which takes an object containing properties
933950
for a WhAjaj.Connector network request. This function creates a new
934951
--- ajax/js/whajaj.js
+++ ajax/js/whajaj.js
@@ -788,11 +788,11 @@
788 {
789 args.errorMessage = e.toString();
790 WhAjaj.Connector.sendHelper.onSendError( request, args );
791 return undefined;
792 }
793 }/*XMLHttpRequest*/,
794 /**
795 This is a concrete implementation of
796 WhAjaj.Connector.prototype.sendImpl() which uses the jQuery
797 AJAX API to send requests and fetch the responses.
798
@@ -871,11 +871,11 @@
871 {
872 args.errorMessage = e.toString();
873 WhAjaj.Connector.sendHelper.onSendError( request, args );
874 return undefined;
875 }
876 }/*jQuery*/,
877 /**
878 This is a concrete implementation of
879 WhAjaj.Connector.prototype.sendImpl() which uses the rhino
880 Java API to send requests and fetch the responses.
881
@@ -899,35 +899,52 @@
899 WhAjaj.Connector.sendHelper.onSendError( request, args );
900 return;
901 }
902 }
903 }
904 var url = new java.net.URL( args.url );
905 var con;
906 var IO = new JavaImporter(java.io);
907 var wr;
908 var rd, ln, json = [];
909 try{
910 con = url.openConnection();
911 con.setDoOutput( true );
912 wr = new IO.OutputStreamWriter(con.getOutputStream())
913 wr.write(data);
914 wr.flush();
 
 
 
 
 
 
 
 
915 rd = new IO.BufferedReader(new IO.InputStreamReader(con.getInputStream()));
916 while ((line = rd.readLine()) != null) {
 
 
 
 
 
 
 
917 json.push(line);
918 }
919
920 }catch(e){
921 args.errorMessage = e.toString();
922 WhAjaj.Connector.sendHelper.onSendError( request, args );
923 return undefined;
924 }
925 try { wr.close(); } catch(e) { /*ignore*/}
926 try { rd.close(); } catch(e) { /*ignore*/}
927 WhAjaj.Connector.sendHelper.onSendSuccess( request, json.join(''), args );
928 }
 
 
929 };
930
931 /**
932 An internal function which takes an object containing properties
933 for a WhAjaj.Connector network request. This function creates a new
934
--- ajax/js/whajaj.js
+++ ajax/js/whajaj.js
@@ -788,11 +788,11 @@
788 {
789 args.errorMessage = e.toString();
790 WhAjaj.Connector.sendHelper.onSendError( request, args );
791 return undefined;
792 }
793 }/*XMLHttpRequest()*/,
794 /**
795 This is a concrete implementation of
796 WhAjaj.Connector.prototype.sendImpl() which uses the jQuery
797 AJAX API to send requests and fetch the responses.
798
@@ -871,11 +871,11 @@
871 {
872 args.errorMessage = e.toString();
873 WhAjaj.Connector.sendHelper.onSendError( request, args );
874 return undefined;
875 }
876 }/*jQuery()*/,
877 /**
878 This is a concrete implementation of
879 WhAjaj.Connector.prototype.sendImpl() which uses the rhino
880 Java API to send requests and fetch the responses.
881
@@ -899,35 +899,52 @@
899 WhAjaj.Connector.sendHelper.onSendError( request, args );
900 return;
901 }
902 }
903 }
904 var url;
905 var con;
906 var IO = new JavaImporter(java.io);
907 var wr;
908 var rd, ln, json = [];
909 try{
910 url = new java.net.URL( args.url )
911 con = url.openConnection(/*FIXME: add proxy support!*/);
912 con.setRequestProperty("Accept-Charset","utf-8");
913 if(data){
914 con.setRequestProperty("Content-Type","application/json; charset=utf-8");
915 con.setDoOutput( true );
916 wr = new IO.OutputStreamWriter(con.getOutputStream())
917 wr.write(data);
918 wr.flush();
919 wr.close();
920 wr = null;
921 //print("POSTED: "+data);
922 }
923 rd = new IO.BufferedReader(new IO.InputStreamReader(con.getInputStream()));
924 //var skippedHeaders = false;
925 while ((line = rd.readLine()) !== null) {
926 //print("LINE: "+line);
927 //if(!line.length && !skippedHeaders){
928 // skippedHeaders = true;
929 // json = [];
930 // continue;
931 //}
932 json.push(line);
933 }
934
935 }catch(e){
936 args.errorMessage = e.toString();
937 WhAjaj.Connector.sendHelper.onSendError( request, args );
938 return undefined;
939 }
940 try { if(wr) wr.close(); } catch(e) { /*ignore*/}
941 try { if(rd) rd.close(); } catch(e) { /*ignore*/}
942 json = json.join('');
943 //print("READ IN JSON: "+json);
944 WhAjaj.Connector.sendHelper.onSendSuccess( request, json, args );
945 }/*rhino()*/
946 };
947
948 /**
949 An internal function which takes an object containing properties
950 for a WhAjaj.Connector network request. This function creates a new
951

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button