While doing xslt transformation the timezone is serialized in a weird way
I tried switching implementations between xalan and jaxen but no change was observed.
Tried to look into formatting the date manualy but can't seem to find the way to add time zone (eg, +05:30 or -08:00) using that.
Has anybody faced a similar problem like this?
Result Produced
<?xml version="1.0" encoding="UTF-8"?>
<Test xmlns:date="http://exslt.org/dates-and-times" version="1.0">
2019-06-20T10:23:31+05:1800000
</Test>
Expected Result
<?xml version="1.0" encoding="UTF-8"?>
<Test xmlns:date="http://exslt.org/dates-and-times" version="1.0">
2019-06-20T10:23:31+05:30
</Test>
My sample code is as below
Main.java
package test;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.TimeZone;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Main {
public static void main(String[] args) {
printTransformed(TimeZone.getTimeZone("Asia/Kolkata"));
}
private static void printTransformed(TimeZone timeZone) {
TimeZone.setDefault(timeZone);
try {
final StreamSource source = new StreamSource(
Files.newInputStream(
Paths.get(PrintAllTimeZones1.class.getResource("/input.xml").toURI())));
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Templates xsltTemplate = transformerFactory.newTemplates(
new StreamSource(Files.newInputStream(
Paths.get(Application.class.getResource("/test.xslt").toURI()))));
final Transformer transformer = xsltTemplate.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, UTF_8.name());
final ByteArrayOutputStream out = new ByteArrayOutputStream();
final StreamResult result = new StreamResult(out);
transformer.transform(source, result);
System.out.println(result.getOutputStream().toString());
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
}
input.xml
<?xml version="1.0" encoding="UTF-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
test.xslt
<Test version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:date="http://exslt.org/dates-and-times">
<xsl:value-of select="date:date-time()"/>
</Test>
build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.4.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
bootJar {
baseName = 'gs-spring-boot'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
compile 'jaxen:jaxen'
testCompile("junit:junit")
compile group: 'xalan', name: 'xalan', version: '2.7.2'
compile group: 'xmlunit', name: 'xmlunit', version: '1.6'
compile group: 'org.apache.avro', name: 'avro', version: '1.9.0'
}