Skip to content

Commit ea29552

Browse files
committed
#170 two versions for old and new saxon
1 parent 07259a2 commit ea29552

3 files changed

Lines changed: 57 additions & 40 deletions

File tree

pom.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ OF THE POSSIBILITY OF SUCH DAMAGE.
7272
<dependency>
7373
<groupId>org.cactoos</groupId>
7474
<artifactId>cactoos</artifactId>
75-
<version>0.53.0</version>
75+
<version>0.54.0</version>
7676
</dependency>
7777
<dependency>
7878
<groupId>com.jcabi</groupId>
@@ -95,14 +95,14 @@ OF THE POSSIBILITY OF SUCH DAMAGE.
9595
<dependency>
9696
<groupId>net.sf.saxon</groupId>
9797
<artifactId>Saxon-HE</artifactId>
98-
<version>9.8.0-5</version>
98+
<version>11.4</version>
9999
<scope>provided</scope>
100100
</dependency>
101101
<dependency>
102102
<groupId>xml-apis</groupId>
103103
<artifactId>xml-apis</artifactId>
104104
<!-- don't change it, leave at 1.4.01 -->
105-
<version>1.4.01</version>
105+
<version>2.0.2</version>
106106
<scope>provided</scope>
107107
</dependency>
108108
<dependency>
@@ -114,7 +114,7 @@ OF THE POSSIBILITY OF SUCH DAMAGE.
114114
<dependency>
115115
<groupId>org.slf4j</groupId>
116116
<artifactId>slf4j-log4j12</artifactId>
117-
<version>2.0.0-alpha5</version>
117+
<version>2.0.0</version>
118118
<scope>test</scope>
119119
</dependency>
120120
<dependency>
@@ -132,7 +132,7 @@ OF THE POSSIBILITY OF SUCH DAMAGE.
132132
<dependency>
133133
<groupId>org.junit.platform</groupId>
134134
<artifactId>junit-platform-commons</artifactId>
135-
<version>1.8.2</version>
135+
<version>1.9.0</version>
136136
<scope>test</scope>
137137
</dependency>
138138
<dependency>
@@ -150,7 +150,7 @@ OF THE POSSIBILITY OF SUCH DAMAGE.
150150
<dependency>
151151
<groupId>org.hamcrest</groupId>
152152
<artifactId>hamcrest-core</artifactId>
153-
<version>1.3</version>
153+
<version>2.2</version>
154154
<scope>test</scope>
155155
</dependency>
156156
</dependencies>

src/main/java/com/jcabi/xml/XSLDocument.java

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import javax.xml.transform.stream.StreamResult;
5555
import javax.xml.transform.stream.StreamSource;
5656
import lombok.EqualsAndHashCode;
57+
import net.sf.saxon.Version;
5758
import net.sf.saxon.jaxp.TransformerImpl;
5859
import net.sf.saxon.serialize.MessageWarner;
5960
import org.cactoos.map.MapEntry;
@@ -335,11 +336,8 @@ public String toString() {
335336
public XML transform(final XML xml) {
336337
final Document target;
337338
try {
338-
target = XSLDocument.DFACTORY.newDocumentBuilder()
339-
.newDocument();
340-
this.transformInto(
341-
xml, new DOMResult(target)
342-
);
339+
target = XSLDocument.DFACTORY.newDocumentBuilder().newDocument();
340+
this.transformInto(xml, new DOMResult(target));
343341
} catch (final ParserConfigurationException ex) {
344342
throw new IllegalStateException(ex);
345343
}
@@ -378,15 +376,7 @@ private void transformInto(final XML xml, final Result result) {
378376
);
379377
trans.setErrorListener(errors);
380378
trans.setURIResolver(this.sources);
381-
if (
382-
"net.sf.saxon.jaxp.TransformerImpl".equals(
383-
trans.getClass().getCanonicalName()
384-
)
385-
) {
386-
TransformerImpl.class.cast(trans)
387-
.getUnderlyingController()
388-
.setMessageEmitter(new MessageWarner());
389-
}
379+
XSLDocument.prepare(trans);
390380
for (final Map.Entry<String, Object> ent
391381
: this.params.entrySet()) {
392382
trans.setParameter(ent.getKey(), ent.getValue());
@@ -404,9 +394,9 @@ private void transformInto(final XML xml, final Result result) {
404394
} catch (final TransformerException ex) {
405395
throw new IllegalArgumentException(
406396
String.format(
407-
"Failed to transform by %s: %s",
397+
"Failed to transform by %s: %s (%s)",
408398
factory.getClass().getName(),
409-
errors.summary()
399+
errors.summary(), ex.getMessageAndLocation()
410400
),
411401
ex
412402
);
@@ -415,4 +405,33 @@ private void transformInto(final XML xml, final Result result) {
415405
Logger.debug(this, "%s transformed XML", trans.getClass().getName());
416406
}
417407

408+
/**
409+
* Prepare it for error logging.
410+
* @param trans The transformer
411+
*/
412+
@SuppressWarnings("deprecation")
413+
private static void prepare(final Transformer trans) {
414+
final String type = trans.getClass().getCanonicalName();
415+
if (!"net.sf.saxon.jaxp.TransformerImpl".equals(type)) {
416+
return;
417+
}
418+
if (Version.getStructuredVersionNumber()[0] < 11) {
419+
TransformerImpl.class.cast(trans)
420+
.getUnderlyingController()
421+
.setMessageEmitter(new MessageWarner());
422+
}
423+
if (Version.getStructuredVersionNumber()[0] >= 11) {
424+
TransformerImpl.class.cast(trans)
425+
.getUnderlyingController()
426+
.setMessageHandler(
427+
message -> Logger.error(
428+
XSLDocument.class,
429+
"%s: %s",
430+
message.getLocation(),
431+
message.toString()
432+
)
433+
);
434+
}
435+
}
436+
418437
}

src/test/java/com/jcabi/xml/XSLDocumentTest.java

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -185,24 +185,22 @@ public void transformsIntoTextWithIntegerParams() {
185185

186186
@Test
187187
public void catchesXslErrorMessages() {
188-
try {
189-
new XSLDocument(
190-
StringUtils.join(
191-
" <xsl:stylesheet",
192-
" xmlns:xsl='http://www.w3.org/1999/XSL/Transform'",
193-
" version='2.0'><xsl:template match='/'>",
194-
"<xsl:message terminate='yes'>",
195-
"<xsl:text>oopsie...</xsl:text>",
196-
" </xsl:message></xsl:template></xsl:stylesheet>"
197-
)
198-
).transform(new XMLDocument("<zz1/>"));
199-
Assertions.fail("Exception expected here");
200-
} catch (final IllegalArgumentException ex) {
201-
MatcherAssert.assertThat(
202-
ex.getLocalizedMessage(),
203-
Matchers.containsString("oopsie...")
204-
);
205-
}
188+
MatcherAssert.assertThat(
189+
Assertions.assertThrows(
190+
RuntimeException.class,
191+
() -> new XSLDocument(
192+
StringUtils.join(
193+
" <xsl:stylesheet",
194+
" xmlns:xsl='http://www.w3.org/1999/XSL/Transform'",
195+
" version='2.0'><xsl:template match='/'>",
196+
"<xsl:message terminate='yes'>",
197+
"<xsl:text>oopsie...</xsl:text>",
198+
" </xsl:message></xsl:template></xsl:stylesheet>"
199+
)
200+
).transform(new XMLDocument("<zz1/>"))
201+
).getLocalizedMessage(),
202+
Matchers.containsString("Processing terminated by xsl:message")
203+
);
206204
}
207205

208206
@Test

0 commit comments

Comments
 (0)