forked from membrane/api-gateway
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrouter-conf2.xsd
9745 lines (9721 loc) · 760 KB
/
router-conf2.xsd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://membrane-soa.org/proxies/1/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans"
targetNamespace="http://membrane-soa.org/proxies/1/"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- Automatically generated by com.predic8.membrane.annot.generator.Schemas. -->
<xsd:import namespace="http://www.springframework.org/schema/beans" schemaLocation="http://www.springframework.org/schema/beans/spring-beans-3.1.xsd" />
<xsd:simpleType name="spel_number">
<xsd:restriction base="xsd:string">
<xsd:pattern value="-?[0-9]+|\#\{.*\}|\$\{.*\}"></xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="spel_boolean">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[01]|true|false|\#\{.*\}|\$\{.*\}"></xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="amQuota">
<xsd:annotation>
<xsd:documentation></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="amRateLimiter">
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="amStatisticsCollector">
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="host" type="xsd:string" >
</xsd:attribute>
<xsd:attribute name="clientId" type="xsd:string" >
</xsd:attribute>
<xsd:attribute name="clientSecret" type="xsd:string" >
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="accessControl">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 6. Security<br/><h3><b>Description:</b></h3> Blocks requests whose origin TCP/IP address (hostname or IP address) is not allowed to access the
requested resource.<br/></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="file" type="xsd:string" use="required">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Location of the ACL file.<br/><h3><b>Example:</b></h3> acl/acl.xml<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="accountBlocker">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Keeps track of blocked user accounts (accounts become blocked after too many failed logins).<br/><h3><b>Explanation:</b></h3> <p>
The Account Blocker prevents password and token guessing attempts: It blocks a user (or the whole
system) after too many failed login attempts.
</p>
<p>
When a user entered a wrong password or wrong token more than <i>afterFailedLogins</i> times, this user
becomes blocked: He will be prevented from logging in again within the next <i>blockFor</i> milliseconds
(writing 3600000 means "for 1 hour").
</p>
<p>
The failed login attempts have to occur within the last <i>afterFailedLoginsWithin</i> milliseconds
(writing 9223372036854775807 means "forever").
</p>
<p>
If more than <i>blockWholeSystemAfter</i> users become blocked at a time, the <i>all</i> users will
become blocked. (This is necessary to limit memory usage.)
</p>
<h3>Discussion</h3>
<p>
Say, for example, a scripted dictionary attack tries to guess a user's password. Using the configuration
shown above, which is the default configuration if no <i>accountBlocker</i> is declared, this results in
5 guesses per 3600000 milliseconds; or equivalently 42720 guesses per year.
</p>
<p>
The probability of hitting a uniformly at random chosen word of the standard German vocabulary within
one year is therefore about 56%.
</p>
<p>
Therefore, a more secure password should be chosen, containing letters, digits and special characters.
</p><br/></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="blockWholeSystemAfter" type="spel_number" >
</xsd:attribute>
<xsd:attribute name="afterFailedLogins" type="spel_number" >
</xsd:attribute>
<xsd:attribute name="afterFailedLoginsWithin" type="spel_number" >
</xsd:attribute>
<xsd:attribute name="blockFor" type="spel_number" >
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="adminConsole">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 5. Monitoring, Logging and Statistics<br/><h3><b>Description:</b></h3> Displays up-to-date statistics, recent exchanges and, by default, allows live modification of Membrane's configuration.<br/></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="readOnly" type="spel_boolean" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Whether runtime changes to Membrane's configuration can be committed in the admin console.<br/><h3><b>Default:</b></h3> false<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="apiKeyChecker">
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
<xsd:choice minOccurs="0">
<xsd:element ref="keyFile">
</xsd:element>
</xsd:choice>
<xsd:choice minOccurs="0">
<xsd:element name="header" type="com.predic8.membrane.core.config.spring.HeaderParser">
</xsd:element>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="allowSwagger" type="spel_boolean" >
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="apiManagement">
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
<xsd:choice minOccurs="0">
<xsd:element ref="amRateLimiter">
</xsd:element>
</xsd:choice>
<xsd:choice minOccurs="0">
<xsd:element ref="amQuota">
<xsd:annotation>
<xsd:documentation></xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:choice>
<xsd:choice minOccurs="0">
<xsd:element ref="amStatisticsCollector">
</xsd:element>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="config" type="xsd:string" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> the location of the configuration<br/><h3><b>Default:</b></h3> api.yaml<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="com.predic8.membrane.core.config.spring.AttributeParser">
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="from" type="xsd:string" use="required">
</xsd:attribute>
<xsd:attribute name="to" type="xsd:string" use="required">
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="com.predic8.membrane.core.config.spring.LdapUserDataProvidermapParser">
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="attribute" type="com.predic8.membrane.core.config.spring.AttributeParser">
</xsd:element>
</xsd:choice>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="authHead2Body">
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="com.predic8.membrane.core.config.spring.AuthenticationParser">
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="username" type="xsd:string" use="required">
</xsd:attribute>
<xsd:attribute name="password" type="xsd:string" use="required">
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="com.predic8.membrane.core.config.spring.ClustersParser">
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="cluster" type="com.predic8.membrane.core.config.spring.ClusterParser">
</xsd:element>
</xsd:choice>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="basicAuthentication">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 6. Security<br/><h3><b>Description:</b></h3> Blocks requests which do not have the correct RFC 1945 basic authentication credentials (HTTP header "Authentication: Basic ....").<br/></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
<xsd:choice minOccurs="1" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 6. Security<br/><h3><b>Description:</b></h3> Blocks requests which do not have the correct RFC 1945 basic authentication credentials (HTTP header "Authentication: Basic ....").<br/></xsd:documentation>
</xsd:annotation>
<xsd:element name="user" type="com.predic8.membrane.core.config.spring.StaticUserDataProvideruserParser">
</xsd:element>
</xsd:choice>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="bearerToken">
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="byThreadStrategy">
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="maxNumberOfThreadsPerEndpoint" type="spel_number" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Maximum number of concurrently running requests per endpoint.<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="retryTimeOnBusy" type="spel_number" >
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="cache">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 4. Interceptors/Features<br/><h3><b>Description:</b></h3> <p>
Don't use, this does NOT implement valid HTTP caching.
</p>
<p>
We currently just use this class to cache a bunch of Debian and Ubuntu Repositories as well as
the Docker Registry for offline use.
The cache does not revalidate any responses, so machines querying the cache for Debian
package updates will be stuck in the past until the cache (on disk) is cleared manually. -
This is - simply put - the only use case, where using this class makes any sense.
</p><br/></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
<xsd:choice minOccurs="1">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 4. Interceptors/Features<br/><h3><b>Description:</b></h3> <p>
Don't use, this does NOT implement valid HTTP caching.
</p>
<p>
We currently just use this class to cache a bunch of Debian and Ubuntu Repositories as well as
the Docker Registry for offline use.
The cache does not revalidate any responses, so machines querying the cache for Debian
package updates will be stuck in the past until the cache (on disk) is cleared manually. -
This is - simply put - the only use case, where using this class makes any sense.
</p><br/></xsd:documentation>
</xsd:annotation>
<xsd:element ref="fileStore">
</xsd:element>
<xsd:element ref="inMemoryStore">
</xsd:element>
</xsd:choice>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="com.predic8.membrane.core.config.spring.SwitchcaseParser">
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="url" type="xsd:string" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Target URL<br/><h3><b>Example:</b></h3> http://predic8.com/fastorder<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="service" type="xsd:string" >
</xsd:attribute>
<xsd:attribute name="xPath" type="xsd:string" use="required">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> XPath expression.<br/><h3><b>Example:</b></h3> //fastorder/<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="certificate">
<xsd:complexType>
<xsd:complexContent mixed="true">
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="location" type="xsd:string" >
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="claims">
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="scope" type="com.predic8.membrane.core.config.spring.ClaimsscopeParser">
</xsd:element>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="value" type="xsd:string" use="required">
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="clamav">
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="host" type="xsd:string" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> the host of the clamav daemon<br/><h3><b>Default:</b></h3> localhost<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="port" type="xsd:string" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> the port of the clamav daemon<br/><h3><b>Default:</b></h3> 3310<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="com.predic8.membrane.core.config.spring.StaticClientListclientParser">
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="clientId" type="xsd:string" use="required">
</xsd:attribute>
<xsd:attribute name="clientSecret" type="xsd:string" use="required">
</xsd:attribute>
<xsd:attribute name="callbackUrl" type="xsd:string" use="required">
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="com.predic8.membrane.core.config.spring.ClusterParser">
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="node" type="com.predic8.membrane.core.config.spring.NodeParser">
</xsd:element>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Sets the name of the cluster.<br/><h3><b>Default:</b></h3> Default<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="clusterNotification">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 7. Clustering and Loadbalancing<br/><h3><b>Description:</b></h3> Receives control messages to dynamically modify the configuration of a {@link LoadBalancingInterceptor}.<br/><h3><b>Explanation:</b></h3> See also examples/loadbalancer-client-2 in the Membrane Service Proxy distribution.<br/></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="validateSignature" type="spel_boolean" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Set Push Interface to encrypted mode.<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="timeout" type="spel_number" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Timestamp invalidation period. (0=unlimited)<br/><h3><b>Example:</b></h3> 5000<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="keyHex" type="xsd:string" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Key used by encryption as hex string<br/><h3><b>Example:</b></h3> 6f488a642b740fb70c5250987a284dc0<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="if">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> <p>
The "if" interceptor supports conditional execution of a group of executors.
</p>
<p>
Note that this is a draft implementation only: Design decissions are still pending.
</p>
<ul>
<li>'evaluate condition only once': Should the condition be reevaluated once response handling has begun?</li>
<li>'evaluate condition always during request handling already' (even when 'if' is nested in 'response')</li>
<li>What happens to ABORT handling of interceptor A in <code><request><if test="..."><A /></if></response></code></li>
</ul><br/></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> <p>
The "if" interceptor supports conditional execution of a group of executors.
</p>
<p>
Note that this is a draft implementation only: Design decissions are still pending.
</p>
<ul>
<li>'evaluate condition only once': Should the condition be reevaluated once response handling has begun?</li>
<li>'evaluate condition always during request handling already' (even when 'if' is nested in 'response')</li>
<li>What happens to ABORT handling of interceptor A in <code><request><if test="..."><A /></if></response></code></li>
</ul><br/></xsd:documentation>
</xsd:annotation>
<xsd:element ref="accessControl">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 6. Security<br/><h3><b>Description:</b></h3> Blocks requests whose origin TCP/IP address (hostname or IP address) is not allowed to access the
requested resource.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="adminConsole">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 5. Monitoring, Logging and Statistics<br/><h3><b>Description:</b></h3> Displays up-to-date statistics, recent exchanges and, by default, allows live modification of Membrane's configuration.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="apiKeyChecker">
</xsd:element>
<xsd:element ref="apiManagement">
</xsd:element>
<xsd:element ref="authHead2Body">
</xsd:element>
<xsd:element ref="basicAuthentication">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 6. Security<br/><h3><b>Description:</b></h3> Blocks requests which do not have the correct RFC 1945 basic authentication credentials (HTTP header "Authentication: Basic ....").<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="cache">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 4. Interceptors/Features<br/><h3><b>Description:</b></h3> <p>
Don't use, this does NOT implement valid HTTP caching.
</p>
<p>
We currently just use this class to cache a bunch of Debian and Ubuntu Repositories as well as
the Docker Registry for offline use.
The cache does not revalidate any responses, so machines querying the cache for Debian
package updates will be stuck in the past until the cache (on disk) is cleared manually. -
This is - simply put - the only use case, where using this class makes any sense.
</p><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="clamav">
</xsd:element>
<xsd:element ref="clusterNotification">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 7. Clustering and Loadbalancing<br/><h3><b>Description:</b></h3> Receives control messages to dynamically modify the configuration of a {@link LoadBalancingInterceptor}.<br/><h3><b>Explanation:</b></h3> See also examples/loadbalancer-client-2 in the Membrane Service Proxy distribution.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="if">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> <p>
The "if" interceptor supports conditional execution of a group of executors.
</p>
<p>
Note that this is a draft implementation only: Design decissions are still pending.
</p>
<ul>
<li>'evaluate condition only once': Should the condition be reevaluated once response handling has begun?</li>
<li>'evaluate condition always during request handling already' (even when 'if' is nested in 'response')</li>
<li>What happens to ABORT handling of interceptor A in <code><request><if test="..."><A /></if></response></code></li>
</ul><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="counter">
</xsd:element>
<xsd:element ref="dispatching">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> This interceptor adds the destination specified in the target
element to the list of destinations of the exchange object. It
must be placed into the transport to make Service Proxies Work
properly. It has to be placed after the ruleMatching
interceptor. The ruleMatching interceptor looks up a service
proxy for an incoming request and places it into the exchange
object. The dispatching interceptor needs the service proxy to
get information about the target.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="exchangeStore">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 5. Monitoring, Logging and Statistics<br/><h3><b>Description:</b></h3> Adds the current state of HTTP requests and responses to an "exchange store".<br/><h3><b>Explanation:</b></h3> Note that depending on the implementation of the exchange store, both request *and* response logging
might both be required for the exchange to be saved.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="formValidation">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 4. Interceptors/Features<br/><h3><b>Description:</b></h3> Using the formValidation interceptor you can validate the input of HTML forms.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="groovy">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 4. Interceptors/Features<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="groovyTemplate">
</xsd:element>
<xsd:element ref="http2xml">
</xsd:element>
<xsd:element ref="httpClient">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> The <i>httpClient</i> sends the request of an exchange to a Web
Server using the HTTP protocol. Usually it will be globally used
inside the transport. However, it is also possible to use it
inside a proxy to give the proxy an individual configuration for
its outgoing HTTP connection that is different from the global
configuration in the transport.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="headerFilter">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 4. Interceptors/Features<br/><h3><b>Description:</b></h3> Removes message headers matching a list of patterns.
The first matching child element will be acted upon by the filter.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="index">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 8. SOAP based Web Services<br/><h3><b>Description:</b></h3> The index feature lists available proxys at a simple Web page.
To use this feature just add a serviceProxy containing the index
element. Of course you can protect the service proxy by using
SSL or Username and Password.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="javascript">
</xsd:element>
<xsd:element ref="limit">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 6. Security<br/><h3><b>Description:</b></h3> Limits the maximum length of a HTTP message body.<br/><h3><b>Explanation:</b></h3> <p>
Note that due to the streaming nature of Membrane, a request header may already have been passed on to
the backend, when the condition "body.length > X" becomes true. In this case, further processing is
aborted and the connection to the backend is simply closed.
</p>
<p>
To apply <tt><limit/></tt> only to either requests or responses, wrap it in a corresponding tag:
<tt><request><limit ... /></request></tt>.
</p><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="balancer">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 7. Clustering and Loadbalancing<br/><h3><b>Description:</b></h3> Performs load-balancing between several nodes. Nodes sharing session state may be bundled into a cluster.<br/><h3><b>Explanation:</b></h3> May only be used as interceptor in a ServiceProxy.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="log">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 5. Monitoring, Logging and Statistics<br/><h3><b>Description:</b></h3> The log feature logs request and response messages to the log4j
framework. The messages will appear either on the console or in
a log file depending on the configuration of the
<i>conf/log4j.properties</i> file.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="login">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 6. Security<br/><h3><b>Description:</b></h3> <p>
The <i>login</i> interceptor can be used to restrict and secure end user access to an arbitrary web
application.
</p>
<p>
Users firstly have to authenticate themselves against a directory server using a username and password.
Secondly, a numeric token is then sent to the user's cell phone using a text message service. After
token verification, access to the web application is granted for the user's session. Single Sign On can
easily be realized using a small source code extension or modification of a web application.
</p><br/><h3><b>Explanation:</b></h3> <p>
The <i>login</i> interceptor combines 4 modules to implement its functionality. One implementation of
each of the 4 module types is required. (The <i>session manager</i> and <i>account blocker</i> have
default implementations.)
</p>
<ul>
<li>
<p>
The <i>user data provider</i> checks user passwords and provides additional data for each user (e.g.
cell phone number, Single Sign On data, etc.).
</p>
</li>
<li>
<p>
The <i>session manager</i> tracks the users' sessions across different HTTP requests (e.g. using a
session cookie).
</p>
</li>
<li>
<p>
The <i>account blocker</i> tracks the number of failed login attempts and might block future login
attempts for a specified amount of time.
</p>
</li>
<li>
<p>
The <i>token provider</i> generates the numeric token (possibly transmitting it to the user via a
secondary channel like text messaging).
</p>
</li>
</ul>
<p>
<img style="align:center; padding: 20px;" src="/images/doc/login.png" alt="login interceptor workflow"
title="login interceptor workflow"/>
</p>
<p>
(Whether text messages and LDAP is actually used depends on the configuration. Alternatives are
possible.)
</p>
<p>
The <i>login</i> interceptor realizes the login workflow. If all information entered by the user is
valid, the workflow is as follows:
</p>
<ul>
<li>The unauthenticated user is redirected to a login dialog.</li>
<li>The user enters her username and password. (Step 1.)</li>
<li>(A numeric token is sent to the user via text message, in case the <i>telekomSMSTokenProvider</i> is
used. Steps 5 and 6.)</li>
<li>The user enters her token. (Step 7.)</li>
<li>The user is redirected to the originally requested URL (or a generic URL, in case the login dialog
was directly requested). (Step 8.)</li>
</ul><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="analyser">
</xsd:element>
<xsd:element ref="methodOverride">
</xsd:element>
<xsd:element ref="oauth2authserver">
</xsd:element>
<xsd:element ref="oauth2Resource">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 6. Security<br/><h3><b>Description:</b></h3> Allows only authorized HTTP requests to pass through. Unauthorized requests get a redirect to the
authorization server as response.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="tokenValidator">
</xsd:element>
<xsd:element ref="prometheus">
</xsd:element>
<xsd:element ref="rest2Soap">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 8. SOAP based Web Services<br/><h3><b>Description:</b></h3> Converts REST requests into SOAP messages.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="rateLimiter">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Allows rate limiting (Experimental)<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="regExReplacer">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 4. Interceptors/Features<br/><h3><b>Description:</b></h3> Runs a regular-expression-replacement on either the message body (default) or all header values.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="accountRegistration">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Allows account registration (!Experimental!)<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="request" type="com.predic8.membrane.core.config.spring.RequestParser">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Interceptors are usually applied to requests and responses. By nesting interceptors into a
<request> Element you can limit their applictaion to requests only.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="response" type="com.predic8.membrane.core.config.spring.ResponseParser">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Interceptors are usually applied to requests and responses. By nesting interceptors into a
<response> Element you can limit their applictaion to responses only.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="reverseProxying">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 4. Interceptors/Features<br/><h3><b>Description:</b></h3> Rewrites the scheme, hostname and port in the "Location" header in HTTP responses,
as well as in the "Destination" header in HTTP requests. The rewriting reflects the different schemes,
hostnames and ports used to access Membrane Service Proxy vs. the target HTTP server.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="rewriter">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 4. Interceptors/Features<br/><h3><b>Description:</b></h3> <p>
Rewrites the path of incoming requests based on a mapping or redirects requests.
</p><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="ruleMatching">
</xsd:element>
<xsd:element ref="soap2Rest">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 8. SOAP based Web Services<br/><h3><b>Description:</b></h3> Converts SOAP messages into REST requests.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="soapStackTraceFilter">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 8. SOAP based Web Services<br/><h3><b>Description:</b></h3> <p>
The <i>soapStackTraceFilter</i> removes SOAP stack traces from message bodies.
</p><br/><h3><b>Explanation:</b></h3> <p>
Using this interceptor hides sensitive information, as the structure of your backend source code, from the caller.
</p>
<p>
The <i>soapStackTraceFilter</i> works without further configuration with most backend servers, but it is
advised to test its functionality in combination with your SOAP service provider before deploying it in
production.
</p><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="spdy">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Allow HTTP protocol upgrades to the <a
href="https://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1">SPDY protocol</a>.
After the upgrade, the connection's data packets are simply forwarded
and not inspected.<br/><h3><b>Default:</b></h3> false<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="stompClient">
</xsd:element>
<xsd:element ref="soapOperationExtractor">
</xsd:element>
<xsd:element ref="interceptor">
</xsd:element>
<xsd:element ref="statisticsCSV">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 5. Monitoring, Logging and Statistics<br/><h3><b>Description:</b></h3> Writes statistics (time, status code, hostname, URI, etc.) about exchanges passing through into a CSV
file (one line per exchange).<br/><h3><b>Explanation:</b></h3> Note that the CSV file is UTF-8 encoded.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="statisticsJDBC">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 5. Monitoring, Logging and Statistics<br/><h3><b>Description:</b></h3> Writes statistics (time, status code, hostname, URI, etc.) about exchanges passing through into a
database (one row per exchange).<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="statisticsProvider">
</xsd:element>
<xsd:element ref="swaggerApiKeyRequirer">
</xsd:element>
<xsd:element ref="swaggerRewriter">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Allow Swagger proxying<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="tcp">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Allow HTTP protocol upgrades to the <a
href="http://tools.ietf.org/html/rfc793">TCP protocol</a>.
After the upgrade, the connection's data packets are simply forwarded
and not inspected.<br/><h3><b>Default:</b></h3> false<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="testService">
</xsd:element>
<xsd:element ref="throttle">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 6. Security<br/><h3><b>Description:</b></h3> <p>
The throttle feature can slow down traffic to thwart denial of service attacks.
</p><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="urlNormalizer">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 4. Interceptors/Features<br/><h3><b>Description:</b></h3> <p>
Replaces "/./" in the request URI's path by "/".
</p>
<p>
Necessary, as old SOA model versions do not normalize URIs before requesting them. Our WSDLPublisher
links to XSD Schemas using relative paths (as we want the links to work under any servlet's context
root). The SOA model then combines "http://foo/material/ArticleService?wsdl" and
"./ArticleService?xsd=1" to "http://foo/material/./ArticleService?xsd=1". This URI is sent to Membrane's
new soapProxy which has configured a serviceProxy-path of "\Q/material/ArticleService\E.*" which does
not match.
</p><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="userFeature">
<xsd:annotation>
<xsd:documentation></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="validator">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 8. SOAP based Web Services<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="wadlRewriter">
</xsd:element>
<xsd:element ref="wsdlRewriter">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 8. SOAP based Web Services<br/><h3><b>Description:</b></h3> <p>The <i>wsdlRewriter</i> rewrites endpoint addresses of services and XML Schema locations in WSDL documents.</p><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="wsdlPublisher">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 8. SOAP based Web Services<br/><h3><b>Description:</b></h3> <p>
The <i>wsdlPublisher</i> can be used to serve WSDL files (and attached XML Schema Documents), if your
backend service does not already do so.
</p><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="webServer">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 4. Interceptors/Features<br/><h3><b>Description:</b></h3> Serves static files based on the request's path.<br/><h3><b>Explanation:</b></h3> <p>
Note that <i>docBase</i> any <i>location</i>: A relative or absolute directory, a
"classpath://com.predic8.membrane.core.interceptor.administration.docBase" expression or a URL.
</p>
<p>
The interceptor chain will not continue beyond this interceptor, as it either successfully returns a
HTTP response with the contents of a file, or a "404 Not Found." error.
</p><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="webServiceExplorer">
</xsd:element>
<xsd:element ref="webSocket">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Allow HTTP protocol upgrades to the <a
href="http://tools.ietf.org/html/rfc6455">WebSocket protocol</a>.
After the upgrade, the connection's data packets are simply forwarded
and not inspected.<br/><h3><b>Default:</b></h3> false<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="xmlContentFilter">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 3. Enterprise Integration Patterns<br/><h3><b>Description:</b></h3> <p>
The <i>xmlContentFilter</i> removes certain XML elements from message bodies. The elements are described
using an XPath expression.
</p><br/><h3><b>Explanation:</b></h3> <p>
If the XPath expression is simple enough, a StAX-Parser is used to determine whether the XPath might
match a message at all. This can improve performance significantly, as a DOM tree does probably not have
to to be constructed for every message. This is, for example, the case in <listing name="example"> <src
lang="xml"> <xmlContentFilter xPath="//*[local-name()='Fault' and
namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/']//*[local-name()='stacktrace']" />
</src> <caption>xmlContentFilter using a StAX-Parser for improved performance</caption> </listing> where
the existence of the <Fault>-element is checked using the StAX-parser before the DOM is
constructed.
</p>
<p>
If the message body is not well-formed XML, it is left unchanged. If the message is XOP-encoded, the
XPath-expression is run on the reconstituted message; if it matches, the message is replaced by the
modified reconstituted message.
</p><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="xmlProtection">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 6. Security<br/><h3><b>Description:</b></h3> Prohibits XML documents to be passed through that look like XML attacks on older parsers. Too many
attributes, too long element names are such indications. DTD definitions will simply be removed.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="switch">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 3. Enterprise Integration Patterns<br/><h3><b>Description:</b></h3> Changes an exchange's target based on a series of XPath expressions.<br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="transform">
<xsd:annotation>
<xsd:documentation><h3><b>Topic:</b></h3> 3. Enterprise Integration Patterns<br/><h3><b>Description:</b></h3> <p>
The transform feature applies an XSLT transformation to the content in the body of a message. After the
transformation the body content is replaced with the result of the transformation.
</p><br/></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:any namespace="##other" processContents="strict" />
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="language" type="xsd:string" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> the language of the 'test' condition<br/><h3><b>Example:</b></h3> groovy<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="test" type="xsd:string" use="required">
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> the condition to be tested<br/><h3><b>Example:</b></h3> exc.request.header.userAgentSupportsSNI<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="com.predic8.membrane.core.config.spring.ConnectionParser">
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="keepAliveTimeout" type="spel_number" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Time in milliseconds after which an open connection to the server is not reused. Be sure to set it to a smaller value than the KeepAlive
directive on your server. Note that the a "Keep-Alive" header in the response always takes precedence.<br/><h3><b>Example:</b></h3> 30000<br/><h3><b>Default:</b></h3> 4000<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="timeout" type="spel_number" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> Socket timeout (connect, read, etc.) in milliseconds.<br/><h3><b>Default:</b></h3> 10000<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="localAddr" type="xsd:string" >
<xsd:annotation>
<xsd:documentation><h3><b>Description:</b></h3> The local IP address to use for outbound connections.<br/><h3><b>Default:</b></h3> not set<br/></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="counter">
<xsd:complexType>
<xsd:complexContent >
<xsd:extension base="beans:identifiedType">
<xsd:sequence>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required">