5
5
import java .util .Optional ;
6
6
7
7
import org .apache .maven .plugin .logging .Log ;
8
+ import org .jvnet .jaxb .maven .XJCVersion ;
8
9
import org .jvnet .jaxb .maven .plugin .logging .NullLog ;
9
10
import org .jvnet .jaxb .maven .util .StringUtils ;
10
11
import org .xml .sax .EntityResolver ;
@@ -17,21 +18,41 @@ public class ReResolvingEntityResolverWrapper implements EntityResolver {
17
18
private final Log log ;
18
19
private final boolean disableSystemIdResolution ;
19
20
20
- public ReResolvingEntityResolverWrapper (EntityResolver entityResolver , Log log , boolean disableSystemIdResolution ) {
21
+ public ReResolvingEntityResolverWrapper (EntityResolver entityResolver , Log log , boolean disableSystemIdResolution , XJCVersion version ) {
21
22
if (entityResolver == null ) {
22
23
throw new IllegalArgumentException ("Provided entity resolver must not be null." );
23
24
}
24
25
this .entityResolver = entityResolver ;
25
26
this .log = Optional .ofNullable (log ).orElse (NullLog .INSTANCE );
26
- this .disableSystemIdResolution = disableSystemIdResolution ;
27
- if (disableSystemIdResolution ) {
28
- log .warn ("ReResolvingEntityResolverWrapper : systemIdResolution fix is disable, you may have problems with schema resolution." );
27
+ this .disableSystemIdResolution = computeDisableSystemIdResolution (disableSystemIdResolution , version );
28
+ }
29
+
30
+ private boolean computeDisableSystemIdResolution (boolean disableSystemIdResolution , XJCVersion version ) {
31
+ boolean finalDisableSystemIdResolution = disableSystemIdResolution ;
32
+ boolean versionCheck = false ;
33
+ if (version .isKnown ()) {
34
+ versionCheck = true ;
35
+ if (version .gte (2 , 3 , 9 ) && !disableSystemIdResolution ) {
36
+ log .info ("ReResolvingEntityResolverWrapper : systemIdResolution fix has been auto-disabled (current running XJC is " + version .getRaw () + ")." );
37
+ finalDisableSystemIdResolution = true ;
38
+ } else if (version .gte (2 , 3 , 4 ) && version .lt (2 , 3 , 9 ) && disableSystemIdResolution ) {
39
+ log .info ("ReResolvingEntityResolverWrapper : systemIdResolution fix has been auto-enabled (current running XJC is " + version .getRaw () + ")." );
40
+ finalDisableSystemIdResolution = false ;
41
+ }
42
+ }
43
+ if (finalDisableSystemIdResolution ) {
44
+ if (!versionCheck ) {
45
+ log .warn ("ReResolvingEntityResolverWrapper : systemIdResolution fix is disable, you may have problems with schema resolution." );
46
+ } else {
47
+ log .debug ("ReResolvingEntityResolverWrapper : systemIdResolution fix is disabled" );
48
+ }
29
49
} else {
30
50
log .debug ("ReResolvingEntityResolverWrapper : systemIdResolution fix is enabled" );
31
51
}
32
- }
52
+ return finalDisableSystemIdResolution ;
53
+ }
33
54
34
- @ Override
55
+ @ Override
35
56
public InputSource resolveEntity (String publicId , String systemId )
36
57
throws SAXException , IOException {
37
58
log .debug (MessageFormat .format ("ReResolvingEntityResolverWrapper : Resolving publicId [{0}], systemId [{1}]." , publicId , systemId ));
0 commit comments