1
1
/*
2
- * Copyright (c) 2003, 2021 Oracle and/or its affiliates. All rights reserved.
2
+ * Copyright (c) 2003, 2025 Oracle and/or its affiliates. All rights reserved.
3
3
*
4
4
* This program and the accompanying materials are made available under the
5
5
* terms of the Eclipse Distribution License v. 1.0, which is available at
25
25
import java .nio .file .StandardOpenOption ;
26
26
import java .util .Arrays ;
27
27
import java .util .Collection ;
28
+ import java .util .Map ;
28
29
import java .util .logging .Logger ;
29
30
30
31
import static junit .framework .TestCase .assertTrue ;
@@ -73,6 +74,9 @@ public class JAXBContextTest {
73
74
// scenario name - just for logging
74
75
String scenario ;
75
76
77
+ // properties to pass to JAXBContext#newContext
78
+ private Map <String , ?> properties ;
79
+
76
80
// java policy file for testing w/security manager
77
81
private String expectedFactory ;
78
82
private Class <?> expectedException ;
@@ -83,70 +87,74 @@ public static Collection configurations() {
83
87
return Arrays .asList (new Object [][]{
84
88
// scenario-name, jaxb.properties, svc, arg1, arg2, system-props
85
89
// {"scenario-1", FACTORY_ID_LEGACY + "="+PACKAGE_LEGACY+"Valid", null, PACKAGE_LEGACY+"Valid$JAXBContext1", null, null},
86
- {"scenario-3" , FACTORY_ID_LEGACY + "=non.existing.FactoryClass" , null , null , jakarta .xml .bind .JAXBException .class , null },
87
- {"scenario-4" , FACTORY_ID_LEGACY + "=" +PACKAGE_LEGACY +"Invalid" , null , null , jakarta .xml .bind .JAXBException .class , null },
90
+ {"scenario-3" , FACTORY_ID_LEGACY + "=non.existing.FactoryClass" , null , null , jakarta .xml .bind .JAXBException .class , null , null },
91
+ {"scenario-4" , FACTORY_ID_LEGACY + "=" +PACKAGE_LEGACY +"Invalid" , null , null , jakarta .xml .bind .JAXBException .class , null , null },
88
92
// {"scenario-13", FACTORY_ID_LEGACY + "="+PACKAGE_LEGACY+"Valid", PACKAGE_LEGACY+"Valid2", PACKAGE_LEGACY+"Valid$JAXBContext1", null, PACKAGE_LEGACY+"Valid3"},
89
93
90
94
// {"scenario-1", FACTORY_ID_LEGACY + "="+PACKAGE_SPI+"Valid", null, PACKAGE_SPI+"Valid$JAXBContext1", null, null},
91
- {"scenario-3" , FACTORY_ID_LEGACY + "=non.existing.FactoryClass" , null , null , jakarta .xml .bind .JAXBException .class , null },
92
- {"scenario-4" , FACTORY_ID_LEGACY + "=" +PACKAGE_SPI +"Invalid" , null , null , jakarta .xml .bind .JAXBException .class , null },
95
+ {"scenario-3" , FACTORY_ID_LEGACY + "=non.existing.FactoryClass" , null , null , jakarta .xml .bind .JAXBException .class , null , null },
96
+ {"scenario-4" , FACTORY_ID_LEGACY + "=" +PACKAGE_SPI +"Invalid" , null , null , jakarta .xml .bind .JAXBException .class , null , null },
93
97
// {"scenario-13", FACTORY_ID_LEGACY + "="+PACKAGE_SPI+"Valid", PACKAGE_SPI+"Valid2", PACKAGE_SPI+"Valid$JAXBContext1", null, PACKAGE_SPI+"Valid3"},
94
98
95
99
// {"scenario-1", FACTORY_ID + "="+PACKAGE_SPI+"Valid", null, PACKAGE_SPI+"Valid$JAXBContext1", null, null},
96
- {"scenario-3" , FACTORY_ID + "=non.existing.FactoryClass" , null , null , jakarta .xml .bind .JAXBException .class , null },
97
- {"scenario-4" , FACTORY_ID + "=" +PACKAGE_SPI +"Invalid" , null , null , jakarta .xml .bind .JAXBException .class , null },
100
+ {"scenario-3" , FACTORY_ID + "=non.existing.FactoryClass" , null , null , jakarta .xml .bind .JAXBException .class , null , null },
101
+ {"scenario-4" , FACTORY_ID + "=" +PACKAGE_SPI +"Invalid" , null , null , jakarta .xml .bind .JAXBException .class , null , null },
98
102
// {"scenario-13", FACTORY_ID + "="+PACKAGE_SPI+"Valid", PACKAGE_SPI+"Valid2", PACKAGE_SPI+"Valid$JAXBContext1", null, PACKAGE_SPI+"Valid3"},
99
103
100
104
// {"scenario-1", FACTORY_ID + "="+PACKAGE_LEGACY+"Valid", null, PACKAGE_LEGACY+"Valid$JAXBContext1", null, null},
101
- {"scenario-3" , FACTORY_ID + "=non.existing.FactoryClass" , null , null , jakarta .xml .bind .JAXBException .class , null },
102
- {"scenario-4" , FACTORY_ID + "=" +PACKAGE_LEGACY +"Invalid" , null , null , jakarta .xml .bind .JAXBException .class , null },
105
+ {"scenario-3" , FACTORY_ID + "=non.existing.FactoryClass" , null , null , jakarta .xml .bind .JAXBException .class , null , null },
106
+ {"scenario-4" , FACTORY_ID + "=" +PACKAGE_LEGACY +"Invalid" , null , null , jakarta .xml .bind .JAXBException .class , null , null },
103
107
// {"scenario-13", FACTORY_ID + "="+PACKAGE_LEGACY+"Valid", PACKAGE_LEGACY+"Valid2", PACKAGE_LEGACY+"Valid$JAXBContext1", null, PACKAGE_LEGACY+"Valid3"},
104
108
105
109
106
- {"scenario-2" , "something=AnotherThing" , null , null , jakarta .xml .bind .JAXBException .class , null },
110
+ {"scenario-2" , "something=AnotherThing" , null , null , jakarta .xml .bind .JAXBException .class , null , null },
107
111
108
112
// service loader
109
- {"scenario-8" , null , PACKAGE_SPI +"Valid\n " , PACKAGE_SPI +"Valid$JAXBContext1" , null , null },
110
- {"scenario-9" , null , PACKAGE_SPI +"Valid" , PACKAGE_SPI +"Valid$JAXBContext1" , null , null },
111
- {"scenario-11" , null , PACKAGE_SPI +"Invalid" , null , jakarta .xml .bind .JAXBException .class , null },
112
- {"scenario-15" , null , PACKAGE_SPI +"Valid" , PACKAGE_SPI +"Valid$JAXBContext1" , null , null },
113
+ {"scenario-8" , null , PACKAGE_SPI +"Valid\n " , PACKAGE_SPI +"Valid$JAXBContext1" , null , null , null },
114
+ {"scenario-9" , null , PACKAGE_SPI +"Valid" , PACKAGE_SPI +"Valid$JAXBContext1" , null , null , null },
115
+ {"scenario-11" , null , PACKAGE_SPI +"Invalid" , null , jakarta .xml .bind .JAXBException .class , null , null },
116
+ {"scenario-15" , null , PACKAGE_SPI +"Valid" , PACKAGE_SPI +"Valid$JAXBContext1" , null , null , null },
113
117
114
118
// service loader - legacy
115
119
// {"scenario-8 legacy-svc", null, PACKAGE_SPI+"Valid\n", PACKAGE_SPI+"Valid$JAXBContext1", null, null},
116
120
// {"scenario-9 legacy-svc", null, PACKAGE_SPI+"Valid", PACKAGE_SPI+"Valid$JAXBContext1", null, null},
117
- {"scenario-11 legacy-svc" , null , PACKAGE_SPI +"Invalid" , null , jakarta .xml .bind .JAXBException .class , null },
121
+ {"scenario-11 legacy-svc" , null , PACKAGE_SPI +"Invalid" , null , jakarta .xml .bind .JAXBException .class , null , null },
118
122
// {"scenario-15 legacy-svc", null, PACKAGE_SPI+"Valid", PACKAGE_SPI+"Valid$JAXBContext1", null, null},
119
123
120
124
// service loader - legacy
121
125
// {"scenario-8 legacy-svc", null, PACKAGE_LEGACY+"Valid\n", PACKAGE_LEGACY+"Valid$JAXBContext1", null, null},
122
126
// {"scenario-9 legacy-svc", null, PACKAGE_LEGACY+"Valid", PACKAGE_LEGACY+"Valid$JAXBContext1", null, null},
123
- {"scenario-11 legacy-svc" , null , PACKAGE_LEGACY +"Invalid" , null , jakarta .xml .bind .JAXBException .class , null },
127
+ {"scenario-11 legacy-svc" , null , PACKAGE_LEGACY +"Invalid" , null , jakarta .xml .bind .JAXBException .class , null , null },
124
128
// {"scenario-15 legacy-svc", null, PACKAGE_LEGACY+"Valid", PACKAGE_LEGACY+"Valid$JAXBContext1", null, null},
125
129
126
130
// system property
127
- {"scenario-5" , null , null , PACKAGE_SPI +"Valid$JAXBContext1" , null , PACKAGE_SPI +"Valid" },
128
- {"scenario-7" , null , null , null , jakarta .xml .bind .JAXBException .class , PACKAGE_SPI +"Invalid" },
129
- {"scenario-14" , null , PACKAGE_SPI +"Valid2" , PACKAGE_SPI +"Valid$JAXBContext1" , null , PACKAGE_SPI +"Valid" },
131
+ {"scenario-5" , null , null , PACKAGE_SPI +"Valid$JAXBContext1" , null , PACKAGE_SPI +"Valid" , null },
132
+ {"scenario-7" , null , null , null , jakarta .xml .bind .JAXBException .class , PACKAGE_SPI +"Invalid" , null },
133
+ {"scenario-14" , null , PACKAGE_SPI +"Valid2" , PACKAGE_SPI +"Valid$JAXBContext1" , null , PACKAGE_SPI +"Valid" , null },
134
+
135
+ {"scenario-5" , null , null , PACKAGE_LEGACY +"Valid$JAXBContext1" , null , PACKAGE_LEGACY +"Valid" , null },
136
+ {"scenario-7" , null , null , null , jakarta .xml .bind .JAXBException .class , PACKAGE_LEGACY +"Invalid" , null },
137
+ {"scenario-14" , null , PACKAGE_LEGACY +"Valid2" , PACKAGE_LEGACY +"Valid$JAXBContext1" , null , PACKAGE_LEGACY +"Valid" , null },
138
+ {"scenario-6" , null , null , null , jakarta .xml .bind .JAXBException .class , "jaxb.factory.NonExisting" , null },
130
139
131
- {"scenario-5" , null , null , PACKAGE_LEGACY +"Valid$JAXBContext1" , null , PACKAGE_LEGACY +"Valid" },
132
- {"scenario-7" , null , null , null , jakarta .xml .bind .JAXBException .class , PACKAGE_LEGACY +"Invalid" },
133
- {"scenario-14" , null , PACKAGE_LEGACY +"Valid2" , PACKAGE_LEGACY +"Valid$JAXBContext1" , null , PACKAGE_LEGACY +"Valid" },
134
- {"scenario-6" , null , null , null , jakarta .xml .bind .JAXBException .class , "jaxb.factory.NonExisting" },
140
+ {"scenario-10" , null , "jaxb.factory.NonExisting" , null , jakarta .xml .bind .JAXBException .class , null , null },
135
141
136
- {"scenario-10 " , null , "jaxb.factory.NonExisting" , null , jakarta .xml .bind .JAXBException .class , null },
142
+ {"scenario-12 " , null , null , DEFAULT , jakarta .xml .bind .JAXBException .class , null , null },
137
143
138
- {"scenario-12" , null , null , DEFAULT , jakarta .xml .bind .JAXBException .class , null },
144
+ // properties
145
+ {"scenario-17" , null , PACKAGE_SPI +"Valid" , PACKAGE_SPI +"Valid$JAXBContext1" , null , null , Map .of ("jakarta.xml.bind.JAXBContextFactory" , PACKAGE_SPI +"Valid" )},
139
146
});
140
147
}
141
148
142
- // scenario-name, jaxb.properties, svc, arg1, arg2, system-props
149
+ // scenario-name, jaxb.properties, svc, arg1, arg2, system-props, properties
143
150
public JAXBContextTest (
144
151
String scenario ,
145
152
String jaxbPropertiesClass ,
146
153
String spiClass ,
147
154
String expectedFactory ,
148
155
Class <?> expectedException ,
149
- String systemProperty
156
+ String systemProperty ,
157
+ Map <String , ?> properties
150
158
) {
151
159
152
160
// ensure setup may be done ...
@@ -161,6 +169,7 @@ public JAXBContextTest(
161
169
this .scenario = scenario ;
162
170
this .expectedFactory = expectedFactory ;
163
171
this .expectedException = expectedException ;
172
+ this .properties = properties ;
164
173
165
174
if (skipUnsafe && scenario .startsWith ("unsafe" )) {
166
175
log ("Skipping unsafe scenario:" + scenario );
@@ -187,7 +196,20 @@ public void testPath() throws IOException {
187
196
public void testClasses () throws IOException {
188
197
logConfigurations ();
189
198
try {
190
- JAXBContext ctx = JAXBContext .newInstance (new Class [] {A .class }, null );
199
+ JAXBContext ctx = JAXBContext .newInstance (new Class <?>[] {A .class }, properties );
200
+ handleResult (ctx );
201
+ } catch (Throwable throwable ) {
202
+ handleThrowable (throwable );
203
+ } finally {
204
+ doFinally ();
205
+ }
206
+ }
207
+
208
+ @ Test
209
+ public void testClassLoader () throws IOException {
210
+ logConfigurations ();
211
+ try {
212
+ JAXBContext ctx = JAXBContext .newInstance (A .class .getName (), JAXBContextTest .class .getClassLoader (), properties );
191
213
handleResult (ctx );
192
214
} catch (Throwable throwable ) {
193
215
handleThrowable (throwable );
0 commit comments