Skip to content

Commit f7e0924

Browse files
committed
attempt to fix breakage in Java 6 where AutoCloseable is not available without resorting to reflection or loading classes by name
1 parent 5244a90 commit f7e0924

File tree

7 files changed

+154
-25
lines changed

7 files changed

+154
-25
lines changed

.travis.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
language: java
2+
sudo: false
23
jdk:
34
- openjdk6
4-
- oraclejdk7
5+
- oraclejdk7
6+
- oraclejdk8
7+
- oraclejdk9

pom.xml

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,24 @@ application while protecting against XSS.
5353

5454
<build>
5555
<plugins>
56+
<plugin>
57+
<groupId>org.codehaus.mojo</groupId>
58+
<artifactId>build-helper-maven-plugin</artifactId>
59+
<version>1.10</version>
60+
<executions>
61+
<!-- This is a horrible hack. We need to support AutoCloseable
62+
which is @since 1.7 but also need to compile on 1.6. -->
63+
<execution>
64+
<phase>generate-sources</phase>
65+
<goals><goal>add-source</goal></goals>
66+
<configuration>
67+
<sources>
68+
<source>src/main/java-${java.vm.specification.version}</source>
69+
</sources>
70+
</configuration>
71+
</execution>
72+
</executions>
73+
</plugin>
5674
<plugin>
5775
<groupId>external.atlassian.jgitflow</groupId>
5876
<artifactId>jgitflow-maven-plugin</artifactId>
@@ -238,14 +256,14 @@ application while protecting against XSS.
238256
<dependency>
239257
<groupId>junit</groupId>
240258
<artifactId>junit</artifactId>
241-
<version>[3.8.1,)</version>
259+
<version>4.12</version>
242260
<scope>test</scope>
243261
</dependency>
244262

245263
<dependency>
246264
<groupId>nu.validator.htmlparser</groupId>
247265
<artifactId>htmlparser</artifactId>
248-
<version>[1.2.1,)</version>
266+
<version>1.4</version>
249267
<scope>test</scope>
250268
</dependency>
251269
</dependencies>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.owasp.html;
2+
3+
import java.io.IOException;
4+
import javax.annotation.WillCloseWhenClosed;
5+
6+
final class AutoCloseableHtmlStreamRenderer extends HtmlStreamRenderer {
7+
8+
static boolean isAutoCloseable(Object o) {
9+
return false;
10+
}
11+
12+
static AutoCloseableHtmlStreamRenderer createAutoCloseableHtmlStreamRenderer(
13+
@WillCloseWhenClosed
14+
Appendable output, Handler<? super IOException> errorHandler,
15+
Handler<? super String> badHtmlHandler) {
16+
throw new UnsupportedOperationException();
17+
}
18+
19+
AutoCloseableHtmlStreamRenderer(
20+
@WillCloseWhenClosed
21+
Appendable output, Handler<? super IOException> errorHandler,
22+
Handler<? super String> badHtmlHandler) {
23+
super(output, errorHandler, badHtmlHandler);
24+
}
25+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.owasp.html;
2+
3+
import java.io.IOException;
4+
import javax.annotation.WillCloseWhenClosed;
5+
6+
final class AutoCloseableHtmlStreamRenderer extends HtmlStreamRenderer
7+
implements AutoCloseable {
8+
private final AutoCloseable closeable;
9+
10+
static boolean isAutoCloseable(Object o) {
11+
return o instanceof AutoCloseable;
12+
}
13+
14+
static AutoCloseableHtmlStreamRenderer createAutoCloseableHtmlStreamRenderer(
15+
@WillCloseWhenClosed
16+
Appendable output, Handler<? super IOException> errorHandler,
17+
Handler<? super String> badHtmlHandler) {
18+
return new AutoCloseableHtmlStreamRenderer(
19+
output, errorHandler, badHtmlHandler);
20+
}
21+
22+
private AutoCloseableHtmlStreamRenderer(
23+
@WillCloseWhenClosed
24+
Appendable output, Handler<? super IOException> errorHandler,
25+
Handler<? super String> badHtmlHandler) {
26+
super(output, errorHandler, badHtmlHandler);
27+
this.closeable = (AutoCloseable) output;
28+
}
29+
30+
public void close() throws Exception {
31+
if (isDocumentOpen()) { closeDocument(); }
32+
closeable.close();
33+
}
34+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.owasp.html;
2+
3+
import java.io.IOException;
4+
import javax.annotation.WillCloseWhenClosed;
5+
6+
final class AutoCloseableHtmlStreamRenderer extends HtmlStreamRenderer
7+
implements AutoCloseable {
8+
private final AutoCloseable closeable;
9+
10+
static boolean isAutoCloseable(Object o) {
11+
return o instanceof AutoCloseable;
12+
}
13+
14+
static AutoCloseableHtmlStreamRenderer createAutoCloseableHtmlStreamRenderer(
15+
@WillCloseWhenClosed
16+
Appendable output, Handler<? super IOException> errorHandler,
17+
Handler<? super String> badHtmlHandler) {
18+
return new AutoCloseableHtmlStreamRenderer(
19+
output, errorHandler, badHtmlHandler);
20+
}
21+
22+
private AutoCloseableHtmlStreamRenderer(
23+
@WillCloseWhenClosed
24+
Appendable output, Handler<? super IOException> errorHandler,
25+
Handler<? super String> badHtmlHandler) {
26+
super(output, errorHandler, badHtmlHandler);
27+
this.closeable = (AutoCloseable) output;
28+
}
29+
30+
public void close() throws Exception {
31+
if (isDocumentOpen()) { closeDocument(); }
32+
closeable.close();
33+
}
34+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.owasp.html;
2+
3+
import java.io.IOException;
4+
import javax.annotation.WillCloseWhenClosed;
5+
6+
final class AutoCloseableHtmlStreamRenderer extends HtmlStreamRenderer
7+
implements AutoCloseable {
8+
private final AutoCloseable closeable;
9+
10+
static boolean isAutoCloseable(Object o) {
11+
return o instanceof AutoCloseable;
12+
}
13+
14+
static AutoCloseableHtmlStreamRenderer createAutoCloseableHtmlStreamRenderer(
15+
@WillCloseWhenClosed
16+
Appendable output, Handler<? super IOException> errorHandler,
17+
Handler<? super String> badHtmlHandler) {
18+
return new AutoCloseableHtmlStreamRenderer(
19+
output, errorHandler, badHtmlHandler);
20+
}
21+
22+
private AutoCloseableHtmlStreamRenderer(
23+
@WillCloseWhenClosed
24+
Appendable output, Handler<? super IOException> errorHandler,
25+
Handler<? super String> badHtmlHandler) {
26+
super(output, errorHandler, badHtmlHandler);
27+
this.closeable = (AutoCloseable) output;
28+
}
29+
30+
public void close() throws Exception {
31+
if (isDocumentOpen()) { closeDocument(); }
32+
closeable.close();
33+
}
34+
}

src/main/java/org/owasp/html/HtmlStreamRenderer.java

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ public static HtmlStreamRenderer create(
7474
if (output instanceof Closeable) {
7575
return new CloseableHtmlStreamRenderer(
7676
output, ioExHandler, badHtmlHandler);
77-
} else if (output instanceof AutoCloseable) {
78-
return new AutoCloseableHtmlStreamRenderer(
77+
} else if (AutoCloseableHtmlStreamRenderer.isAutoCloseable(output)) {
78+
return AutoCloseableHtmlStreamRenderer.createAutoCloseableHtmlStreamRenderer(
7979
output, ioExHandler, badHtmlHandler);
8080
} else {
8181
return new HtmlStreamRenderer(output, ioExHandler, badHtmlHandler);
@@ -96,7 +96,7 @@ public static HtmlStreamRenderer create(
9696
return create(output, Handler.PROPAGATE, badHtmlHandler);
9797
}
9898

99-
private HtmlStreamRenderer(
99+
protected HtmlStreamRenderer(
100100
Appendable output, Handler<? super IOException> ioExHandler,
101101
Handler<? super String> badHtmlHandler) {
102102
this.output = output;
@@ -421,23 +421,4 @@ public void close() throws IOException {
421421
closeable.close();
422422
}
423423
}
424-
425-
static class AutoCloseableHtmlStreamRenderer extends HtmlStreamRenderer
426-
implements AutoCloseable {
427-
private final AutoCloseable closeable;
428-
429-
@SuppressWarnings("synthetic-access")
430-
AutoCloseableHtmlStreamRenderer(
431-
@WillCloseWhenClosed
432-
Appendable output, Handler<? super IOException> errorHandler,
433-
Handler<? super String> badHtmlHandler) {
434-
super(output, errorHandler, badHtmlHandler);
435-
this.closeable = (AutoCloseable) output;
436-
}
437-
438-
public void close() throws Exception {
439-
if (isDocumentOpen()) { closeDocument(); }
440-
closeable.close();
441-
}
442-
}
443424
}

0 commit comments

Comments
 (0)