Commit c863d21
Close the .xsb output when a save is abandoned part-way through (#112)
Every saveXxx() in SchemaTypeSystemImpl runs the same sequence: construct an
XsbReader, write the component once to fill the string pool, call
writeRealHeader() - which opens a Filer output stream - write it again, then
writeEnd() to flush and close.
Nothing guards the middle. If any write throws, and they all raise
SchemaTypeLoaderException on an IO error, writeEnd() is skipped and the .xsb
output stream is left open with a partial file behind it. With scomp writing
one file per global type, a failure part-way through a large schema leaks a
descriptor for each of them.
Add XsbReader.closeOutputQuietly(), which releases a stream a completed
writeEnd() has already cleared, and call it from a finally in all eight save
methods. Closing quietly keeps the original failure from being masked.
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>1 parent c0c0c65 commit c863d21
3 files changed
Lines changed: 161 additions & 36 deletions
File tree
- src
- main/java/org/apache/xmlbeans/impl/schema
- test/java/org/apache/xmlbeans/impl/schema
Lines changed: 68 additions & 36 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
305 | 305 | | |
306 | 306 | | |
307 | 307 | | |
308 | | - | |
309 | | - | |
310 | | - | |
311 | | - | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
312 | 316 | | |
313 | 317 | | |
314 | 318 | | |
| |||
345 | 349 | | |
346 | 350 | | |
347 | 351 | | |
348 | | - | |
349 | | - | |
350 | | - | |
351 | | - | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
352 | 360 | | |
353 | 361 | | |
354 | 362 | | |
| |||
827 | 835 | | |
828 | 836 | | |
829 | 837 | | |
830 | | - | |
831 | | - | |
832 | | - | |
833 | | - | |
834 | | - | |
835 | | - | |
| 838 | + | |
| 839 | + | |
| 840 | + | |
| 841 | + | |
| 842 | + | |
| 843 | + | |
| 844 | + | |
| 845 | + | |
| 846 | + | |
| 847 | + | |
836 | 848 | | |
837 | 849 | | |
838 | 850 | | |
| |||
841 | 853 | | |
842 | 854 | | |
843 | 855 | | |
844 | | - | |
845 | | - | |
846 | | - | |
847 | | - | |
848 | | - | |
849 | | - | |
| 856 | + | |
| 857 | + | |
| 858 | + | |
| 859 | + | |
| 860 | + | |
| 861 | + | |
| 862 | + | |
| 863 | + | |
| 864 | + | |
| 865 | + | |
850 | 866 | | |
851 | 867 | | |
852 | 868 | | |
| |||
855 | 871 | | |
856 | 872 | | |
857 | 873 | | |
858 | | - | |
859 | | - | |
860 | | - | |
861 | | - | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
862 | 882 | | |
863 | 883 | | |
864 | 884 | | |
| |||
867 | 887 | | |
868 | 888 | | |
869 | 889 | | |
870 | | - | |
871 | | - | |
872 | | - | |
873 | | - | |
| 890 | + | |
| 891 | + | |
| 892 | + | |
| 893 | + | |
| 894 | + | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
874 | 898 | | |
875 | 899 | | |
876 | 900 | | |
| |||
879 | 903 | | |
880 | 904 | | |
881 | 905 | | |
882 | | - | |
883 | | - | |
884 | | - | |
885 | | - | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
886 | 914 | | |
887 | 915 | | |
888 | 916 | | |
889 | 917 | | |
890 | 918 | | |
891 | | - | |
892 | | - | |
893 | | - | |
894 | | - | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
895 | 927 | | |
896 | 928 | | |
897 | 929 | | |
| |||
Lines changed: 17 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
195 | 195 | | |
196 | 196 | | |
197 | 197 | | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
198 | 215 | | |
199 | 216 | | |
200 | 217 | | |
| |||
Lines changed: 76 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 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 | + | |
0 commit comments