Made it working from one docker-compose file
This commit is contained in:
@@ -5,4 +5,6 @@ COPY ./index.html /usr/share/nginx/html
|
|||||||
COPY ./logo.png /usr/share/nginx/html
|
COPY ./logo.png /usr/share/nginx/html
|
||||||
COPY ./styles.css /usr/share/nginx/html
|
COPY ./styles.css /usr/share/nginx/html
|
||||||
COPY ./common.css /usr/share/nginx/html
|
COPY ./common.css /usr/share/nginx/html
|
||||||
COPY ./favicon.ico /usr/share/nginx/html
|
COPY ./favicon.ico /usr/share/nginx/html
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
|
|||||||
@@ -105,8 +105,8 @@ function performRequest(text, checkXML, checkTransform){
|
|||||||
//Form REST request, send, receive and display in resultArea
|
//Form REST request, send, receive and display in resultArea
|
||||||
async function restRequest(text) {
|
async function restRequest(text) {
|
||||||
const escapeChar = "specialEscapeChar";
|
const escapeChar = "specialEscapeChar";
|
||||||
// const addr = "http://localhost:8081/" + text;
|
const addr = "http://localhost:8081/" + text;
|
||||||
const addr = "http://gordon.zipper.release11.com:8081/" + text;
|
// const addr = "http://gordon.zipper.release11.com:8081/" + text;
|
||||||
|
|
||||||
var xmlData = document.getElementById("xmlArea").value.trim();
|
var xmlData = document.getElementById("xmlArea").value.trim();
|
||||||
var transformData = document.getElementById("transformArea").value.trim();
|
var transformData = document.getElementById("transformArea").value.trim();
|
||||||
@@ -153,4 +153,4 @@ async function restRequest(text) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
9
REST_XSLT/.gitignore
vendored
Normal file
9
REST_XSLT/.gitignore
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
target/
|
||||||
|
nbactions.xml
|
||||||
|
.idea/
|
||||||
|
.settings/
|
||||||
|
.classpath
|
||||||
|
.settings
|
||||||
|
.project
|
||||||
|
*.iml
|
||||||
|
.vscode
|
||||||
@@ -12,6 +12,8 @@
|
|||||||
<maven.compiler.source>11</maven.compiler.source>
|
<maven.compiler.source>11</maven.compiler.source>
|
||||||
<maven.compiler.target>11</maven.compiler.target>
|
<maven.compiler.target>11</maven.compiler.target>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<jackson.version>2.14.1</jackson.version>
|
||||||
|
<slf4j.version>2.0.6</slf4j.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
@@ -24,7 +26,7 @@
|
|||||||
<!-- <manifest>-->
|
<!-- <manifest>-->
|
||||||
<!-- <addClasspath>true</addClasspath>-->
|
<!-- <addClasspath>true</addClasspath>-->
|
||||||
<!-- <classpathPrefix>lib/</classpathPrefix>-->
|
<!-- <classpathPrefix>lib/</classpathPrefix>-->
|
||||||
<!-- <mainClass>Main</mainClass>-->
|
<!-- <mainClass>r11.mltx.restxslt.Main</mainClass>-->
|
||||||
<!-- </manifest>-->
|
<!-- </manifest>-->
|
||||||
<!-- </archive>-->
|
<!-- </archive>-->
|
||||||
<!-- </configuration>-->
|
<!-- </configuration>-->
|
||||||
@@ -48,7 +50,7 @@
|
|||||||
<manifest>
|
<manifest>
|
||||||
<addClasspath>true</addClasspath>
|
<addClasspath>true</addClasspath>
|
||||||
<classpathPrefix>lib/</classpathPrefix>
|
<classpathPrefix>lib/</classpathPrefix>
|
||||||
<mainClass>Main</mainClass>
|
<mainClass>r11.mltx.restxslt.Main</mainClass>
|
||||||
</manifest>
|
</manifest>
|
||||||
</archive>
|
</archive>
|
||||||
<descriptorRefs>
|
<descriptorRefs>
|
||||||
@@ -72,32 +74,30 @@
|
|||||||
</build>
|
</build>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<!-- Spark -->
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-core</artifactId>
|
|
||||||
<version>2.11.0</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
|
||||||
<artifactId>jackson-databind</artifactId>
|
|
||||||
<version>2.11.0</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.sparkjava</groupId>
|
<groupId>com.sparkjava</groupId>
|
||||||
<artifactId>spark-core</artifactId>
|
<artifactId>spark-core</artifactId>
|
||||||
<version>2.9.3</version>
|
<version>2.9.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- JSON -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>slf4j-simple</artifactId>
|
<artifactId>jackson-core</artifactId>
|
||||||
<version>1.6.2</version>
|
<version>${jackson.version}</version>
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
<version>${jackson.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- XSLT -->
|
<!-- XSLT -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.sf.saxon</groupId>
|
<groupId>net.sf.saxon</groupId>
|
||||||
<artifactId>Saxon-HE</artifactId>
|
<artifactId>Saxon-HE</artifactId>
|
||||||
<version>10.3</version>
|
<version>11.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>xalan</groupId>
|
<groupId>xalan</groupId>
|
||||||
@@ -105,30 +105,38 @@
|
|||||||
<version>2.7.2</version>
|
<version>2.7.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Logging -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-simple</artifactId>
|
||||||
|
<version>${slf4j.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>jcl-over-slf4j</artifactId>
|
<artifactId>jcl-over-slf4j</artifactId>
|
||||||
<version>1.7.0</version>
|
<version>${slf4j.version}</version>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>slf4j-api</artifactId>
|
||||||
<version>1.7.0</version>
|
<version>${slf4j.version}</version>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>slf4j-log4j12</artifactId>
|
<artifactId>slf4j-log4j12</artifactId>
|
||||||
<version>1.7.0</version>
|
<version>${slf4j.version}</version>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j</artifactId>
|
<artifactId>log4j-core</artifactId>
|
||||||
<version>1.2.14</version>
|
<version>2.19.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- JSON -->
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
15
REST_XSLT/src/main/java/r11/mltx/restxslt/Main.java
Normal file
15
REST_XSLT/src/main/java/r11/mltx/restxslt/Main.java
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package r11.mltx.restxslt;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application initializer
|
||||||
|
* @author Wojciech Czop
|
||||||
|
*/
|
||||||
|
public class Main {
|
||||||
|
/**
|
||||||
|
* Initializes the application
|
||||||
|
* @param args
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SparkInitializer.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,17 +1,27 @@
|
|||||||
|
package r11.mltx.restxslt;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonMappingException;
|
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import processors.Saxon;
|
import r11.mltx.restxslt.processors.Saxon;
|
||||||
import processors.Xalan;
|
import r11.mltx.restxslt.processors.Xalan;
|
||||||
import spark.*;
|
import spark.*;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class Main {
|
/**
|
||||||
public static void main(String[] args) {
|
* Class contains spark configuration and method initializing spark framework
|
||||||
|
* @author Wojciech Czop
|
||||||
|
*/
|
||||||
|
public class SparkInitializer {
|
||||||
|
/**
|
||||||
|
* Initializes spark framework
|
||||||
|
*/
|
||||||
|
public static void run(){
|
||||||
|
// TODO: Port value as property
|
||||||
Spark.port(8081);
|
Spark.port(8081);
|
||||||
|
|
||||||
Spark.after((Filter) (request, response) -> {
|
Spark.after((request, response) -> {
|
||||||
response.header("Access-Control-Allow-Origin", "*");
|
response.header("Access-Control-Allow-Origin", "*");
|
||||||
response.header("access-control-allow-headers", "*");
|
response.header("access-control-allow-headers", "*");
|
||||||
response.header("access-control-expose-headers", "*");
|
response.header("access-control-expose-headers", "*");
|
||||||
@@ -25,9 +35,11 @@ public class Main {
|
|||||||
System.out.println("Server is online");
|
System.out.println("Server is online");
|
||||||
}
|
}
|
||||||
|
|
||||||
static Route procinfoHandler = (Request req, Response resp) -> {
|
/**
|
||||||
|
* Handler that returns processor version
|
||||||
|
*/
|
||||||
|
private static Route procinfoHandler = (Request req, Response resp) -> {
|
||||||
try {
|
try {
|
||||||
// req.session().id
|
|
||||||
resp.header("processor", "Saxon " + Saxon.getVersion() + " over s9api");
|
resp.header("processor", "Saxon " + Saxon.getVersion() + " over s9api");
|
||||||
return Saxon.getVersion();
|
return Saxon.getVersion();
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
@@ -35,7 +47,11 @@ public class Main {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static Route xsdHandler = (Request req, Response resp) -> {
|
/**
|
||||||
|
* Handler that returns info if document is valid
|
||||||
|
* Also provides info about request time and processor
|
||||||
|
*/
|
||||||
|
private static Route xsdHandler = (Request req, Response resp) -> {
|
||||||
String body = req.body();
|
String body = req.body();
|
||||||
System.out.println("Request: " + body);
|
System.out.println("Request: " + body);
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
@@ -54,7 +70,7 @@ public class Main {
|
|||||||
|
|
||||||
resp.header("processor", Xalan.getVersion());
|
resp.header("processor", Xalan.getVersion());
|
||||||
long timeStart = System.currentTimeMillis();
|
long timeStart = System.currentTimeMillis();
|
||||||
String tmp = "";
|
String tmp;
|
||||||
try {
|
try {
|
||||||
tmp = Xalan.validate(data, xsd).trim();
|
tmp = Xalan.validate(data, xsd).trim();
|
||||||
responseMap.put("result", tmp);
|
responseMap.put("result", tmp);
|
||||||
@@ -72,7 +88,10 @@ public class Main {
|
|||||||
return resp;
|
return resp;
|
||||||
};
|
};
|
||||||
|
|
||||||
static Route xpathHandler = (Request req, Response resp) -> {
|
/**
|
||||||
|
* Handler that returns output of xpath query and processor data
|
||||||
|
*/
|
||||||
|
private static Route xpathHandler = (Request req, Response resp) -> {
|
||||||
|
|
||||||
String body = req.body();
|
String body = req.body();
|
||||||
System.out.println("Request: " + body);
|
System.out.println("Request: " + body);
|
||||||
@@ -91,8 +110,8 @@ public class Main {
|
|||||||
String version = requestMap.get("version");
|
String version = requestMap.get("version");
|
||||||
|
|
||||||
String tmp = "";
|
String tmp = "";
|
||||||
long timeStart = 0;
|
long timeStart;
|
||||||
long duration = 0;
|
long duration;
|
||||||
|
|
||||||
if (processor == null) {
|
if (processor == null) {
|
||||||
return "saxon, xalan";
|
return "saxon, xalan";
|
||||||
@@ -134,7 +153,7 @@ public class Main {
|
|||||||
duration = System.currentTimeMillis() - timeStart;
|
duration = System.currentTimeMillis() - timeStart;
|
||||||
responseMap.put("processor", Xalan.getVersion());
|
responseMap.put("processor", Xalan.getVersion());
|
||||||
responseMap.put("result", tmp);
|
responseMap.put("result", tmp);
|
||||||
responseMap.put("time", "" + duration);
|
responseMap.put("time", Long.toString(duration));
|
||||||
resp.body(mapper.writeValueAsString(responseMap));
|
resp.body(mapper.writeValueAsString(responseMap));
|
||||||
return resp;
|
return resp;
|
||||||
|
|
||||||
@@ -148,7 +167,10 @@ public class Main {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static Route xsltHandler = (Request req, Response resp) -> {
|
/**
|
||||||
|
* Handler that returns outcome of xslt transformation and processor data
|
||||||
|
*/
|
||||||
|
private static Route xsltHandler = (Request req, Response resp) -> {
|
||||||
String body = req.body();
|
String body = req.body();
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
Map<String, String> jsonMap = null;
|
Map<String, String> jsonMap = null;
|
||||||
@@ -168,12 +190,11 @@ public class Main {
|
|||||||
return "saxon, xalan";
|
return "saxon, xalan";
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
String tmp = "";
|
String tmp;
|
||||||
long timeStart = 0;
|
long timeStart;
|
||||||
long duration = 0;
|
long duration;
|
||||||
switch (processor) {
|
switch (processor) {
|
||||||
case "saxon":
|
case "saxon":
|
||||||
// resp.header("processor", "Saxon " + Saxon.getVersion());
|
|
||||||
timeStart = System.currentTimeMillis();
|
timeStart = System.currentTimeMillis();
|
||||||
try {
|
try {
|
||||||
tmp = Saxon.processXSLT(data, query);
|
tmp = Saxon.processXSLT(data, query);
|
||||||
@@ -188,7 +209,7 @@ public class Main {
|
|||||||
|
|
||||||
duration = System.currentTimeMillis() - timeStart;
|
duration = System.currentTimeMillis() - timeStart;
|
||||||
responseMap.put("processor", "Saxon " + Saxon.getVersion() + " " + version);
|
responseMap.put("processor", "Saxon " + Saxon.getVersion() + " " + version);
|
||||||
responseMap.put("time", "" + duration);
|
responseMap.put("time", Long.toString(duration));
|
||||||
resp.body(mapper.writeValueAsString(responseMap));
|
resp.body(mapper.writeValueAsString(responseMap));
|
||||||
return resp;
|
return resp;
|
||||||
|
|
||||||
@@ -205,7 +226,7 @@ public class Main {
|
|||||||
}
|
}
|
||||||
duration = System.currentTimeMillis() - timeStart;
|
duration = System.currentTimeMillis() - timeStart;
|
||||||
responseMap.put("processor", Xalan.getVersion());
|
responseMap.put("processor", Xalan.getVersion());
|
||||||
responseMap.put("time", "" + duration);
|
responseMap.put("time", Long.toString(duration));
|
||||||
resp.body(mapper.writeValueAsString(responseMap));
|
resp.body(mapper.writeValueAsString(responseMap));
|
||||||
return resp;
|
return resp;
|
||||||
|
|
||||||
@@ -215,6 +236,5 @@ public class Main {
|
|||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
return ex.getMessage();
|
return ex.getMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package processors;
|
package r11.mltx.restxslt.processors;
|
||||||
|
|
||||||
import net.sf.saxon.om.NamespaceBinding;
|
import net.sf.saxon.om.NamespaceBinding;
|
||||||
import net.sf.saxon.om.NamespaceMap;
|
import net.sf.saxon.om.NamespaceMap;
|
||||||
@@ -7,29 +7,50 @@ import net.sf.saxon.s9api.XdmNode;
|
|||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for saxon namespace scan engine.
|
||||||
|
* All found namespaces are stored within {@link #namespaceMap}
|
||||||
|
* @author Wojciech Czop
|
||||||
|
*/
|
||||||
public class NewNamespaceResolver {
|
public class NewNamespaceResolver {
|
||||||
|
|
||||||
private NamespaceMap namespaceMap;
|
private NamespaceMap namespaceMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes {@link #namespaceMap} with namespace values
|
||||||
|
* @param doc dom structure object
|
||||||
|
* @return map of namespaces
|
||||||
|
*/
|
||||||
public NamespaceMap process(XdmNode doc) {
|
public NamespaceMap process(XdmNode doc) {
|
||||||
namespaceMap = NamespaceMap.emptyMap();
|
namespaceMap = NamespaceMap.emptyMap();
|
||||||
Iterator<XdmNode> it = doc.children().iterator();
|
Iterator<XdmNode> it = doc.children().iterator();
|
||||||
|
// TODO: remove
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
XdmNode tmp = it.next();
|
XdmNode tmp = it.next();
|
||||||
extractNamespace(tmp);
|
extractNamespace(tmp);
|
||||||
}
|
}
|
||||||
|
// end
|
||||||
return namespaceMap;
|
return namespaceMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates through {@link #namespaceMap} and declares namespaces in {@link XPathCompiler}
|
||||||
|
* @param compiler compiler used to compile xpath statements
|
||||||
|
*/
|
||||||
public void exportNamespaces(XPathCompiler compiler){
|
public void exportNamespaces(XPathCompiler compiler){
|
||||||
Iterator<NamespaceBinding> it = namespaceMap.iterator();
|
Iterator<NamespaceBinding> it = namespaceMap.iterator();
|
||||||
|
// TODO: remove
|
||||||
while(it.hasNext()){
|
while(it.hasNext()){
|
||||||
System.out.println(it.next());
|
System.out.println(it.next());
|
||||||
}
|
}
|
||||||
|
// end
|
||||||
namespaceMap.forEach(namespaceBinding -> compiler.declareNamespace(namespaceBinding.getPrefix(), namespaceBinding.getURI()));
|
namespaceMap.forEach(namespaceBinding -> compiler.declareNamespace(namespaceBinding.getPrefix(), namespaceBinding.getURI()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uses recurrency to dive deep dom structure and appends {@link #namespaceMap} with every found namespace
|
||||||
|
* @param node dom structure object
|
||||||
|
*/
|
||||||
private void extractNamespace(XdmNode node) {
|
private void extractNamespace(XdmNode node) {
|
||||||
NamespaceMap tmp;
|
NamespaceMap tmp;
|
||||||
if ((tmp = node.getUnderlyingNode().getAllNamespaces()) != null) {
|
if ((tmp = node.getUnderlyingNode().getAllNamespaces()) != null) {
|
||||||
@@ -40,13 +61,14 @@ public class NewNamespaceResolver {
|
|||||||
Iterator<XdmNode> it = node.children().iterator();
|
Iterator<XdmNode> it = node.children().iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
XdmNode rNode = it.next();
|
XdmNode rNode = it.next();
|
||||||
|
// TODO: remove
|
||||||
if(rNode.getUnderlyingNode().getPrefix().isEmpty() && !rNode.getParent().getUnderlyingNode().getPrefix().isEmpty()){
|
if(rNode.getUnderlyingNode().getPrefix().isEmpty() && !rNode.getParent().getUnderlyingNode().getPrefix().isEmpty()){
|
||||||
|
|
||||||
System.out.println("prefix missing, parent has "+rNode.getParent().getUnderlyingNode().getPrefix() + ", but child has none");
|
System.out.println("prefix missing, parent has "+rNode.getParent().getUnderlyingNode().getPrefix() + ", but child has none");
|
||||||
|
|
||||||
NamespaceMap nsTMP= rNode.getUnderlyingNode().getAllNamespaces();
|
|
||||||
System.out.println();
|
System.out.println();
|
||||||
}
|
}
|
||||||
|
// end
|
||||||
extractNamespace(rNode);
|
extractNamespace(rNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,23 @@
|
|||||||
package processors;
|
package r11.mltx.restxslt.processors;
|
||||||
|
|
||||||
import net.sf.saxon.om.NamespaceMap;
|
|
||||||
import net.sf.saxon.s9api.*;
|
import net.sf.saxon.s9api.*;
|
||||||
import javax.xml.transform.stream.StreamSource;
|
import javax.xml.transform.stream.StreamSource;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for Saxon engine
|
||||||
|
* @author Wojciech Czop
|
||||||
|
*/
|
||||||
public class Saxon {
|
public class Saxon {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transforms string containing xml document via xslt
|
||||||
|
* @param data xml to be transformed
|
||||||
|
* @param transform xslt
|
||||||
|
* @return transformed xml
|
||||||
|
* @throws SaxonApiException thrown on stylesheet or transformation errors
|
||||||
|
*/
|
||||||
public static String processXSLT(String data, String transform) throws SaxonApiException {
|
public static String processXSLT(String data, String transform) throws SaxonApiException {
|
||||||
Processor processor = new Processor(false);
|
Processor processor = new Processor(false);
|
||||||
XsltCompiler compiler = processor.newXsltCompiler();
|
XsltCompiler compiler = processor.newXsltCompiler();
|
||||||
@@ -21,19 +32,25 @@ public class Saxon {
|
|||||||
return sw.toString();
|
return sw.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process xpath and return either node or wrapped atomic value
|
||||||
|
* @param data xml to be querried
|
||||||
|
* @param query xpath queryy
|
||||||
|
* @param version processor version
|
||||||
|
* @return string xml representation of the node
|
||||||
|
* @throws Exception thrown on node building errors or invalid xpath
|
||||||
|
*/
|
||||||
public static String processXPath(String data, String query, String version) throws Exception {
|
public static String processXPath(String data, String query, String version) throws Exception {
|
||||||
Processor p = new Processor(false);
|
Processor p = new Processor(false);
|
||||||
XPathCompiler compiler = p.newXPathCompiler();
|
XPathCompiler compiler = p.newXPathCompiler();
|
||||||
DocumentBuilder builder = p.newDocumentBuilder();
|
DocumentBuilder builder = p.newDocumentBuilder();
|
||||||
XdmNode doc = builder.build(new StreamSource(new StringReader(data)));
|
XdmNode doc = builder.build(new StreamSource(new StringReader(data)));
|
||||||
|
|
||||||
// System.out.println(version);
|
|
||||||
|
|
||||||
compiler.setLanguageVersion(version);
|
compiler.setLanguageVersion(version);
|
||||||
|
|
||||||
NewNamespaceResolver resolver = new NewNamespaceResolver();
|
NewNamespaceResolver resolver = new NewNamespaceResolver();
|
||||||
|
|
||||||
NamespaceMap nsMa = resolver.process(doc);
|
resolver.process(doc);
|
||||||
|
|
||||||
resolver.exportNamespaces(compiler);
|
resolver.exportNamespaces(compiler);
|
||||||
|
|
||||||
@@ -47,6 +64,10 @@ public class Saxon {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns version of the processor
|
||||||
|
* @return version of the processor
|
||||||
|
*/
|
||||||
public static String getVersion() {
|
public static String getVersion() {
|
||||||
return new Processor(false).getSaxonProductVersion();
|
return new Processor(false).getSaxonProductVersion();
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
package processors;
|
package r11.mltx.restxslt.processors;
|
||||||
|
|
||||||
import org.apache.xpath.domapi.XPathEvaluatorImpl;
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
|
import org.xml.sax.InputSource;
|
||||||
|
|
||||||
import javax.xml.XMLConstants;
|
import javax.xml.XMLConstants;
|
||||||
import javax.xml.namespace.NamespaceContext;
|
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
import javax.xml.transform.*;
|
import javax.xml.transform.*;
|
||||||
@@ -18,29 +17,31 @@ import javax.xml.xpath.XPath;
|
|||||||
import javax.xml.xpath.XPathConstants;
|
import javax.xml.xpath.XPathConstants;
|
||||||
import javax.xml.xpath.XPathExpression;
|
import javax.xml.xpath.XPathExpression;
|
||||||
import javax.xml.xpath.XPathFactory;
|
import javax.xml.xpath.XPathFactory;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import org.w3c.dom.NodeList;
|
|
||||||
import org.xml.sax.InputSource;
|
|
||||||
import org.xml.sax.SAXException;
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handler for Xalan engine
|
||||||
|
* @author Wojciech Czop
|
||||||
|
*/
|
||||||
public class Xalan {
|
public class Xalan {
|
||||||
|
/**
|
||||||
|
* Transforms string containing xml document via xslt
|
||||||
|
* @param data xml to be transformed
|
||||||
|
* @param transform xslt
|
||||||
|
* @return transformed xml
|
||||||
|
* @throws Exception thrown on stylesheet or transformation errors
|
||||||
|
*/
|
||||||
public static String processXSLT(String data, String transform) throws Exception{
|
public static String processXSLT(String data, String transform) throws Exception{
|
||||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||||
Document document = builder.parse(new InputSource(new StringReader(data)));
|
Document document = builder.parse(new InputSource(new StringReader(data)));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
StreamSource stylesource = new StreamSource(new StringReader(transform));
|
StreamSource stylesource = new StreamSource(new StringReader(transform));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);
|
Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);
|
||||||
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
|
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
|
||||||
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
||||||
|
|
||||||
Source source = new DOMSource(document);
|
Source source = new DOMSource(document);
|
||||||
StringWriter sw = new StringWriter();
|
StringWriter sw = new StringWriter();
|
||||||
Result outputTarget = new StreamResult(sw);
|
Result outputTarget = new StreamResult(sw);
|
||||||
@@ -49,6 +50,15 @@ public class Xalan {
|
|||||||
return sw.toString();
|
return sw.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process xpath and return either node or wrapped atomic value
|
||||||
|
* @deprecated
|
||||||
|
* Xalan needs assumption of the outcome, which is not implemented. Therefore method is deprecated
|
||||||
|
* @param data xml
|
||||||
|
* @param transform xpath
|
||||||
|
* @return xml processed using given xpath
|
||||||
|
* @throws Exception thrown on node building errors or invalid xpath
|
||||||
|
*/
|
||||||
public static String processXPath(String data, String transform) throws Exception{
|
public static String processXPath(String data, String transform) throws Exception{
|
||||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||||
@@ -57,35 +67,33 @@ public class Xalan {
|
|||||||
|
|
||||||
xpath.setNamespaceContext(new XalanNamespaceResolver(builder.parse(new InputSource(new StringReader(data))), true));
|
xpath.setNamespaceContext(new XalanNamespaceResolver(builder.parse(new InputSource(new StringReader(data))), true));
|
||||||
XPathExpression exp = xpath.compile(transform);
|
XPathExpression exp = xpath.compile(transform);
|
||||||
NodeList nodeList = (NodeList) exp.evaluate(new InputSource(new StringReader(data)), XPathConstants.NODESET);
|
exp.evaluate(new InputSource(new StringReader(data)), XPathConstants.NODESET);
|
||||||
String result = exp.evaluate(new InputSource(new StringReader(data)));
|
return exp.evaluate(new InputSource(new StringReader(data)));
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns version of the processor
|
||||||
|
* @return version of the processor
|
||||||
|
*/
|
||||||
public static String getVersion(){
|
public static String getVersion(){
|
||||||
return org.apache.xalan.Version.getVersion();
|
return org.apache.xalan.Version.getVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validates string representation of the xml document against xsd schema
|
||||||
|
* @param data xml document
|
||||||
|
* @param xsd xsd schema
|
||||||
|
* @return statement of validity
|
||||||
|
* @throws Exception thrown on invalid xsd schema or xml
|
||||||
|
*/
|
||||||
public static String validate(String data, String xsd) throws Exception{
|
public static String validate(String data, String xsd) throws Exception{
|
||||||
|
|
||||||
|
|
||||||
Source dataSource = new StreamSource(new StringReader(data));
|
Source dataSource = new StreamSource(new StringReader(data));
|
||||||
Source xsdSource = new StreamSource(new StringReader(xsd));
|
Source xsdSource = new StreamSource(new StringReader(xsd));
|
||||||
SchemaFactory schemaFactory = SchemaFactory
|
SchemaFactory schemaFactory = SchemaFactory
|
||||||
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
|
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
|
||||||
// try {
|
Schema schema = schemaFactory.newSchema(xsdSource);
|
||||||
Schema schema = schemaFactory.newSchema(xsdSource);
|
Validator validator = schema.newValidator();
|
||||||
Validator validator = schema.newValidator();
|
validator.validate(dataSource);
|
||||||
validator.validate(dataSource);
|
return "XML file is valid";
|
||||||
// System.out.println(dataSource.getSystemId() + " is valid");
|
|
||||||
return "XML file is valid";
|
|
||||||
// } catch (SAXException e) {
|
|
||||||
// System.out.println("Invalid: "+e.getMessage());
|
|
||||||
// return "XML file is NOT valid: " + e.getMessage();
|
|
||||||
//// System.out.println(dataSource.getSystemId() + " is NOT valid reason:" + e);
|
|
||||||
// } catch (IOException e) {
|
|
||||||
// return "IO error: "+e.getMessage();
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package processors;
|
package r11.mltx.restxslt.processors;
|
||||||
|
|
||||||
import org.w3c.dom.*;
|
import org.w3c.dom.*;
|
||||||
|
|
||||||
@@ -8,6 +8,12 @@ import java.util.HashMap;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains methods that scan document for namespaces and store them in map objects.
|
||||||
|
* @deprecated
|
||||||
|
* Class no longer in use. It has been replaced by {@link NewNamespaceResolver}
|
||||||
|
* @author Wojciech Czop
|
||||||
|
*/
|
||||||
public class XalanNamespaceResolver implements NamespaceContext {
|
public class XalanNamespaceResolver implements NamespaceContext {
|
||||||
private static final String DEFAULT_NS = "DEFAULT";
|
private static final String DEFAULT_NS = "DEFAULT";
|
||||||
private Map<String, String> prefix2Uri = new HashMap<String, String>();
|
private Map<String, String> prefix2Uri = new HashMap<String, String>();
|
||||||
@@ -84,6 +90,11 @@ public class XalanNamespaceResolver implements NamespaceContext {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores namespace prefix ass well as its uri in map
|
||||||
|
* @param prefix
|
||||||
|
* @param uri
|
||||||
|
*/
|
||||||
private void putInCache(String prefix, String uri) {
|
private void putInCache(String prefix, String uri) {
|
||||||
prefix2Uri.put(prefix, uri);
|
prefix2Uri.put(prefix, uri);
|
||||||
uri2Prefix.put(uri, prefix);
|
uri2Prefix.put(uri, prefix);
|
||||||
Reference in New Issue
Block a user