aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d>2003-11-20 08:44:42 +0000
committergregor <gregor@d688527b-c9ab-4aba-bd8d-4036d912da1d>2003-11-20 08:44:42 +0000
commit9149618d9049d470d0423c4e896ab6c127eb6c02 (patch)
treec103a1aabc756b75ec76e435d13013ffa388f4c3
parent72819e05aa9db32ef828d9b35d8980a77d1bd76e (diff)
downloadmoa-id-spss-9149618d9049d470d0423c4e896ab6c127eb6c02.tar.gz
moa-id-spss-9149618d9049d470d0423c4e896ab6c127eb6c02.tar.bz2
moa-id-spss-9149618d9049d470d0423c4e896ab6c127eb6c02.zip
Erstellt.
git-svn-id: https://joinup.ec.europa.eu/svn/moa-idspss/trunk@59 d688527b-c9ab-4aba-bd8d-4036d912da1d
-rw-r--r--spss.slinterface/.classpath22
-rw-r--r--spss.slinterface/.project18
-rw-r--r--spss.slinterface/.tomcatplugin10
-rw-r--r--spss.slinterface/WEB-INF/lib/axis-ant.jarbin0 -> 385010 bytes
-rw-r--r--spss.slinterface/WEB-INF/lib/axis.jarbin0 -> 1235721 bytes
-rw-r--r--spss.slinterface/WEB-INF/lib/commons-discovery.jarbin0 -> 71442 bytes
-rw-r--r--spss.slinterface/WEB-INF/lib/commons-fileupload-1.0.jarbin0 -> 22379 bytes
-rw-r--r--spss.slinterface/WEB-INF/lib/commons-logging.jarbin0 -> 31605 bytes
-rw-r--r--spss.slinterface/WEB-INF/lib/jaxrpc.jarbin0 -> 35759 bytes
-rw-r--r--spss.slinterface/WEB-INF/lib/log4j-1.2.7.jarbin0 -> 350677 bytes
-rw-r--r--spss.slinterface/WEB-INF/lib/saaj.jarbin0 -> 18501 bytes
-rw-r--r--spss.slinterface/WEB-INF/lib/wsdl4j.jarbin0 -> 113853 bytes
-rw-r--r--spss.slinterface/WEB-INF/lib/xalan-2.5.1.jarbin0 -> 2907319 bytes
-rw-r--r--spss.slinterface/WEB-INF/lib/xerces-2.4.0/xercesImpl-2.4.0.jarbin0 -> 927669 bytes
-rw-r--r--spss.slinterface/WEB-INF/lib/xerces-2.4.0/xmlParserAPIs-2.4.0.jarbin0 -> 123705 bytes
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/Constants.java55
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/RequestWrapper.java57
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ResponseWrapper.java44
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java341
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ServletInputStream.java55
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ServletOutputStream.java50
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/listeners/ContextListener.java153
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/moainvoker/MOAInvoker.java92
-rw-r--r--spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/servlets/MOAServlet.java111
-rw-r--r--spss.slinterface/WEB-INF/web.xml39
-rw-r--r--spss.slinterface/res/resources/properties/init.properties7
-rw-r--r--spss.slinterface/res/resources/schemas/Core.20020225.xsd399
-rw-r--r--spss.slinterface/res/resources/schemas/Core.20020831.xsd153
-rw-r--r--spss.slinterface/res/resources/schemas/Core.20031231.xsd58
-rw-r--r--spss.slinterface/res/resources/schemas/MOA-SPSS-1.2.xsd445
-rw-r--r--spss.slinterface/res/resources/simpleVerReq.moa.xml29
-rw-r--r--spss.slinterface/res/resources/simpleVerReq.xml100
-rw-r--r--spss.slinterface/res/resources/stylesheets/moa2sl.xsl96
-rw-r--r--spss.slinterface/res/resources/stylesheets/simpleVerReq.sl11.xml100
-rw-r--r--spss.slinterface/res/resources/stylesheets/simpleVerReq.sl12.locref.moa.xml1
-rw-r--r--spss.slinterface/res/resources/stylesheets/simpleVerReq.sl12.locref.xml20
-rw-r--r--spss.slinterface/res/resources/stylesheets/sl2moa.xsl218
-rw-r--r--spss.slinterface/res/resources/stylesheets/verifyresponse.moa.sl.xml25
-rw-r--r--spss.slinterface/res/resources/stylesheets/verifyresponse.moa.xml46
-rw-r--r--spss.slinterface/res/resources/test.xml2
-rw-r--r--spss.slinterface/res/resources/test.xsl14
-rw-r--r--spss.slinterface/test/forms/simpleForm.html25
42 files changed, 2785 insertions, 0 deletions
diff --git a/spss.slinterface/.classpath b/spss.slinterface/.classpath
new file mode 100644
index 000000000..3ef5766d8
--- /dev/null
+++ b/spss.slinterface/.classpath
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="TOMCAT_HOME/common/lib/servlet.jar"/>
+ <classpathentry kind="var" path="TOMCAT_HOME/common/lib/jasper-runtime.jar"/>
+ <classpathentry kind="src" path="WEB-INF/src"/>
+ <classpathentry kind="src" path="work"/>
+ <classpathentry kind="src" path="res"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/log4j-1.2.7.jar"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/xalan-2.5.1.jar"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/commons-fileupload-1.0.jar"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/axis.jar"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/axis-ant.jar"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/commons-discovery.jar"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/commons-logging.jar"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/jaxrpc.jar"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/saaj.jar"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/wsdl4j.jar"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/xerces-2.4.0/xercesImpl-2.4.0.jar"/>
+ <classpathentry kind="lib" path="WEB-INF/lib/xerces-2.4.0/xmlParserAPIs-2.4.0.jar"/>
+ <classpathentry kind="output" path="WEB-INF/classes"/>
+</classpath>
diff --git a/spss.slinterface/.project b/spss.slinterface/.project
new file mode 100644
index 000000000..aec5cc99a
--- /dev/null
+++ b/spss.slinterface/.project
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>MOA SPSS SL-Interface</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>com.sysdeo.eclipse.tomcat.tomcatnature</nature>
+ </natures>
+</projectDescription>
diff --git a/spss.slinterface/.tomcatplugin b/spss.slinterface/.tomcatplugin
new file mode 100644
index 000000000..2e649ba5e
--- /dev/null
+++ b/spss.slinterface/.tomcatplugin
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<tomcatProjectProperties>
+ <rootDir>/</rootDir>
+ <exportSource>false</exportSource>
+ <reloadable>true</reloadable>
+ <redirectLogger>false</redirectLogger>
+ <updateXml>false</updateXml>
+ <warLocation></warLocation>
+ <webPath>/moa-spss-sl</webPath>
+</tomcatProjectProperties>
diff --git a/spss.slinterface/WEB-INF/lib/axis-ant.jar b/spss.slinterface/WEB-INF/lib/axis-ant.jar
new file mode 100644
index 000000000..9cb30a98a
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/axis-ant.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/lib/axis.jar b/spss.slinterface/WEB-INF/lib/axis.jar
new file mode 100644
index 000000000..869ee16f5
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/axis.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/lib/commons-discovery.jar b/spss.slinterface/WEB-INF/lib/commons-discovery.jar
new file mode 100644
index 000000000..b88554847
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/commons-discovery.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/lib/commons-fileupload-1.0.jar b/spss.slinterface/WEB-INF/lib/commons-fileupload-1.0.jar
new file mode 100644
index 000000000..1ca4a9cd3
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/commons-fileupload-1.0.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/lib/commons-logging.jar b/spss.slinterface/WEB-INF/lib/commons-logging.jar
new file mode 100644
index 000000000..b99c9375a
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/commons-logging.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/lib/jaxrpc.jar b/spss.slinterface/WEB-INF/lib/jaxrpc.jar
new file mode 100644
index 000000000..5f6a56f02
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/jaxrpc.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/lib/log4j-1.2.7.jar b/spss.slinterface/WEB-INF/lib/log4j-1.2.7.jar
new file mode 100644
index 000000000..1595a56ef
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/log4j-1.2.7.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/lib/saaj.jar b/spss.slinterface/WEB-INF/lib/saaj.jar
new file mode 100644
index 000000000..f2242abe5
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/saaj.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/lib/wsdl4j.jar b/spss.slinterface/WEB-INF/lib/wsdl4j.jar
new file mode 100644
index 000000000..820abd082
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/wsdl4j.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/lib/xalan-2.5.1.jar b/spss.slinterface/WEB-INF/lib/xalan-2.5.1.jar
new file mode 100644
index 000000000..44d4d094d
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/xalan-2.5.1.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/lib/xerces-2.4.0/xercesImpl-2.4.0.jar b/spss.slinterface/WEB-INF/lib/xerces-2.4.0/xercesImpl-2.4.0.jar
new file mode 100644
index 000000000..99cc23f2a
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/xerces-2.4.0/xercesImpl-2.4.0.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/lib/xerces-2.4.0/xmlParserAPIs-2.4.0.jar b/spss.slinterface/WEB-INF/lib/xerces-2.4.0/xmlParserAPIs-2.4.0.jar
new file mode 100644
index 000000000..6ba4ff805
--- /dev/null
+++ b/spss.slinterface/WEB-INF/lib/xerces-2.4.0/xmlParserAPIs-2.4.0.jar
Binary files differ
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/Constants.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/Constants.java
new file mode 100644
index 000000000..c6ea9e88d
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/Constants.java
@@ -0,0 +1,55 @@
+/*
+ * Created on 18.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class Constants
+{
+ // System properties
+ public static final String SP_INIT_PROPS_LOC_ =
+ "at.gv.egovernment.moa.spss.slinterface.PropertiesLocation";
+
+ // Init properties
+ public static final String IP_SL2MOA_STYLESHEET_ = "location.stylesheet.sl2moa";
+ public static final String IP_MOA2SL_STYLESHEET_ = "location.stylesheet.moa2sl";
+ public static final String IP_SL_SCHEMA_ = "location.schema.sl";
+ public static final String IP_MOA_SCHEMA_ = "location.schema.moa";
+ public static final String IP_SP_ENDPOINT_ = "service.endpoint.sp";
+
+ // Logging hierarchies
+
+ public static final String LH_BASE_ = "slinterface";
+ public static final String LH_LISTENERS_ = LH_BASE_ + ".listeners";
+ public static final String LH_FILTERS_ = LH_BASE_ + ".filters";
+ public static final String LH_SERVLETS_ = LH_BASE_ + ".servlets";
+
+ // Web service context parameters
+
+ public static final String WSCP_INIT_PROPS_ = "initProperties";
+ public static final String WSCP_SL2MOA_TRANSFORMER_ = "sl2MoaTransformer";
+ public static final String WSCP_MOA2SL_TRANSFORMER_ = "moa2SlTransformer";
+ public static final String WSCP_XMLPARSER_ = "xmlParser";
+
+ // Security-Layer constants
+
+ public static final String SLC_NAME_HTTP_REQUEST_ = "http-security-layer-request";
+ public static final String SLC_NAME_XML_REQUEST_ = "XMLRequest";
+ public static final String SLC_NAME_DATA_URL_ = "DataURL";
+ public static final String SLC_NAME_STYLESHEET_URL_ = "StylesheetURL";
+ public static final String SLC_NAME_REDIRECT_URL_ = "RedirectURL";
+
+ // Namespace URIs
+
+ public static final String NSURI_SL_11_ = "http://www.buergerkarte.at/namespaces/securitylayer/20020831#";
+ public static final String NSURI_SL_12_ = "http://www.buergerkarte.at/namespaces/securitylayer/20031231#";
+ public static final String NSURI_MOA_12_ = "http://reference.e-government.gv.at/namespace/moa/20020822#";
+
+ // MOA invoker constants
+
+ public static final String MI_SP_QNAME_ = "SignatureVerification";
+}
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/RequestWrapper.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/RequestWrapper.java
new file mode 100644
index 000000000..a6652a56e
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/RequestWrapper.java
@@ -0,0 +1,57 @@
+/*
+ * Created on 19.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.filters;
+
+import java.io.ByteArrayInputStream;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class RequestWrapper extends HttpServletRequestWrapper
+{
+
+ private ServletInputStream inputStream_;
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * Generates a request wrapper around a particular request.
+ *
+ * @param request The request to be wrapped.
+ *
+ * @param inputStream The new inputstream, which will be returned by method {@link #getInputStream}, and
+ * whose length will be returned by method {@link #getContentLength}.
+ */
+ public RequestWrapper(HttpServletRequest request, ByteArrayInputStream inputStream)
+ {
+ super(request);
+ inputStream_ = new ServletInputStream(inputStream);
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * @see #RequestWrapper(HttpServletRequest, ByteArrayInputStream)
+ */
+ public javax.servlet.ServletInputStream getInputStream()
+ {
+ return inputStream_;
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * @see #RequestWrapper(HttpServletRequest, ByteArrayInputStream)
+ */
+ public int getContentLength()
+ {
+ return inputStream_.getContentLength();
+ }
+
+}
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ResponseWrapper.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ResponseWrapper.java
new file mode 100644
index 000000000..420723abb
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ResponseWrapper.java
@@ -0,0 +1,44 @@
+/*
+ * Created on 18.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.filters;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class ResponseWrapper extends HttpServletResponseWrapper
+{
+ private ServletOutputStream outputStream_;
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public ResponseWrapper(HttpServletResponse response)
+ {
+ super(response);
+ outputStream_ = new ServletOutputStream();
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public javax.servlet.ServletOutputStream getOutputStream()
+ {
+ return outputStream_;
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * Returns the wrapped response as a byte array.
+ *
+ * @return the response as a byte array.
+ */
+ public byte[] toByteArray()
+ {
+ return outputStream_.toByteArray();
+ }
+}
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java
new file mode 100644
index 000000000..4632c80f5
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/SL2MOAFilter.java
@@ -0,0 +1,341 @@
+/*
+ * Created on 18.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.filters;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.CharArrayReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.apache.commons.fileupload.DiskFileUpload;
+import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileUpload;
+import org.apache.commons.fileupload.FileUploadException;
+import org.apache.log4j.Logger;
+import org.apache.xerces.parsers.DOMParser;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+import at.gv.egovernment.moa.spss.slinterface.Constants;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class SL2MOAFilter implements Filter
+{
+ private static Logger logger_ = Logger.getLogger(Constants.LH_FILTERS_);
+
+ private FilterConfig config_;
+ private SLRequest slRequest_;
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
+ */
+ public void init(FilterConfig config) throws ServletException
+ {
+ // Store filter configuration
+ config_ = config;
+
+ slRequest_ = new SLRequest();
+
+ // Initialize stylesheet transform SL2MOA
+ ServletContext context = config_.getServletContext();
+ Transformer sl2MoaTransformer = (Transformer) context.getAttribute(Constants.WSCP_SL2MOA_TRANSFORMER_);
+ if (sl2MoaTransformer == null)
+ {
+ initTransformer(context, Constants.IP_SL2MOA_STYLESHEET_);
+ }
+
+ // Initialize stylesheet transform MOA2SL
+ Transformer moa2SlTransformer = (Transformer) context.getAttribute(Constants.WSCP_MOA2SL_TRANSFORMER_);
+ if (moa2SlTransformer == null)
+ {
+ initTransformer(context, Constants.IP_MOA2SL_STYLESHEET_);
+ }
+
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /*
+ * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse,
+ * javax.servlet.FilterChain)
+ */
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+ throws IOException, ServletException
+ {
+ // Check if request is HTTP-POST
+ checkHttpPost((HttpServletRequest) request);
+
+ // Get SL request from content of request
+ parseRequest((HttpServletRequest) request);
+
+ // Schema validate SL request
+ CharArrayReader slXmlRequestCAR = new CharArrayReader(slRequest_.xmlRequest_.toCharArray());
+ Document slXMLRequestDoc = parseSlXmlRequest(slXmlRequestCAR);
+
+ // Transform SL request into a MOA SPSS request
+ Transformer sl2MoaTransformer =
+ (Transformer) config_.getServletContext().getAttribute(Constants.WSCP_SL2MOA_TRANSFORMER_);
+ DOMSource slXMLRequestDS = new DOMSource(slXMLRequestDoc);
+ ByteArrayOutputStream moaRequestBOS = new ByteArrayOutputStream();
+ StreamResult moaRequestResult = new StreamResult(moaRequestBOS);
+ try
+ {
+ sl2MoaTransformer.transform(slXMLRequestDS, moaRequestResult);
+ }
+ catch (TransformerException e)
+ {
+ String message = "Transforming SL XML request into MOA XML request failed.";
+ logger_.error(message, e);
+ throw new ServletException(message, e);
+ }
+ logger_.debug("MOA XML Request:\n" + moaRequestBOS.toString());
+ ByteArrayInputStream moaRequestIS = new ByteArrayInputStream(moaRequestBOS.toByteArray());
+
+ // Invoke MOA SPSS
+ RequestWrapper requestWrapper = new RequestWrapper((HttpServletRequest) request, moaRequestIS);
+ ResponseWrapper responseWrapper = new ResponseWrapper((HttpServletResponse) response);
+ chain.doFilter(requestWrapper, responseWrapper);
+
+ // Prepare response to client
+ response.setContentType("text/xml");
+
+ // Transform MOA response into a SL response and send SL response back to client
+ Transformer moa2SlTransformer =
+ (Transformer) config_.getServletContext().getAttribute(Constants.WSCP_MOA2SL_TRANSFORMER_);
+ ServletOutputStream moaResponseSOS = (ServletOutputStream) responseWrapper.getOutputStream();
+ ByteArrayInputStream moaResponseBIS = new ByteArrayInputStream(moaResponseSOS.toByteArray());
+ StreamSource moaResponseSource = new StreamSource(moaResponseBIS);
+ StreamResult slResponseResult = new StreamResult(response.getOutputStream());
+ try
+ {
+ moa2SlTransformer.transform(moaResponseSource, slResponseResult);
+ }
+ catch (TransformerException e)
+ {
+ String message = "Transforming MOA XML response into SL XML response failed.";
+ logger_.error(message, e);
+ throw new ServletException(message, e);
+ }
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * @see javax.servlet.Filter#destroy()
+ */
+ public void destroy()
+ {
+ // Nothing to do here at the moment.
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ private void initTransformer(ServletContext context, String initPropStylesheetLoc) throws ServletException
+ {
+ String stylesheetName =
+ (Constants.IP_SL2MOA_STYLESHEET_.equals(initPropStylesheetLoc))
+ ? "sl2Moa"
+ : "moa2Sl";
+
+ String contextAttrName =
+ (Constants.IP_SL2MOA_STYLESHEET_.equals(initPropStylesheetLoc))
+ ? Constants.WSCP_SL2MOA_TRANSFORMER_
+ : Constants.WSCP_MOA2SL_TRANSFORMER_;
+
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
+ Properties initProps = (Properties) context.getAttribute(Constants.WSCP_INIT_PROPS_);
+ String stylesheetLoc = initProps.getProperty(initPropStylesheetLoc);
+ InputStream stylesheetIS = context.getResourceAsStream(stylesheetLoc);
+ if (stylesheetIS == null)
+ {
+ String message =
+ "Cannot load " + stylesheetName + " stylesheet from location \"" + stylesheetLoc + "\".";
+ logger_.error(message);
+ throw new ServletException(message);
+ }
+ Transformer transformer;
+ try
+ {
+ StreamSource stylesheetSS = new StreamSource(stylesheetIS);
+ transformer = transformerFactory.newTransformer(stylesheetSS);
+ }
+ catch (TransformerConfigurationException e)
+ {
+ String message = "Cannot create XSLT transformer with " + stylesheetName + " stylesheet.";
+ logger_.error(message, e);
+ throw new ServletException(message, e);
+ }
+ context.setAttribute(contextAttrName, transformer);
+ }
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * Parses the http request.
+ */
+ private void parseRequest(HttpServletRequest request) throws IOException
+ {
+ // Check if request URL ends with "http-security-layer-request"
+ // @TODO Don't know if this check is sufficient - spec says request URL must have this value as path
+ String requestURI = request.getRequestURI();
+ if (!requestURI.endsWith(Constants.SLC_NAME_HTTP_REQUEST_))
+ {
+ String message = "Request does not end with \"" + Constants.SLC_NAME_HTTP_REQUEST_ + "\".";
+ logger_.error(message);
+ throw new IOException(message);
+ }
+
+ if (FileUpload.isMultipartContent(request))
+ {
+ // Request is encoded as mulitpart/form-data
+ List items;
+ try
+ {
+ DiskFileUpload upload = new DiskFileUpload();
+ items = upload.parseRequest(request);
+ }
+ catch (FileUploadException e)
+ {
+ String message = "Cannot parse multipart/form-data request.";
+ logger_.error(message);
+ throw new IOException(message);
+ }
+
+ Iterator itemsIt = items.iterator();
+ while (itemsIt.hasNext())
+ {
+ FileItem currItem = (FileItem) itemsIt.next();
+ String currItemName = currItem.getFieldName();
+ if (Constants.SLC_NAME_XML_REQUEST_.equals(currItemName))
+ slRequest_.xmlRequest_ = currItem.getString();
+ else if (Constants.SLC_NAME_DATA_URL_.equals(currItemName))
+ slRequest_.dataUrl_ = currItem.getString();
+ else if (Constants.SLC_NAME_STYLESHEET_URL_.equals(currItemName))
+ slRequest_.stylesheetUrl_ = currItem.getString();
+ else if (Constants.SLC_NAME_REDIRECT_URL_.equals(currItemName))
+ slRequest_.redirectUrl_ = currItem.getString();
+ else
+ continue; // @TODO Do not evaluate other params at the moment
+ }
+ }
+ else
+ {
+ // Request is encoded as application/x-www-form-urlencoded
+ Map paramsMap = request.getParameterMap();
+ Iterator paramNames = paramsMap.keySet().iterator();
+ while (paramNames.hasNext())
+ {
+ String currName = (String) paramNames.next();
+ String[] currValues = (String[]) paramsMap.get(currName);
+ if (Constants.SLC_NAME_XML_REQUEST_.equals(currName))
+ slRequest_.xmlRequest_ = currValues[0];
+ else if (Constants.SLC_NAME_DATA_URL_.equals(currName))
+ slRequest_.dataUrl_ = currValues[0];
+ else if (Constants.SLC_NAME_STYLESHEET_URL_.equals(currName))
+ slRequest_.stylesheetUrl_ = currValues[0];
+ else if (Constants.SLC_NAME_REDIRECT_URL_.equals(currName))
+ slRequest_.redirectUrl_ = currValues[0];
+ else
+ continue; // @TODO Do not evaluate other params at the moment
+ }
+ }
+
+ if (slRequest_.xmlRequest_ == null || slRequest_.dataUrl_ == null ||
+ slRequest_.stylesheetUrl_ != null || slRequest_.redirectUrl_ != null)
+ {
+ // @TODO Only combindation of XMLRequest and StylesheetURL allowed at the moment
+ String message = "Currently only (XMLRequest + DataURL) is supported.";
+ logger_.error(message);
+ throw new IOException(message);
+ }
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ private Document parseSlXmlRequest(Reader slXmlRequest) throws ServletException
+ {
+ // Parse sl request
+ InputSource slXMLRequestIS = new InputSource(slXmlRequest);
+ Document slXmlRequestDoc = null;
+ try
+ {
+ DOMParser xmlParser = (DOMParser) config_.getServletContext().getAttribute(Constants.WSCP_XMLPARSER_);
+ xmlParser.parse(slXMLRequestIS);
+ slXmlRequestDoc = xmlParser.getDocument();
+ }
+ catch (Exception e)
+ {
+ String message = "Parsing Security-Layer request failed.";
+ logger_.error(message, e);
+ throw new ServletException(message, e);
+ }
+
+ // Check if namespace is correct
+ String namespaceURI = slXmlRequestDoc.getDocumentElement().getNamespaceURI();
+ if (!Constants.NSURI_SL_11_.equals(namespaceURI) && !Constants.NSURI_SL_12_.equals(namespaceURI))
+ {
+ String message = "XML request has invalid namespace: \"" + namespaceURI + "\".";
+ logger_.error(message);
+ throw new ServletException(message);
+ }
+
+ return slXmlRequestDoc;
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ private void checkHttpPost(HttpServletRequest request) throws ServletException
+ {
+ String method = request.getMethod();
+ if (!"POST".equals(method))
+ {
+ String message = "HTTP method \"" + method + "\" not supported. Must be \"POST\".";
+ logger_.error(message);
+ throw new ServletException(message);
+ }
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * Helper class, representing the fields of a Security-Layer request.
+ *
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+ class SLRequest
+ {
+ public String xmlRequest_;
+ public String dataUrl_;
+ public String stylesheetUrl_;
+ public String redirectUrl_;
+ }
+}
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ServletInputStream.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ServletInputStream.java
new file mode 100644
index 000000000..b0609c2f8
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ServletInputStream.java
@@ -0,0 +1,55 @@
+/*
+ * Created on 19.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.filters;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class ServletInputStream extends javax.servlet.ServletInputStream
+{
+ private ByteArrayInputStream inputStream_;
+ private int length_;
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * Generates a new <code>ServletInputStram</code> from the specified stream.
+ *
+ * @param inputStream See above.
+ */
+ public ServletInputStream(ByteArrayInputStream inputStream)
+ {
+ super();
+ inputStream_ = inputStream;
+ length_ = inputStream_.available();
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * Reads a single byte from the underlying <code>ByteArrayInputStream</code>.
+ *
+ * @see java.io.InputStream#read()
+ */
+ public int read() throws IOException
+ {
+ return inputStream_.read();
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * Gets the length of the content from this input stream. This equals to the number of bytes which where
+ * available at the time of creating this <code>ServletInputStream</code>.
+ */
+ public int getContentLength()
+ {
+ return length_;
+ }
+}
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ServletOutputStream.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ServletOutputStream.java
new file mode 100644
index 000000000..b790ee55c
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/filters/ServletOutputStream.java
@@ -0,0 +1,50 @@
+/*
+ * Created on 18.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.filters;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class ServletOutputStream extends javax.servlet.ServletOutputStream
+{
+ private ByteArrayOutputStream outputStream_;
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * Default constructor.
+ */
+ public ServletOutputStream()
+ {
+ super();
+ outputStream_ = new ByteArrayOutputStream();
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * @see java.io.OutputStream#write(int)
+ */
+ public void write(int b) throws IOException
+ {
+ outputStream_.write(b);
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * Returns the content of this stream as a byte array.
+ *
+ * @return the content of this stream as a byte array.
+ */
+ public byte[] toByteArray()
+ {
+ return outputStream_.toByteArray();
+ }
+}
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/listeners/ContextListener.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/listeners/ContextListener.java
new file mode 100644
index 000000000..5b32a482b
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/listeners/ContextListener.java
@@ -0,0 +1,153 @@
+/*
+ * Created on 18.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.listeners;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.apache.log4j.Logger;
+import org.apache.xerces.parsers.DOMParser;
+import org.apache.xerces.parsers.XMLGrammarPreparser;
+import org.apache.xerces.util.SymbolTable;
+import org.apache.xerces.util.XMLGrammarPoolImpl;
+import org.apache.xerces.xni.grammars.XMLGrammarDescription;
+import org.apache.xerces.xni.grammars.XMLGrammarPool;
+import org.apache.xerces.xni.parser.XMLInputSource;
+import org.xml.sax.SAXException;
+
+import at.gv.egovernment.moa.spss.slinterface.Constants;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class ContextListener implements ServletContextListener
+{
+ private static final String SAX_NAMESPACES_FEATURE = "http://xml.org/sax/features/namespaces";
+ private static final String SAX_VALIDATION_FEATURE = "http://xml.org/sax/features/validation";
+
+ private static final String XERCES_SCHEMA_VALIDATION_FEATURE =
+ "http://apache.org/xml/features/validation/schema";
+ private static final String XERCES_NORMALIZED_VALUE_FEATURE =
+ "http://apache.org/xml/features/validation/schema/normalized-value";
+ private static final String XERCES_INCLUDE_IGNORABLE_WHITESPACE_FEATURE =
+ "http://apache.org/xml/features/dom/include-ignorable-whitespace";
+ private static final String XERCES_CREATE_ENTITY_REF_NODES_FEATURE =
+ "http://apache.org/xml/features/dom/create-entity-ref-nodes";
+
+ private static final int BIG_PRIME = 2039;
+
+ private static Logger logger_ = Logger.getLogger(Constants.LH_LISTENERS_);
+
+ /**
+ * Initializes the web application.
+ *
+ * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
+ */
+ public void contextInitialized(ServletContextEvent event)
+ {
+ logger_.debug("Context is being initialized.");
+
+ ServletContext context = event.getServletContext();
+
+ String initPropsLoc = System.getProperty(Constants.SP_INIT_PROPS_LOC_);
+ if (initPropsLoc == null)
+ {
+ logger_.error("System property \"" + Constants.SP_INIT_PROPS_LOC_ + "\" not set.");
+ return;
+ }
+
+ // Load init properties
+ try
+ {
+ InputStream initPropsIS = context.getResourceAsStream(initPropsLoc);
+ Properties initProps = new Properties();
+ initProps.load(initPropsIS);
+ context.setAttribute(Constants.WSCP_INIT_PROPS_, initProps);
+ }
+ catch (IOException e)
+ {
+ logger_.error("Cannot load initialization properties from location \"" + initPropsLoc + "\".", e);
+ }
+
+ // Initialize XML parser
+ SymbolTable symbolTable = new SymbolTable(BIG_PRIME);
+ XMLGrammarPool grammarPool = new XMLGrammarPoolImpl();
+
+ XMLGrammarPreparser preparser = new XMLGrammarPreparser(symbolTable);
+ preparser.registerPreparser(XMLGrammarDescription.XML_SCHEMA, null);
+ preparser.setProperty(org.apache.xerces.impl.Constants.XERCES_PROPERTY_PREFIX
+ + org.apache.xerces.impl.Constants.XMLGRAMMAR_POOL_PROPERTY, grammarPool);
+ preparser.setFeature(SAX_NAMESPACES_FEATURE, true);
+ preparser.setFeature(SAX_VALIDATION_FEATURE, true);
+
+ Properties initProps = (Properties) context.getAttribute(Constants.WSCP_INIT_PROPS_);
+ String slSchemaLoc = initProps.getProperty(Constants.IP_SL_SCHEMA_);
+ preparseSchema(context, preparser, slSchemaLoc);
+ String moaSchemaLoc = initProps.getProperty(Constants.IP_MOA_SCHEMA_);
+ preparseSchema(context, preparser, moaSchemaLoc);
+
+ DOMParser xmlParser = new DOMParser(symbolTable, grammarPool);
+ try
+ {
+ xmlParser.setFeature(SAX_NAMESPACES_FEATURE, true);
+ xmlParser.setFeature(SAX_VALIDATION_FEATURE, true);
+ xmlParser.setFeature(XERCES_SCHEMA_VALIDATION_FEATURE, true);
+ xmlParser.setFeature(XERCES_NORMALIZED_VALUE_FEATURE, false);
+ xmlParser.setFeature(XERCES_INCLUDE_IGNORABLE_WHITESPACE_FEATURE, true);
+ xmlParser.setFeature(XERCES_CREATE_ENTITY_REF_NODES_FEATURE, false);
+ }
+ catch (SAXException e)
+ {
+ String message = "Initialization of XML parser failed.";
+ logger_.error(message, e);
+ }
+ context.setAttribute(Constants.WSCP_XMLPARSER_, xmlParser);
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ /**
+ * Does some clean up at finalization of the web application.
+ *
+ * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
+ */
+ public void contextDestroyed(ServletContextEvent event)
+ {
+ // Remove init properties from web service context
+ Properties initProps = (Properties) event.getServletContext().getAttribute(Constants.WSCP_INIT_PROPS_);
+ if (initProps != null) event.getServletContext().removeAttribute(Constants.WSCP_INIT_PROPS_);
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ private void preparseSchema(ServletContext context, XMLGrammarPreparser preparser, String schemaLoc)
+ {
+ InputStream schemaIS = context.getResourceAsStream(schemaLoc);
+ if (schemaIS == null)
+ {
+ String message = "Cannot load schema from location \"" + schemaLoc + "\".";
+ logger_.error(message);
+ }
+ try
+ {
+ String schemaSystemId = context.getResource(schemaLoc).toExternalForm();
+ preparser.preparseGrammar(XMLGrammarDescription.XML_SCHEMA,
+ new XMLInputSource(null, schemaSystemId, null, schemaIS, null));
+ }
+ catch (Exception e)
+ {
+ String message = "Parsing schema loaded from location \"" + schemaLoc + "\" failed.";
+ logger_.error(message, e);
+ }
+ }
+
+
+}
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/moainvoker/MOAInvoker.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/moainvoker/MOAInvoker.java
new file mode 100644
index 000000000..e89d255f0
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/moainvoker/MOAInvoker.java
@@ -0,0 +1,92 @@
+/*
+ * Created on 19.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.moainvoker;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.rmi.RemoteException;
+import java.util.Vector;
+
+import javax.xml.namespace.QName;
+import javax.xml.rpc.Call;
+import javax.xml.rpc.Service;
+import javax.xml.rpc.ServiceException;
+import javax.xml.rpc.ServiceFactory;
+
+import org.apache.axis.message.SOAPBodyElement;
+import org.apache.xml.serialize.OutputFormat;
+import org.apache.xml.serialize.XMLSerializer;
+import org.w3c.dom.Document;
+
+import at.gv.egovernment.moa.spss.slinterface.Constants;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class MOAInvoker
+{
+ /**
+ * Invokes MOA SP.
+ *
+ * @param request The XML request to be sent to MOA SP.
+ *
+ * @param endpoint The endpoint of the SOAP service where to send the XML request to.
+ *
+ * @return the XML response from the service.
+ *
+ * @throws Exception if getting the XML response from the SOAP response body fails.
+ *
+ * @throws RemoteException if MOA SP signals an error.
+ *
+ * @throws ServiceException if the SOAP client invoking MOA SP signals an error.
+ */
+ public static Document invokeSP(Document request, String endpoint)
+ throws Exception, RemoteException, ServiceException
+ {
+ QName serviceQName = new QName(Constants.MI_SP_QNAME_);
+ return invoke(request, endpoint, serviceQName);
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ private static Document invoke(Document request, String endpoint, QName serviceQName) throws Exception
+ {
+ // Instantiate AXIS service
+ Service service = ServiceFactory.newInstance().createService(serviceQName);
+
+ // Create and configure service call
+ Call call = service.createCall();
+ call.setTargetEndpointAddress(endpoint);
+
+ // Create SOAP body
+ SOAPBodyElement body = new SOAPBodyElement(request.getDocumentElement());
+ SOAPBodyElement[] params = new SOAPBodyElement[] {body};
+
+ // Make call
+ Vector responses = (Vector) call.invoke(params);
+
+ // Get response
+ SOAPBodyElement responseBody = (SOAPBodyElement) responses.get(0);
+ Document response = responseBody.getAsDocument();
+ return response;
+ }
+
+ /* ---------------------------------------------------------------------------------------------------- */
+
+ public static void serializeDocument(Document doc, OutputStream out) throws IOException
+ {
+ OutputFormat format = new OutputFormat(doc);
+
+ format.setLineSeparator("\n");
+ format.setIndenting(false);
+ format.setPreserveSpace(true);
+ format.setOmitXMLDeclaration(false);
+ format.setEncoding("UTF-8");
+
+ XMLSerializer serializer = new XMLSerializer(out, format);
+ serializer.serialize(doc);
+ }
+}
diff --git a/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/servlets/MOAServlet.java b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/servlets/MOAServlet.java
new file mode 100644
index 000000000..1ec18e5cb
--- /dev/null
+++ b/spss.slinterface/WEB-INF/src/at/gv/egovernment/moa/spss/slinterface/servlets/MOAServlet.java
@@ -0,0 +1,111 @@
+/*
+ * Created on 19.11.2003
+ *
+ * (c) Stabsstelle IKT-Strategie des Bundes
+ */
+package at.gv.egovernment.moa.spss.slinterface.servlets;
+
+import java.io.IOException;
+import java.rmi.RemoteException;
+import java.util.Properties;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.rpc.ServiceException;
+
+import org.apache.log4j.Logger;
+import org.apache.xerces.parsers.DOMParser;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import at.gv.egovernment.moa.spss.slinterface.Constants;
+import at.gv.egovernment.moa.spss.slinterface.moainvoker.MOAInvoker;
+
+/**
+ * @author Gregor Karlinger (mailto:gregor.karlinger@cio.gv.at)
+ */
+public class MOAServlet extends HttpServlet
+{
+ private static Logger logger_ = Logger.getLogger(Constants.LH_SERVLETS_);
+
+ /**
+ * Default constructor.
+ */
+ public MOAServlet()
+ {
+ super();
+ }
+
+ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException
+ {
+ // Get moa request form http request
+ Document moaXmlRequest = null;
+ DOMParser xmlParser = (DOMParser) this.getServletContext().getAttribute(Constants.WSCP_XMLPARSER_);
+ try
+ {
+ InputSource requestIS = new InputSource(request.getInputStream());
+ xmlParser.parse(requestIS);
+ moaXmlRequest = xmlParser.getDocument();
+ }
+ catch (IOException ioe)
+ {
+ String message = "Getting MOA XML request from http request input failed.";
+ logger_.error(message, ioe);
+ throw new ServletException(message, ioe);
+ }
+ catch (SAXException se)
+ {
+ String message = "Parsing MOA XML request got from http request failed.";
+ logger_.error(message, se);
+ throw new ServletException(message, se);
+ }
+
+ // Send request to MOA SP
+ Properties initProps = (Properties) this.getServletContext().getAttribute(Constants.WSCP_INIT_PROPS_);
+ String endPoint = initProps.getProperty(Constants.IP_SP_ENDPOINT_);
+ if (endPoint == null)
+ {
+ String message = "No endpoint configured for MOA SP service.";
+ logger_.error(message);
+ throw new ServletException(message);
+ }
+ Document moaXMLResponseDoc = null;
+ try
+ {
+ moaXMLResponseDoc = MOAInvoker.invokeSP(moaXmlRequest, endPoint);
+ }
+ catch (Exception e)
+ {
+ String message;
+ if (e instanceof RemoteException)
+ {
+ message = "MOA SP service indicated an error at request execution.";
+ }
+ else if (e instanceof ServiceException)
+ {
+ message = "MOA SP client indicated an error at request execution.";
+ }
+ else
+ {
+ message = "Could not create DOM Document from MOA SP service response.";
+ }
+ logger_.error(message, e);
+ throw new ServletException(message, e);
+ }
+
+ // Write moa response to http response
+ try
+ {
+ MOAInvoker.serializeDocument(moaXMLResponseDoc, response.getOutputStream());
+ }
+ catch (IOException e)
+ {
+ String message = "Writing MOA SP XML response to http response failed.";
+ logger_.error(message, e);
+ throw new ServletException(message, e);
+ }
+ }
+}
diff --git a/spss.slinterface/WEB-INF/web.xml b/spss.slinterface/WEB-INF/web.xml
new file mode 100644
index 000000000..db502faf8
--- /dev/null
+++ b/spss.slinterface/WEB-INF/web.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE web-app
+ PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+ "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
+
+<web-app>
+ <display-name>Security-Layer-Interface to MOA SPSS</display-name>
+ <description>This web service provides a Security-Layer-Interface to MOA SPSS.</description>
+
+ <filter>
+ <filter-name>SL2MOAFilter</filter-name>
+ <filter-class>at.gv.egovernment.moa.spss.slinterface.filters.SL2MOAFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>SL2MOAFilter</filter-name>
+ <servlet-name>MOAServlet</servlet-name>
+ </filter-mapping>
+
+ <listener>
+ <listener-class>at.gv.egovernment.moa.spss.slinterface.listeners.ContextListener</listener-class>
+ </listener>
+
+ <servlet>
+ <servlet-name>MOAServlet</servlet-name>
+ <display-name>MOA Servlet</display-name>
+ <servlet-class>
+ at.gv.egovernment.moa.spss.slinterface.servlets.MOAServlet
+ </servlet-class>
+ <load-on-startup>0</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>MOAServlet</servlet-name>
+ <url-pattern>/http-security-layer-request</url-pattern>
+ </servlet-mapping>
+
+</web-app>
diff --git a/spss.slinterface/res/resources/properties/init.properties b/spss.slinterface/res/resources/properties/init.properties
new file mode 100644
index 000000000..b0757310e
--- /dev/null
+++ b/spss.slinterface/res/resources/properties/init.properties
@@ -0,0 +1,7 @@
+location.stylesheet.sl2moa = /WEB-INF/classes/resources/stylesheets/sl2moa.xsl
+location.stylesheet.moa2sl = /WEB-INF/classes/resources/stylesheets/moa2sl.xsl
+
+location.schema.sl = /WEB-INF/classes/resources/schemas/Core.20031231.xsd
+location.schema.moa = /WEB-INF/classes/resources/schemas/MOA-SPSS-1.2.xsd
+
+service.endpoint.sp = http://localhost:8080/moa-spss/services/SignatureVerification \ No newline at end of file
diff --git a/spss.slinterface/res/resources/schemas/Core.20020225.xsd b/spss.slinterface/res/resources/schemas/Core.20020225.xsd
new file mode 100644
index 000000000..2797cf612
--- /dev/null
+++ b/spss.slinterface/res/resources/schemas/Core.20020225.xsd
@@ -0,0 +1,399 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Securitylayer, Schnittstellenspezifikation -->
+<!-- XML-Schema für Schnittstellenspezifikation Version 1.1.0, Protokollelemente im datierten Namespace 20020225 -->
+<!-- 31. 08. 2002, Operative Unit, CIO, BMOeLS -->
+<xsd:schema targetNamespace="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1.0">
+ <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+ <!--########### Create CMS Signature ###-->
+ <!--### Create CMS Signature Request ###-->
+ <xsd:element name="CreateCMSSignatureRequest" type="CreateCMSSignatureRequestType"/>
+ <xsd:complexType name="CreateCMSSignatureRequestType">
+ <xsd:sequence>
+ <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType"/>
+ <xsd:element name="DataObject" type="CMSDataObjectRequiredMetaType"/>
+ </xsd:sequence>
+ <xsd:attribute name="Structure" use="required">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="detached"/>
+ <xsd:enumeration value="enveloping"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:attribute>
+ </xsd:complexType>
+ <xsd:complexType name="CMSDataObjectRequiredMetaType">
+ <xsd:complexContent>
+ <xsd:restriction base="CMSDataObjectOptionalMetaType">
+ <xsd:sequence>
+ <xsd:element name="MetaInfo" type="MetaInfoType"/>
+ <xsd:element name="Content" type="CMSContentBaseType"/>
+ </xsd:sequence>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="CMSDataObjectOptionalMetaType">
+ <xsd:sequence>
+ <xsd:element name="MetaInfo" type="MetaInfoType" minOccurs="0"/>
+ <xsd:element name="Content" type="CMSContentBaseType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="CMSContentBaseType">
+ <xsd:complexContent>
+ <xsd:restriction base="ContentOptionalRefType">
+ <xsd:choice minOccurs="0">
+ <xsd:element name="Base64Content" type="xsd:base64Binary"/>
+ </xsd:choice>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <!--### Create CMS Siganture Response ###-->
+ <xsd:element name="CreateCMSSignatureResponse" type="CreateCMSSignatureResponseType"/>
+ <xsd:complexType name="CreateCMSSignatureResponseType">
+ <xsd:sequence>
+ <xsd:element name="CMSSignature" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--########## Create XML Signature ###-->
+ <!--### Create XML Signature Request ###-->
+ <xsd:element name="CreateXMLSignatureRequest" type="CreateXMLSignatureRequestType"/>
+ <xsd:complexType name="CreateXMLSignatureRequestType">
+ <xsd:sequence>
+ <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType"/>
+ <xsd:element name="DataObjectInfo" type="DataObjectInfoType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="MetaInfoType">
+ <xsd:sequence>
+ <xsd:element name="MimeType" type="MimeTypeType"/>
+ <xsd:element name="Description" type="xsd:anyURI" minOccurs="0"/>
+ <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="DataObjectInfoType">
+ <xsd:sequence>
+ <xsd:element name="DataObject" type="ContentOptionalRefType"/>
+ <xsd:element name="TransformsInfo" type="TransformsInfoType" maxOccurs="unbounded"/>
+ <xsd:element name="Supplement" type="XMLDataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="Structure" use="required">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="detached"/>
+ <xsd:enumeration value="enveloping"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:attribute>
+ </xsd:complexType>
+ <xsd:complexType name="TransformsInfoType">
+ <xsd:sequence>
+ <xsd:element ref="dsig:Transforms" minOccurs="0"/>
+ <xsd:element name="FinalDataMetaInfo" type="MetaInfoType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="XMLDataObjectAssociationType">
+ <xsd:sequence>
+ <xsd:element name="MetaInfo" type="MetaInfoType" minOccurs="0"/>
+ <xsd:element name="Content" type="ContentRequiredRefType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Create XML Signature Response ###-->
+ <xsd:element name="CreateXMLSignatureResponse" type="CreateXMLSignatureResponseType"/>
+ <xsd:complexType name="CreateXMLSignatureResponseType">
+ <xsd:sequence>
+ <xsd:element ref="dsig:Signature"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--########## Verify CMS Signature ###-->
+ <!--### Verifiy CMS Signature Request ###-->
+ <xsd:element name="VerifyCMSSignatureRequest" type="VerifyCMSSignatureRequestType"/>
+ <xsd:complexType name="VerifyCMSSignatureRequestType">
+ <xsd:sequence>
+ <xsd:element name="DateTime" type="xsd:dateTime" minOccurs="0"/>
+ <xsd:element name="CMSSignature" type="xsd:base64Binary"/>
+ <xsd:element name="DataObject" type="CMSDataObjectOptionalMetaType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Verify CMS Signature Response ###-->
+ <xsd:element name="VerifyCMSSignatureResponse" type="VerifyCMSSignatureResponseType"/>
+ <xsd:complexType name="VerifyCMSSignatureResponseType">
+ <xsd:sequence>
+ <xsd:element name="SignerInfo" type="dsig:KeyInfoType"/>
+ <xsd:element name="SignatureCheck" type="CheckResultType"/>
+ <xsd:element name="CertificateCheck" type="CheckResultType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--########## Verify XML Signature ###-->
+ <!--### Verify XML Signature Request ###-->
+ <xsd:element name="VerifyXMLSignatureRequest" type="VerifyXMLSignatureRequestType"/>
+ <xsd:complexType name="VerifyXMLSignatureRequestType">
+ <xsd:sequence>
+ <xsd:element name="DateTime" type="xsd:dateTime" minOccurs="0"/>
+ <xsd:element name="SignatureInfo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="SignatureEnvironment">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:any namespace="##any" processContents="skip"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="SignatureLocation" type="xsd:token"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Supplement" type="XMLDataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Verify XML Signature Response ###-->
+ <xsd:element name="VerifyXMLSignatureResponse" type="VerifyXMLSignatureResponseType"/>
+ <xsd:complexType name="VerifyXMLSignatureResponseType">
+ <xsd:sequence>
+ <xsd:element name="SignerInfo" type="dsig:KeyInfoType"/>
+ <xsd:element name="SignatureCheck" type="CheckResultType"/>
+ <xsd:element name="SignatureManifestCheck" type="CheckResultType"/>
+ <xsd:element name="CertificateCheck" type="CheckResultType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="CheckResultType">
+ <xsd:sequence>
+ <xsd:element name="Code" type="xsd:nonNegativeInteger"/>
+ <xsd:element name="Info" type="AnyChildrenType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--########## Infobox Commands ###-->
+ <!--### Check Available Infoboxes Request ###-->
+ <xsd:element name="InfoboxAvailableRequest" type="InfoboxAvailableRequestType"/>
+ <xsd:complexType name="InfoboxAvailableRequestType"/>
+ <!--### Check Available Infoboxes Response ###-->
+ <xsd:element name="InfoboxAvailableResponse" type="InfoboxAvailableResponseType"/>
+ <xsd:complexType name="InfoboxAvailableResponseType">
+ <xsd:sequence minOccurs="0" maxOccurs="unbounded">
+ <xsd:element name="InfoboxIdentifier" type="BoxIdentifierType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Read Infobox Request ###-->
+ <xsd:element name="InfoboxReadRequest" type="InfoboxReadRequestType"/>
+ <xsd:complexType name="InfoboxReadRequestType">
+ <xsd:sequence>
+ <xsd:element name="InfoboxIdentifier" type="BoxIdentifierType"/>
+ <xsd:choice>
+ <xsd:element name="BinaryFileParameters" type="InfoboxReadParamsBinaryFileType"/>
+ <xsd:element name="AssocArrayParameters" type="InfoboxReadParamsAssocArrayType"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="InfoboxReadParamsBinaryFileType">
+ <xsd:attribute name="ContentIsXMLEntity" type="xsd:boolean" use="optional" default="false"/>
+ </xsd:complexType>
+ <xsd:complexType name="InfoboxReadParamsAssocArrayType">
+ <xsd:choice>
+ <xsd:element name="ReadKeys">
+ <xsd:complexType>
+ <xsd:attribute name="SearchString" type="WildCardSearchStringType" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="ReadPairs">
+ <xsd:complexType>
+ <xsd:attribute name="SearchString" type="WildCardSearchStringType" use="required"/>
+ <xsd:attribute name="ValuesAreXMLEntities" type="xsd:boolean" use="optional" default="false"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="ReadValue">
+ <xsd:complexType>
+ <xsd:attribute name="Key" type="BoxIdentifierType" use="required"/>
+ <xsd:attribute name="ValueIsXMLEntity" type="xsd:boolean" use="optional" default="false"/>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ <!--### Read Infobox Response ###-->
+ <xsd:element name="InfoboxReadResponse" type="InfoboxReadResponseType"/>
+ <xsd:complexType name="InfoboxReadResponseType">
+ <xsd:choice>
+ <xsd:element name="BinaryFileData" type="ContentBaseType"/>
+ <xsd:element name="AssocArrayData" type="InfoboxReadDataAssocArrayType"/>
+ </xsd:choice>
+ </xsd:complexType>
+ <xsd:complexType name="InfoboxReadDataAssocArrayType">
+ <xsd:choice>
+ <xsd:sequence minOccurs="0" maxOccurs="unbounded">
+ <xsd:element name="Key" type="BoxIdentifierType"/>
+ </xsd:sequence>
+ <xsd:sequence minOccurs="0" maxOccurs="unbounded">
+ <xsd:element name="Pair" type="InfoboxAssocArrayPairType"/>
+ </xsd:sequence>
+ </xsd:choice>
+ </xsd:complexType>
+ <!--### Update Infobox Request ###-->
+ <xsd:element name="InfoboxUpdateRequest" type="InfoboxUpdateRequestType"/>
+ <xsd:complexType name="InfoboxUpdateRequestType">
+ <xsd:sequence>
+ <xsd:element name="InfoboxIdentifier" type="BoxIdentifierType"/>
+ <xsd:choice>
+ <xsd:element name="BinaryFileParameters" type="ContentBaseType"/>
+ <xsd:element name="AssocArrayParameters" type="InfoboxUpdateParamsAssocArrayType"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="InfoboxUpdateParamsAssocArrayType">
+ <xsd:choice>
+ <xsd:element name="UpdateKey">
+ <xsd:complexType>
+ <xsd:attribute name="Key" type="xsd:token" use="required"/>
+ <xsd:attribute name="NewKey" type="xsd:token" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="UpdateValue" type="InfoboxAssocArrayPairType"/>
+ <xsd:element name="DeletePair">
+ <xsd:complexType>
+ <xsd:attribute name="Key" type="xsd:token" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ <!--### Update Infobox Response ###-->
+ <xsd:element name="InfoboxUpdateResponse" type="InfoboxUpdateResponseType"/>
+ <xsd:complexType name="InfoboxUpdateResponseType"/>
+ <!--########## Create Session Certificate ###-->
+ <!--### Create Session Certificate Request ###-->
+ <xsd:element name="CreateSessionKeyRequest" type="CreateSessionKeyRequestType"/>
+ <xsd:complexType name="CreateSessionKeyRequestType">
+ <xsd:sequence>
+ <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType"/>
+ <xsd:element name="Password" type="xsd:string"/>
+ <xsd:element name="Minutes" type="xsd:positiveInteger"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Create Session Certificate Response ###-->
+ <xsd:element name="CreateSessionKeyResponse" type="CreateSessionKeyResponseType"/>
+ <xsd:complexType name="CreateSessionKeyResponseType">
+ <xsd:sequence>
+ <xsd:element name="PKCS12Object" type="xsd:base64Binary"/>
+ <xsd:element name="Certificate" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--########## Create Symmetric Key ###-->
+ <!--### Create SymmetricKey Request ###-->
+ <xsd:element name="CreateSymmetricSecretRequest" type="CreateSymmetricSecretRequestType"/>
+ <xsd:complexType name="CreateSymmetricSecretRequestType" mixed="false">
+ <xsd:sequence>
+ <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType"/>
+ <xsd:element ref="dsig:KeyInfo"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Create SymmetricKey Response ###-->
+ <xsd:element name="CreateSymmetricSecretResponse" type="CreateSymmetricSecretResponseType"/>
+ <xsd:complexType name="CreateSymmetricSecretResponseType" mixed="false">
+ <xsd:sequence>
+ <xsd:element name="SymmetricSecretValue" type="xsd:base64Binary"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--########## Get Properties ###-->
+ <!--### Get Properties Request ###-->
+ <xsd:element name="GetPropertiesRequest" type="GetPropertiesRequestType"/>
+ <xsd:complexType name="GetPropertiesRequestType"/>
+ <!--### Get Properties Response ###-->
+ <xsd:element name="GetPropertiesResponse" type="GetPropertiesResponseType"/>
+ <xsd:complexType name="GetPropertiesResponseType">
+ <xsd:sequence>
+ <xsd:element name="ViewerMediaType" type="MimeTypeType" maxOccurs="unbounded"/>
+ <xsd:element name="XMLSignatureTransform" type="xsd:anyURI" minOccurs="5" maxOccurs="unbounded"/>
+ <xsd:element name="KeyboxIdentifier" type="BoxIdentifierType" minOccurs="2" maxOccurs="unbounded"/>
+ <xsd:element name="Binding" type="BindingType" minOccurs="2" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="BindingType" mixed="true">
+ <xsd:complexContent mixed="true">
+ <xsd:extension base="AnyChildrenType">
+ <xsd:attribute name="Identifier" type="xsd:token" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <!--########### Get Token Status ###-->
+ <!--### Get Token Status Reqeust ###-->
+ <xsd:element name="GetStatusRequest" type="GetStatusRequestType"/>
+ <xsd:complexType name="GetStatusRequestType">
+ <xsd:sequence minOccurs="0">
+ <xsd:element name="TokenStatus" type="TokenStatusType"/>
+ <xsd:element name="MaxDelay" type="xsd:nonNegativeInteger"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Get Token Status Response ###-->
+ <xsd:element name="GetStatusResponse" type="GetStatusResponseType"/>
+ <xsd:complexType name="GetStatusResponseType">
+ <xsd:sequence>
+ <xsd:element name="TokenStatus" type="TokenStatusType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:simpleType name="TokenStatusType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="ready"/>
+ <xsd:enumeration value="removed"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <!--########## Error Response ###-->
+ <xsd:element name="ErrorResponse" type="ErrorResponseType"/>
+ <xsd:complexType name="ErrorResponseType">
+ <xsd:sequence>
+ <xsd:element name="ErrorCode" type="xsd:integer"/>
+ <xsd:element name="Info" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--########## Auxiliary Types ###-->
+ <xsd:simpleType name="BoxIdentifierType">
+ <xsd:restriction base="xsd:token"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="MimeTypeType">
+ <xsd:restriction base="xsd:token"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="WildCardSearchStringType">
+ <xsd:restriction base="xsd:string">
+ <xsd:pattern value="[^\*/]*(\*[^\*/]*)?(/[^\*/]*(\*[^\*/]*)?)*"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:complexType name="AnyChildrenType" mixed="true">
+ <xsd:sequence minOccurs="0" maxOccurs="unbounded">
+ <xsd:any namespace="##any" processContents="lax"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="XMLContentType" mixed="true">
+ <xsd:complexContent mixed="true">
+ <xsd:extension base="AnyChildrenType">
+ <xsd:attribute ref="xml:space" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ContentBaseType">
+ <xsd:choice minOccurs="0">
+ <xsd:element name="Base64Content" type="xsd:base64Binary"/>
+ <xsd:element name="XMLContent" type="XMLContentType"/>
+ </xsd:choice>
+ </xsd:complexType>
+ <xsd:complexType name="ContentOptionalRefType">
+ <xsd:complexContent>
+ <xsd:extension base="ContentBaseType">
+ <xsd:attribute name="Reference" type="xsd:anyURI" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ContentRequiredRefType">
+ <xsd:complexContent>
+ <xsd:restriction base="ContentOptionalRefType">
+ <xsd:choice>
+ <xsd:element name="Base64Content" type="xsd:base64Binary"/>
+ <xsd:element name="XMLContent" type="XMLContentType"/>
+ </xsd:choice>
+ <xsd:attribute name="Reference" type="xsd:anyURI" use="required"/>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="InfoboxAssocArrayPairType">
+ <xsd:complexContent>
+ <xsd:extension base="ContentBaseType">
+ <xsd:attribute name="Key" type="xsd:string" use="required"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/spss.slinterface/res/resources/schemas/Core.20020831.xsd b/spss.slinterface/res/resources/schemas/Core.20020831.xsd
new file mode 100644
index 000000000..6ec40be63
--- /dev/null
+++ b/spss.slinterface/res/resources/schemas/Core.20020831.xsd
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Securitylayer, Schnittstellenspezifikation -->
+<!-- XML-Schema für Schnittstellenspezifikation Version 1.1.0, Protokollelemente im datierten Namespace 20020831 -->
+<!-- 31. 08. 2002, Operative Unit, CIO, BMOeLS -->
+<xsd:schema targetNamespace="http://www.buergerkarte.at/namespaces/securitylayer/20020831#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.buergerkarte.at/namespaces/securitylayer/20020831#" xmlns:sl10="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1.0">
+ <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+ <xsd:import namespace="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" schemaLocation="Core.20020225.xsd"/>
+ <!--########## Create XML Signature ###-->
+ <!--### Create XML Signature Request ###-->
+ <xsd:element name="CreateXMLSignatureRequest" type="CreateXMLSignatureRequestType"/>
+ <xsd:complexType name="CreateXMLSignatureRequestType">
+ <xsd:sequence>
+ <xsd:element name="KeyboxIdentifier" type="sl10:BoxIdentifierType"/>
+ <xsd:element name="DataObjectInfo" type="sl10:DataObjectInfoType" maxOccurs="unbounded"/>
+ <xsd:element name="SignatureInfo" type="SignatureInfoCreationType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="SignatureInfoCreationType">
+ <xsd:sequence>
+ <xsd:element name="SignatureEnvironment" type="sl10:ContentOptionalRefType"/>
+ <xsd:element name="SignatureLocation">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:token">
+ <xsd:attribute name="Index" type="xsd:nonNegativeInteger" use="required"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Supplement" type="sl10:XMLDataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Create XML Signature Response ###-->
+ <xsd:element name="CreateXMLSignatureResponse" type="CreateXMLSignatureResponseType"/>
+ <xsd:complexType name="CreateXMLSignatureResponseType">
+ <xsd:sequence>
+ <xsd:any namespace="##any" processContents="lax"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--########## Verify CMS Signature ###-->
+ <!--### Verifiy CMS Signature Request ###-->
+ <xsd:element name="VerifyCMSSignatureRequest" type="VerifyCMSSignatureRequestType"/>
+ <xsd:complexType name="VerifyCMSSignatureRequestType">
+ <xsd:sequence>
+ <xsd:element name="DateTime" type="xsd:dateTime" minOccurs="0"/>
+ <xsd:element name="CMSSignature" type="xsd:base64Binary"/>
+ <xsd:element name="DataObject" type="sl10:CMSDataObjectOptionalMetaType" minOccurs="0"/>
+ </xsd:sequence>
+ <xsd:attribute name="Signatories" type="SignatoriesType" use="optional" default="1"/>
+ </xsd:complexType>
+ <xsd:simpleType name="SignatoriesType">
+ <xsd:union memberTypes="AllSignatoriesType">
+ <xsd:simpleType>
+ <xsd:list itemType="xsd:positiveInteger"/>
+ </xsd:simpleType>
+ </xsd:union>
+ </xsd:simpleType>
+ <xsd:simpleType name="AllSignatoriesType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="all"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <!--### Verify CMS Signature Response ###-->
+ <xsd:element name="VerifyCMSSignatureResponse" type="VerifyCMSSignatureResponseType"/>
+ <xsd:complexType name="VerifyCMSSignatureResponseType">
+ <xsd:sequence maxOccurs="unbounded">
+ <xsd:element name="SignerInfo" type="dsig:KeyInfoType"/>
+ <xsd:element name="SignatureCheck" type="sl10:CheckResultType"/>
+ <xsd:element name="CertificateCheck" type="sl10:CheckResultType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:element name="QualifiedCertificate"/>
+ <!--########## Verify XML Signature ###-->
+ <!--### Verify XML Signature Request ###-->
+ <xsd:element name="VerifyXMLSignatureRequest" type="VerifyXMLSignatureRequestType"/>
+ <xsd:complexType name="VerifyXMLSignatureRequestType">
+ <xsd:sequence>
+ <xsd:element name="DateTime" type="xsd:dateTime" minOccurs="0"/>
+ <xsd:element name="SignatureInfo" type="SignatureInfoVerificationType"/>
+ <xsd:element name="Supplement" type="sl10:XMLDataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="SignatureInfoVerificationType">
+ <xsd:sequence>
+ <xsd:element name="SignatureEnvironment" type="sl10:ContentOptionalRefType"/>
+ <xsd:element name="SignatureLocation" type="xsd:token"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Verify XML Signature Response ###-->
+ <xsd:element name="VerifyXMLSignatureResponse" type="VerifyXMLSignatureResponseType"/>
+ <xsd:complexType name="VerifyXMLSignatureResponseType">
+ <xsd:sequence>
+ <xsd:element name="SignerInfo" type="dsig:KeyInfoType"/>
+ <xsd:element name="SignatureCheck" type="ReferencesCheckResultType"/>
+ <xsd:element name="SignatureManifestCheck" type="ReferencesCheckResultType"/>
+ <xsd:element name="XMLDSIGManifestCheck" type="ManifestRefsCheckResultType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="CertificateCheck" type="sl10:CheckResultType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="ReferencesCheckResultType">
+ <xsd:complexContent>
+ <xsd:restriction base="sl10:CheckResultType">
+ <xsd:sequence>
+ <xsd:element name="Code" type="xsd:nonNegativeInteger"/>
+ <xsd:element name="Info" type="ReferencesCheckResultInfoType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ReferencesCheckResultInfoType" mixed="true">
+ <xsd:complexContent mixed="true">
+ <xsd:restriction base="sl10:AnyChildrenType">
+ <xsd:sequence>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="FailedReference" type="xsd:positiveInteger" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ManifestRefsCheckResultType">
+ <xsd:complexContent>
+ <xsd:restriction base="sl10:CheckResultType">
+ <xsd:sequence>
+ <xsd:element name="Code" type="xsd:nonNegativeInteger"/>
+ <xsd:element name="Info" type="ManifestRefsCheckResultInfoType"/>
+ </xsd:sequence>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ManifestRefsCheckResultInfoType" mixed="true">
+ <xsd:complexContent mixed="true">
+ <xsd:extension base="ReferencesCheckResultInfoType">
+ <xsd:sequence>
+ <xsd:element name="ReferringSigReference" type="xsd:positiveInteger"/>
+ </xsd:sequence>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <!--########## Get Properties ###-->
+ <!--### Get Properties Response ###-->
+ <xsd:element name="GetPropertiesResponse" type="GetPropertiesResponseType"/>
+ <xsd:complexType name="GetPropertiesResponseType">
+ <xsd:sequence>
+ <xsd:element name="ViewerMediaType" type="sl10:MimeTypeType" maxOccurs="unbounded"/>
+ <xsd:element name="XMLSignatureTransform" type="xsd:anyURI" maxOccurs="unbounded"/>
+ <xsd:element name="KeyboxIdentifier" type="sl10:BoxIdentifierType" maxOccurs="unbounded"/>
+ <xsd:element name="Binding" type="sl10:BindingType" maxOccurs="unbounded"/>
+ <xsd:element name="ProtocolVersion" type="xsd:anyURI" maxOccurs="unbounded"/>
+ <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/spss.slinterface/res/resources/schemas/Core.20031231.xsd b/spss.slinterface/res/resources/schemas/Core.20031231.xsd
new file mode 100644
index 000000000..3ab0c0ddd
--- /dev/null
+++ b/spss.slinterface/res/resources/schemas/Core.20031231.xsd
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Securitylayer, Schnittstellenspezifikation -->
+<!-- XML-Schema für Schnittstellenspezifikation Version 1.2.0, Protokollelemente im datierten Namespace 20031231 -->
+<!-- 19. 11. 2003, Stabstelle IKT-Strategie, Bundeskanzleramt -->
+<xsd:schema targetNamespace="http://www.buergerkarte.at/namespaces/securitylayer/20031231#" xmlns:sl10="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns:sl11="http://www.buergerkarte.at/namespaces/securitylayer/20020831#" xmlns="http://www.buergerkarte.at/namespaces/securitylayer/20031231#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.1.0">
+ <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+ <xsd:import namespace="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" schemaLocation="Core.20020225.xsd"/>
+ <xsd:import namespace="http://www.buergerkarte.at/namespaces/securitylayer/20020831#" schemaLocation="Core.20020831.xsd"/>
+ <!--########## Verify XML Signature ###-->
+ <!--### Verify XML Signature Request ###-->
+ <xsd:element name="VerifyXMLSignatureRequest" type="VerifyXMLSignatureRequestType"/>
+ <xsd:complexType name="VerifyXMLSignatureRequestType">
+ <xsd:sequence>
+ <xsd:element name="DateTime" type="xsd:dateTime" minOccurs="0"/>
+ <xsd:element name="SignatureInfo" type="SignatureInfoVerificationType"/>
+ <xsd:element name="Supplement" type="XMLDataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="SignatureInfoVerificationType">
+ <xsd:sequence>
+ <xsd:element name="SignatureEnvironment" type="ContentOptionalRefType"/>
+ <xsd:element name="SignatureLocation" type="xsd:token"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="ContentBaseType">
+ <xsd:choice minOccurs="0">
+ <xsd:element name="Base64Content" type="xsd:base64Binary"/>
+ <xsd:element name="XMLContent" type="sl10:XMLContentType"/>
+ <xsd:element name="LocRefContent" type="xsd:anyURI"/>
+ </xsd:choice>
+ </xsd:complexType>
+ <xsd:complexType name="ContentOptionalRefType">
+ <xsd:complexContent>
+ <xsd:extension base="ContentBaseType">
+ <xsd:attribute name="Reference" type="xsd:anyURI" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ContentRequiredRefType">
+ <xsd:complexContent>
+ <xsd:restriction base="ContentOptionalRefType">
+ <xsd:choice minOccurs="0">
+ <xsd:element name="Base64Content" type="xsd:base64Binary"/>
+ <xsd:element name="XMLContent" type="sl10:XMLContentType"/>
+ <xsd:element name="LocRefContent" type="xsd:anyURI"/>
+ </xsd:choice>
+ <xsd:attribute name="Reference" type="xsd:anyURI" use="required"/>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="XMLDataObjectAssociationType">
+ <xsd:sequence>
+ <xsd:element name="MetaInfo" type="sl10:MetaInfoType" minOccurs="0"/>
+ <xsd:element name="Content" type="ContentRequiredRefType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/spss.slinterface/res/resources/schemas/MOA-SPSS-1.2.xsd b/spss.slinterface/res/resources/schemas/MOA-SPSS-1.2.xsd
new file mode 100644
index 000000000..c3a746446
--- /dev/null
+++ b/spss.slinterface/res/resources/schemas/MOA-SPSS-1.2.xsd
@@ -0,0 +1,445 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ MOA SP/SS 1.2 Schema
+-->
+<xsd:schema targetNamespace="http://reference.e-government.gv.at/namespace/moa/20020822#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://reference.e-government.gv.at/namespace/moa/20020822#" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.2">
+ <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+ <!--########## Create XML Signature ###-->
+ <!--### Create XML Signature Request ###-->
+ <xsd:element name="CreateXMLSignatureRequest">
+ <xsd:complexType>
+ <xsd:complexContent>
+ <xsd:extension base="CreateXMLSignatureRequestType"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:complexType name="CreateXMLSignatureRequestType">
+ <xsd:sequence>
+ <xsd:element name="KeyIdentifier" type="KeyIdentifierType"/>
+ <xsd:element name="SingleSignatureInfo" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>Ermöglichung der Stapelsignatur durch wiederholte Angabe dieses Elements</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="DataObjectInfo" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:complexContent>
+ <xsd:extension base="DataObjectInfoType">
+ <xsd:attribute name="ChildOfManifest" type="xsd:boolean" use="optional" default="false"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="CreateSignatureInfo" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="CreateSignatureEnvironment" type="ContentOptionalRefType"/>
+ <xsd:choice>
+ <xsd:annotation>
+ <xsd:documentation>Auswahl: Entweder explizite Angabe des Signaturorts sowie ggf. sinnvoller Supplements im Zshg. mit der Signaturumgebung, oder Verweis auf ein benanntes Profil</xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="CreateSignatureEnvironmentProfile"/>
+ <xsd:element name="CreateSignatureEnvironmentProfileID" type="ProfileIdentifierType"/>
+ </xsd:choice>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="SecurityLayerConformity" type="xsd:boolean" use="optional" default="true"/>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Create XML Signature Response ###-->
+ <xsd:complexType name="CreateXMLSignatureResponseType">
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>Kardinalität 1..oo erlaubt die Antwort auf eine Stapelsignatur-Anfrage</xsd:documentation>
+ </xsd:annotation>
+ <xsd:element name="SignatureEnvironment">
+ <xsd:annotation>
+ <xsd:documentation>Resultat, falls die Signaturerstellung erfolgreich war</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:any namespace="##any" processContents="lax"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element ref="ErrorResponse"/>
+ </xsd:choice>
+ </xsd:complexType>
+ <xsd:element name="CreateXMLSignatureResponse" type="CreateXMLSignatureResponseType"/>
+ <!--########## Verify CMS Signature ###-->
+ <!--### Verifiy CMS Signature Request ###-->
+ <xsd:element name="VerifyCMSSignatureRequest">
+ <xsd:complexType>
+ <xsd:complexContent>
+ <xsd:extension base="VerifyCMSSignatureRequestType">
+ <xsd:attribute name="Signatories" type="SignatoriesType" use="optional" default="1"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:complexType name="VerifyCMSSignatureRequestType">
+ <xsd:sequence>
+ <xsd:element name="DateTime" type="xsd:dateTime" minOccurs="0"/>
+ <xsd:element name="CMSSignature" type="xsd:base64Binary"/>
+ <xsd:element name="DataObject" type="CMSDataObjectOptionalMetaType" minOccurs="0"/>
+ <xsd:element name="TrustProfileID">
+ <xsd:annotation>
+ <xsd:documentation>mit diesem Profil wird eine Menge von vertrauenswürdigen Wurzelzertifikaten spezifiziert</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Verify CMS Signature Response ###-->
+ <xsd:element name="VerifyCMSSignatureResponse" type="VerifyCMSSignatureResponseType"/>
+ <xsd:complexType name="VerifyCMSSignatureResponseType">
+ <xsd:sequence maxOccurs="unbounded">
+ <xsd:element name="SignerInfo" type="dsig:KeyInfoType">
+ <xsd:annotation>
+ <xsd:documentation>only ds:X509Data and RetrievalMethod is supported; QualifiedCertificate is included as X509Data/any;publicAuthority is included as X509Data/any</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="SignatureCheck" type="CheckResultType"/>
+ <xsd:element name="CertificateCheck" type="CheckResultType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--########## Verify XML Signature ###-->
+ <!--### Verify XML Signature Request ###-->
+ <xsd:element name="VerifyXMLSignatureRequest" type="VerifyXMLSignatureRequestType"/>
+ <xsd:complexType name="VerifyXMLSignatureRequestType">
+ <xsd:sequence>
+ <xsd:element name="DateTime" type="xsd:dateTime" minOccurs="0"/>
+ <xsd:element name="VerifySignatureInfo">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="VerifySignatureEnvironment" type="ContentOptionalRefType"/>
+ <xsd:element name="VerifySignatureLocation" type="xsd:token"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:choice minOccurs="0" maxOccurs="unbounded">
+ <xsd:element ref="SupplementProfile"/>
+ <xsd:element name="SupplementProfileID" type="xsd:string"/>
+ </xsd:choice>
+ <xsd:element name="SignatureManifestCheckParams" minOccurs="0">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="ReferenceInfo" type="VerifyTransformsDataType" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>Pro dsig:Reference-Element in der zu überprüfenden XML-Signatur muss hier ein ReferenceInfo-Element erscheinen. Die Reihenfolge der einzelnen ReferenceInfo Elemente entspricht jener der dsig:Reference Elemente in der XML-Signatur.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ <xsd:attribute name="ReturnReferenceInputData" type="xsd:boolean" use="optional" default="true"/>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="ReturnHashInputData" minOccurs="0"/>
+ <xsd:element name="TrustProfileID">
+ <xsd:annotation>
+ <xsd:documentation>mit diesem Profil wird eine Menge von vertrauenswürdigen Wurzelzertifikaten spezifiziert</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--### Verify XML Signature Response ###-->
+ <xsd:element name="VerifyXMLSignatureResponse" type="VerifyXMLSignatureResponseType"/>
+ <xsd:complexType name="VerifyXMLSignatureResponseType">
+ <xsd:sequence>
+ <xsd:element name="SignerInfo" type="dsig:KeyInfoType">
+ <xsd:annotation>
+ <xsd:documentation>only ds:X509Data and ds:RetrievalMethod is supported; QualifiedCertificate is included as X509Data/any; PublicAuthority is included as X509Data/any</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="HashInputData" type="ContentExLocRefBaseType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="ReferenceInputData" type="ContentExLocRefBaseType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="SignatureCheck" type="ReferencesCheckResultType"/>
+ <xsd:element name="SignatureManifestCheck" type="ReferencesCheckResultType" minOccurs="0"/>
+ <xsd:element name="XMLDSIGManifestCheck" type="ManifestRefsCheckResultType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="CertificateCheck" type="CheckResultType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:simpleType name="ProfileIdentifierType">
+ <xsd:restriction base="xsd:token"/>
+ </xsd:simpleType>
+ <xsd:complexType name="MetaInfoType">
+ <xsd:sequence>
+ <xsd:element name="MimeType" type="MimeTypeType"/>
+ <xsd:element name="Description" type="xsd:anyURI" minOccurs="0"/>
+ <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="DataObjectInfoType">
+ <xsd:sequence>
+ <xsd:element name="DataObject">
+ <xsd:complexType>
+ <xsd:complexContent>
+ <xsd:extension base="ContentOptionalRefType"/>
+ </xsd:complexContent>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:choice>
+ <xsd:annotation>
+ <xsd:documentation>Auswahl: Entweder explizite Angabe EINER Transformationskette inklusive ggf. sinnvoller Supplements oder Verweis auf ein benanntes Profil</xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="CreateTransformsInfoProfile"/>
+ <xsd:element name="CreateTransformsInfoProfileID" type="ProfileIdentifierType"/>
+ </xsd:choice>
+ </xsd:sequence>
+ <xsd:attribute name="Structure" use="required">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="detached"/>
+ <xsd:enumeration value="enveloping"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:attribute>
+ </xsd:complexType>
+ <xsd:complexType name="TransformsInfoType">
+ <xsd:sequence>
+ <xsd:element ref="dsig:Transforms" minOccurs="0"/>
+ <xsd:element name="FinalDataMetaInfo" type="MetaInfoType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="XMLDataObjectAssociationType">
+ <xsd:sequence>
+ <xsd:element name="MetaInfo" type="MetaInfoType" minOccurs="0"/>
+ <xsd:element name="Content" type="ContentRequiredRefType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="CMSDataObjectOptionalMetaType">
+ <xsd:sequence>
+ <xsd:element name="MetaInfo" type="MetaInfoType" minOccurs="0"/>
+ <xsd:element name="Content" type="CMSContentBaseType"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="CMSContentBaseType">
+ <xsd:complexContent>
+ <xsd:restriction base="ContentOptionalRefType">
+ <xsd:choice minOccurs="0">
+ <xsd:element name="Base64Content" type="xsd:base64Binary"/>
+ </xsd:choice>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="CheckResultType">
+ <xsd:sequence>
+ <xsd:element name="Code" type="xsd:nonNegativeInteger"/>
+ <xsd:element name="Info" type="AnyChildrenType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="ReferencesCheckResultType">
+ <xsd:complexContent>
+ <xsd:restriction base="CheckResultType">
+ <xsd:sequence>
+ <xsd:element name="Code" type="xsd:nonNegativeInteger"/>
+ <xsd:element name="Info" type="ReferencesCheckResultInfoType" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ReferencesCheckResultInfoType" mixed="true">
+ <xsd:complexContent mixed="true">
+ <xsd:restriction base="AnyChildrenType">
+ <xsd:sequence>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="FailedReference" type="xsd:positiveInteger" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ManifestRefsCheckResultType">
+ <xsd:complexContent>
+ <xsd:restriction base="CheckResultType">
+ <xsd:sequence>
+ <xsd:element name="Code" type="xsd:nonNegativeInteger"/>
+ <xsd:element name="Info" type="ManifestRefsCheckResultInfoType"/>
+ </xsd:sequence>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ManifestRefsCheckResultInfoType" mixed="true">
+ <xsd:complexContent mixed="true">
+ <xsd:restriction base="AnyChildrenType">
+ <xsd:sequence>
+ <xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="FailedReference" type="xsd:positiveInteger" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="ReferringSigReference" type="xsd:positiveInteger"/>
+ </xsd:sequence>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <!--########## Error Response ###-->
+ <xsd:element name="ErrorResponse" type="ErrorResponseType">
+ <xsd:annotation>
+ <xsd:documentation>Resultat, falls die Signaturerstellung gescheitert ist</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:complexType name="ErrorResponseType">
+ <xsd:sequence>
+ <xsd:element name="ErrorCode" type="xsd:integer"/>
+ <xsd:element name="Info" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <!--########## Auxiliary Types ###-->
+ <xsd:simpleType name="KeyIdentifierType">
+ <xsd:restriction base="xsd:string"/>
+ </xsd:simpleType>
+ <xsd:simpleType name="KeyStorageType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="Software"/>
+ <xsd:enumeration value="Hardware"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:simpleType name="MimeTypeType">
+ <xsd:restriction base="xsd:token"/>
+ </xsd:simpleType>
+ <xsd:complexType name="AnyChildrenType" mixed="true">
+ <xsd:sequence>
+ <xsd:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="XMLContentType" mixed="true">
+ <xsd:complexContent mixed="true">
+ <xsd:extension base="AnyChildrenType">
+ <xsd:attribute ref="xml:space" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ContentBaseType">
+ <xsd:choice minOccurs="0">
+ <xsd:element name="Base64Content" type="xsd:base64Binary"/>
+ <xsd:element name="XMLContent" type="XMLContentType"/>
+ <xsd:element name="LocRefContent" type="xsd:anyURI"/>
+ </xsd:choice>
+ </xsd:complexType>
+ <xsd:complexType name="ContentExLocRefBaseType">
+ <xsd:complexContent>
+ <xsd:restriction base="ContentBaseType">
+ <xsd:choice minOccurs="0">
+ <xsd:element name="Base64Content" type="xsd:base64Binary"/>
+ <xsd:element name="XMLContent" type="XMLContentType"/>
+ </xsd:choice>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ContentOptionalRefType">
+ <xsd:complexContent>
+ <xsd:extension base="ContentBaseType">
+ <xsd:attribute name="Reference" type="xsd:anyURI" use="optional"/>
+ </xsd:extension>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="ContentRequiredRefType">
+ <xsd:complexContent>
+ <xsd:restriction base="ContentOptionalRefType">
+ <xsd:choice minOccurs="0">
+ <xsd:element name="Base64Content" type="xsd:base64Binary"/>
+ <xsd:element name="XMLContent" type="XMLContentType"/>
+ <xsd:element name="LocRefContent" type="xsd:anyURI"/>
+ </xsd:choice>
+ <xsd:attribute name="Reference" type="xsd:anyURI" use="required"/>
+ </xsd:restriction>
+ </xsd:complexContent>
+ </xsd:complexType>
+ <xsd:complexType name="VerifyTransformsDataType">
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>Ein oder mehrere Transformationswege können von der Applikation an MOA mitgeteilt werden. Die zu prüfende Signatur hat zumindest einem dieser Transformationswege zu entsprechen. Die Angabe kann explizit oder als Profilbezeichner erfolgen.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:element ref="VerifyTransformsInfoProfile"/>
+ <xsd:element name="VerifyTransformsInfoProfileID" type="xsd:string">
+ <xsd:annotation>
+ <xsd:documentation>Profilbezeichner für einen Transformationsweg</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ <xsd:element name="QualifiedCertificate"/>
+ <xsd:element name="PublicAuthority" type="PublicAuthorityType"/>
+ <xsd:complexType name="PublicAuthorityType">
+ <xsd:sequence>
+ <xsd:element name="Code" type="xsd:string" minOccurs="0"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:simpleType name="SignatoriesType">
+ <xsd:union memberTypes="AllSignatoriesType">
+ <xsd:simpleType>
+ <xsd:list itemType="xsd:positiveInteger"/>
+ </xsd:simpleType>
+ </xsd:union>
+ </xsd:simpleType>
+ <xsd:simpleType name="AllSignatoriesType">
+ <xsd:restriction base="xsd:string">
+ <xsd:enumeration value="all"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ <xsd:complexType name="CreateSignatureLocationType">
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:token">
+ <xsd:attribute name="Index" type="xsd:nonNegativeInteger" use="required"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ <xsd:complexType name="TransformParameterType">
+ <xsd:choice minOccurs="0">
+ <xsd:annotation>
+ <xsd:documentation>Die Angabe des Transformationsparameters (explizit oder als Hashwert) kann unterlassen werden, wenn die Applikation von der Unveränderlichkeit des Inhalts der in "Transformationsparamter", Attribut "URI" angegebenen URI ausgehen kann.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:element name="Base64Content" type="xsd:base64Binary">
+ <xsd:annotation>
+ <xsd:documentation>Der Transformationsparameter explizit angegeben.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ <xsd:element name="Hash">
+ <xsd:annotation>
+ <xsd:documentation>Der Hashwert des Transformationsparameters.</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="dsig:DigestMethod"/>
+ <xsd:element ref="dsig:DigestValue"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ <xsd:attribute name="URI" type="xsd:anyURI" use="required"/>
+ </xsd:complexType>
+ <xsd:element name="CreateSignatureEnvironmentProfile">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="CreateSignatureLocation" type="CreateSignatureLocationType"/>
+ <xsd:element name="Supplement" type="XMLDataObjectAssociationType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="VerifyTransformsInfoProfile">
+ <xsd:annotation>
+ <xsd:documentation>Explizite Angabe des Transformationswegs</xsd:documentation>
+ </xsd:annotation>
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="dsig:Transforms" minOccurs="0"/>
+ <xsd:element name="TransformParameter" type="TransformParameterType" minOccurs="0" maxOccurs="unbounded">
+ <xsd:annotation>
+ <xsd:documentation>Alle impliziten Transformationsparameter, die zum Durchlaufen der oben angeführten Transformationskette bekannt sein müssen, müssen hier angeführt werden. Das Attribut "URI" bezeichnet den Transformationsparameter in exakt jener Weise, wie er in der zu überprüfenden Signatur gebraucht wird.</xsd:documentation>
+ </xsd:annotation>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="Supplement" type="XMLDataObjectAssociationType"/>
+ <xsd:element name="SupplementProfile" type="XMLDataObjectAssociationType"/>
+ <xsd:element name="CreateTransformsInfoProfile">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="CreateTransformsInfo" type="TransformsInfoType"/>
+ <xsd:element ref="Supplement" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/spss.slinterface/res/resources/simpleVerReq.moa.xml b/spss.slinterface/res/resources/simpleVerReq.moa.xml
new file mode 100644
index 000000000..de6f34ed2
--- /dev/null
+++ b/spss.slinterface/res/resources/simpleVerReq.moa.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?><moa:VerifyXMLSignatureRequest xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:moa="http://reference.e-government.gv.at/namespace/moa/20020822#" xmlns:sl10="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns:sl11="http://www.buergerkarte.at/namespaces/securitylayer/20020831#"><moa:VerifySignatureInfo><moa:VerifySignatureEnvironment><moa:XMLContent><dsig:Signature Id="HS_signature" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dsig:SignedInfo><dsig:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><dsig:Reference Id="reference-data-1" URI="#signed-data"><dsig:Transforms><dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2"><xf2:XPath Filter="intersect" xmlns:xf2="http://www.w3.org/2002/06/xmldsig-filter2">id('signed-data')/node()</xf2:XPath></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><dsig:DigestValue>aylv7lNNes2pI022g7zfY1AOUmI=</dsig:DigestValue></dsig:Reference><dsig:Reference Type="http://uri.etsi.org/01903/v1.1.1#SignedProperties" URI="#refetsi"><dsig:Transforms><dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2"><xf2:XPath Filter="intersect" xmlns:etsi="http://uri.etsi.org/01903/v1.1.1#" xmlns:xf2="http://www.w3.org/2002/06/xmldsig-filter2">id('refetsi')/etsi:QualifyingProperties/etsi:SignedProperties</xf2:XPath></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><dsig:DigestValue>rYJgLYFMHaAcQjIlwSpFqXp5d1A=</dsig:DigestValue></dsig:Reference></dsig:SignedInfo><dsig:SignatureValue>VnwHohi/ootc3mIWh2WnInNvjA+/kJOr5bDRl5no1CMsNA+1qhoVZCErHt75gp9m
+O0MPBAcl7KfvkDTbHuMR1oG1Z4RUh52cE5oQietiwHGQIeuWEJ+IGcVcnkoayz4z
+2tQLkdotBhV0mCmkQjyADNn8P4H5yHNsdPq0joqy+2Q=</dsig:SignatureValue><dsig:KeyInfo><dsig:X509Data><dsig:X509Certificate>MIIE4DCCA8igAwIBAgICGEowDQYJKoZIhvcNAQEFBQAwgZcxCzAJBgNVBAYTAkFU
+MUgwRgYDVQQKEz9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGlt
+IGVsZWt0ci4gRGF0ZW52ZXJrZWhyIEdtYkgxHjAcBgNVBAsTFWEtc2lnbi1QcmVt
+aXVtLVNpZy0wMTEeMBwGA1UEAxMVYS1zaWduLVByZW1pdW0tU2lnLTAxMB4XDTAz
+MDEyNzEwMTQxM1oXDTA2MDEyNzEwMTQxM1owZDELMAkGA1UEBhMCQVQxGTAXBgNV
+BAMTEEdyZWdvciBLYXJsaW5nZXIxEjAQBgNVBAQTCUthcmxpbmdlcjEPMA0GA1UE
+KhMGR3JlZ29yMRUwEwYDVQQFEww5MTM4OTU1NTI5MTEwgZ8wDQYJKoZIhvcNAQEB
+BQADgY0AMIGJAoGBANrnnGN6wiOyq/rskasBf/Tz4grEKI+NBAuDgO5aqObNDBAe
+PISMQ2nFNX2nzoSNx7j7esl4KdgySmJkZWs/nErpE5fB8lHOfrPRD61dodS+Nhwi
+RWlm+I+ua+mOwR18fg/Cwt3YpXZihzZ+ju7eFlxRifHtKJCLOld6IvdFdFCtAgMB
+AAGjggHqMIIB5jATBgNVHSMEDDAKgAhA1/OeG4c6zDA+BggrBgEFBQcBAwEB/wQv
+MC0wCAYGBACORgEBMBUGBgQAjkYBAjALEwNFVVICAQACAQAwCgYIKwYBBQUHCwEw
+fQYIKwYBBQUHAQEEcTBvMEIGCCsGAQUFBzAChjZodHRwOi8vd3d3LmEtdHJ1c3Qu
+YXQvY2VydHMvYS1zaWduLVByZW1pdW0tU2lnLTAxYS5jcnQwKQYIKwYBBQUHMAGG
+HWh0dHA6Ly93d3cuYS10cnVzdC5hdDo4Mi9vY3NwME8GA1UdIARIMEYwRAYGKigA
+EQELMDowOAYIKwYBBQUHAgEWLGh0dHA6Ly93d3cuYS10cnVzdC5hdC9kb2NzL2Nw
+L2Etc2lnbi1QcmVtaXVtMGoGA1UdHwRjMGEwX6BdoFuGWWxkYXA6Ly9sZGFwLmEt
+dHJ1c3QuYXQvb3U9YS1zaWduLVByZW1pdW0tU2lnLTAxLG89QS1UcnVzdCxjPUFU
+P2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3Q/MBEGA1UdDgQKBAhOYExavdLCITAO
+BgNVHQ8BAf8EBAMCBsAwJQYDVR0RBB4wHIEaZ3JlZ29yLmthcmxpbmdlckBjaW8u
+Z3YuYXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAL+A2+Z5gQvn6SnZe
+sLvVVVB1crHe7NI/Om2rEwha4PfEk2pV9UdOg7C1XSzRu9jCNXIAuUSIpxTtAoJH
+sCk82S+iuEEgyVaXU/zFcbgT/k7opHXHswEC6ab2SQnyOlugyG+o7e9nRwAQTzzj
+ryICr3KACQcVwCpLKCgsU6gYQL1bi/c5vk4rnDYquSm1U34+xIl77CefZN/peGU4
+26vUzGma30wHBepLX5M+NXT7ILRzRk4i8oyOccIzOMi/iwAODJmgSSMcYjUgAngE
+oGYK9ngWu7Rr1gvy4lvOwpGGRpz2MP3nU9H2IfKk36n6hhVpc3EC6aF02RdIBD+x
+8VxVsA==</dsig:X509Certificate></dsig:X509Data></dsig:KeyInfo><dsig:Object Id="signed-data">Das ist ein Test.</dsig:Object><dsig:Object Id="refetsi"><etsi:QualifyingProperties Target="#HS_signature" xmlns:etsi="http://uri.etsi.org/01903/v1.1.1#"><etsi:SignedProperties><etsi:SignedSignatureProperties><etsi:SigningTime>2003-08-14T12:53:27Z</etsi:SigningTime><etsi:SigningCertificate><etsi:Cert><etsi:CertDigest><etsi:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><etsi:DigestValue>wl/zuayZxKuYlH2G2FQCTcosSSg=</etsi:DigestValue></etsi:CertDigest><etsi:IssuerSerial><dsig:X509IssuerName>CN=a-sign-Premium-Sig-01,OU=a-sign-Premium-Sig-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT</dsig:X509IssuerName><dsig:X509SerialNumber>6218</dsig:X509SerialNumber></etsi:IssuerSerial></etsi:Cert></etsi:SigningCertificate><etsi:SignaturePolicyIdentifier><etsi:SignaturePolicyImplied/></etsi:SignaturePolicyIdentifier></etsi:SignedSignatureProperties><etsi:SignedDataObjectProperties><etsi:DataObjectFormat ObjectReference="#reference-data-1"><etsi:MimeType>text/plain</etsi:MimeType></etsi:DataObjectFormat></etsi:SignedDataObjectProperties></etsi:SignedProperties></etsi:QualifyingProperties></dsig:Object></dsig:Signature></moa:XMLContent></moa:VerifySignatureEnvironment><moa:VerifySignatureLocation></moa:VerifySignatureLocation></moa:VerifySignatureInfo><moa:ReturnHashInputData/><moa:Trustprofile>TrustProfile1</moa:Trustprofile></moa:VerifyXMLSignatureRequest> \ No newline at end of file
diff --git a/spss.slinterface/res/resources/simpleVerReq.xml b/spss.slinterface/res/resources/simpleVerReq.xml
new file mode 100644
index 000000000..78180c2c3
--- /dev/null
+++ b/spss.slinterface/res/resources/simpleVerReq.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Gregor Karlinger (Bundeskanzleramt) -->
+<sl11:VerifyXMLSignatureRequest xmlns:sl10="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns:sl11="http://www.buergerkarte.at/namespaces/securitylayer/20020831#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.buergerkarte.at/namespaces/securitylayer/20020831#
+schemas\Core.20020831.xsd">
+ <sl11:SignatureInfo>
+ <sl11:SignatureEnvironment>
+ <sl10:XMLContent>
+ <dsig:Signature Id="HS_signature" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
+ <dsig:SignedInfo>
+ <dsig:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
+ <dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
+ <dsig:Reference Id="reference-data-1" URI="#signed-data">
+ <dsig:Transforms>
+ <dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
+ <xf2:XPath Filter="intersect" xmlns:xf2="http://www.w3.org/2002/06/xmldsig-filter2">id(&apos;signed-data&apos;)/node()</xf2:XPath>
+ </dsig:Transform>
+ </dsig:Transforms>
+ <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+ <dsig:DigestValue>aylv7lNNes2pI022g7zfY1AOUmI=</dsig:DigestValue>
+ </dsig:Reference>
+ <dsig:Reference Type="http://uri.etsi.org/01903/v1.1.1#SignedProperties" URI="#refetsi">
+ <dsig:Transforms>
+ <dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
+ <xf2:XPath Filter="intersect" xmlns:etsi="http://uri.etsi.org/01903/v1.1.1#" xmlns:xf2="http://www.w3.org/2002/06/xmldsig-filter2">id(&apos;refetsi&apos;)/etsi:QualifyingProperties/etsi:SignedProperties</xf2:XPath>
+ </dsig:Transform>
+ </dsig:Transforms>
+ <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+ <dsig:DigestValue>rYJgLYFMHaAcQjIlwSpFqXp5d1A=</dsig:DigestValue>
+ </dsig:Reference>
+ </dsig:SignedInfo>
+ <dsig:SignatureValue>VnwHohi/ootc3mIWh2WnInNvjA+/kJOr5bDRl5no1CMsNA+1qhoVZCErHt75gp9m
+O0MPBAcl7KfvkDTbHuMR1oG1Z4RUh52cE5oQietiwHGQIeuWEJ+IGcVcnkoayz4z
+2tQLkdotBhV0mCmkQjyADNn8P4H5yHNsdPq0joqy+2Q=</dsig:SignatureValue>
+ <dsig:KeyInfo>
+ <dsig:X509Data>
+ <dsig:X509Certificate>MIIE4DCCA8igAwIBAgICGEowDQYJKoZIhvcNAQEFBQAwgZcxCzAJBgNVBAYTAkFU
+MUgwRgYDVQQKEz9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGlt
+IGVsZWt0ci4gRGF0ZW52ZXJrZWhyIEdtYkgxHjAcBgNVBAsTFWEtc2lnbi1QcmVt
+aXVtLVNpZy0wMTEeMBwGA1UEAxMVYS1zaWduLVByZW1pdW0tU2lnLTAxMB4XDTAz
+MDEyNzEwMTQxM1oXDTA2MDEyNzEwMTQxM1owZDELMAkGA1UEBhMCQVQxGTAXBgNV
+BAMTEEdyZWdvciBLYXJsaW5nZXIxEjAQBgNVBAQTCUthcmxpbmdlcjEPMA0GA1UE
+KhMGR3JlZ29yMRUwEwYDVQQFEww5MTM4OTU1NTI5MTEwgZ8wDQYJKoZIhvcNAQEB
+BQADgY0AMIGJAoGBANrnnGN6wiOyq/rskasBf/Tz4grEKI+NBAuDgO5aqObNDBAe
+PISMQ2nFNX2nzoSNx7j7esl4KdgySmJkZWs/nErpE5fB8lHOfrPRD61dodS+Nhwi
+RWlm+I+ua+mOwR18fg/Cwt3YpXZihzZ+ju7eFlxRifHtKJCLOld6IvdFdFCtAgMB
+AAGjggHqMIIB5jATBgNVHSMEDDAKgAhA1/OeG4c6zDA+BggrBgEFBQcBAwEB/wQv
+MC0wCAYGBACORgEBMBUGBgQAjkYBAjALEwNFVVICAQACAQAwCgYIKwYBBQUHCwEw
+fQYIKwYBBQUHAQEEcTBvMEIGCCsGAQUFBzAChjZodHRwOi8vd3d3LmEtdHJ1c3Qu
+YXQvY2VydHMvYS1zaWduLVByZW1pdW0tU2lnLTAxYS5jcnQwKQYIKwYBBQUHMAGG
+HWh0dHA6Ly93d3cuYS10cnVzdC5hdDo4Mi9vY3NwME8GA1UdIARIMEYwRAYGKigA
+EQELMDowOAYIKwYBBQUHAgEWLGh0dHA6Ly93d3cuYS10cnVzdC5hdC9kb2NzL2Nw
+L2Etc2lnbi1QcmVtaXVtMGoGA1UdHwRjMGEwX6BdoFuGWWxkYXA6Ly9sZGFwLmEt
+dHJ1c3QuYXQvb3U9YS1zaWduLVByZW1pdW0tU2lnLTAxLG89QS1UcnVzdCxjPUFU
+P2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3Q/MBEGA1UdDgQKBAhOYExavdLCITAO
+BgNVHQ8BAf8EBAMCBsAwJQYDVR0RBB4wHIEaZ3JlZ29yLmthcmxpbmdlckBjaW8u
+Z3YuYXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAL+A2+Z5gQvn6SnZe
+sLvVVVB1crHe7NI/Om2rEwha4PfEk2pV9UdOg7C1XSzRu9jCNXIAuUSIpxTtAoJH
+sCk82S+iuEEgyVaXU/zFcbgT/k7opHXHswEC6ab2SQnyOlugyG+o7e9nRwAQTzzj
+ryICr3KACQcVwCpLKCgsU6gYQL1bi/c5vk4rnDYquSm1U34+xIl77CefZN/peGU4
+26vUzGma30wHBepLX5M+NXT7ILRzRk4i8oyOccIzOMi/iwAODJmgSSMcYjUgAngE
+oGYK9ngWu7Rr1gvy4lvOwpGGRpz2MP3nU9H2IfKk36n6hhVpc3EC6aF02RdIBD+x
+8VxVsA==</dsig:X509Certificate>
+ </dsig:X509Data>
+ </dsig:KeyInfo>
+ <dsig:Object Id="signed-data">Das ist ein Test.</dsig:Object>
+ <dsig:Object Id="refetsi">
+ <etsi:QualifyingProperties Target="#HS_signature" xmlns:etsi="http://uri.etsi.org/01903/v1.1.1#">
+ <etsi:SignedProperties>
+ <etsi:SignedSignatureProperties>
+ <etsi:SigningTime>2003-08-14T12:53:27Z</etsi:SigningTime>
+ <etsi:SigningCertificate>
+ <etsi:Cert>
+ <etsi:CertDigest>
+ <etsi:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+ <etsi:DigestValue>wl/zuayZxKuYlH2G2FQCTcosSSg=</etsi:DigestValue>
+ </etsi:CertDigest>
+ <etsi:IssuerSerial>
+ <dsig:X509IssuerName>CN=a-sign-Premium-Sig-01,OU=a-sign-Premium-Sig-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT</dsig:X509IssuerName>
+ <dsig:X509SerialNumber>6218</dsig:X509SerialNumber>
+ </etsi:IssuerSerial>
+ </etsi:Cert>
+ </etsi:SigningCertificate>
+ <etsi:SignaturePolicyIdentifier>
+ <etsi:SignaturePolicyImplied/>
+ </etsi:SignaturePolicyIdentifier>
+ </etsi:SignedSignatureProperties>
+ <etsi:SignedDataObjectProperties>
+ <etsi:DataObjectFormat ObjectReference="#reference-data-1">
+ <etsi:MimeType>text/plain</etsi:MimeType>
+ </etsi:DataObjectFormat>
+ </etsi:SignedDataObjectProperties>
+ </etsi:SignedProperties>
+ </etsi:QualifyingProperties>
+ </dsig:Object>
+ </dsig:Signature>
+ </sl10:XMLContent>
+ </sl11:SignatureEnvironment>
+ <sl11:SignatureLocation>/dsig:Signature</sl11:SignatureLocation>
+ </sl11:SignatureInfo>
+</sl11:VerifyXMLSignatureRequest>
diff --git a/spss.slinterface/res/resources/stylesheets/moa2sl.xsl b/spss.slinterface/res/resources/stylesheets/moa2sl.xsl
new file mode 100644
index 000000000..2e3a09655
--- /dev/null
+++ b/spss.slinterface/res/resources/stylesheets/moa2sl.xsl
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xmlspysamplexml E:\cio\projekte\basismodule\slinterface\res\resources\stylesheets\verifyresponse.moa.xml?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sl11="http://www.buergerkarte.at/namespaces/securitylayer/20020831#" xmlns:sl10="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns:moa="http://reference.e-government.gv.at/namespace/moa/20020822#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
+ <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
+ <!-- ################################################################################################# -->
+ <!-- # Templates -->
+ <!-- ################################################################################################# -->
+ <!-- =================================================================================================== -->
+ <!-- Template für / -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="/">
+ <xsl:apply-templates select="*"/>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template für moa:VerifyXMLSignatureResponse -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="moa:VerifyXMLSignatureResponse">
+ <sl11:VerifyXMLSignatureResponse>
+ <xsl:apply-templates select="moa:SignerInfo"/>
+ <sl11:SignatureCheck>
+ <xsl:call-template name="checkResult">
+ <xsl:with-param name="checkElem" select="moa:SignatureCheck"/>
+ </xsl:call-template>
+ </sl11:SignatureCheck>
+ <xsl:if test="./moa:SignatureManifestCheck">
+ <sl11:SignatureManifestCheck>
+ <xsl:call-template name="checkResult">
+ <xsl:with-param name="checkElem" select="moa:SignatureManifestCheck"/>
+ </xsl:call-template>
+ </sl11:SignatureManifestCheck>
+ </xsl:if>
+ <xsl:if test="./moa:XMLDSIGManifestCheck">
+ <sl11:XMLDSIGManifestCheck>
+ <xsl:call-template name="checkResult">
+ <xsl:with-param name="checkElem" select="moa:XMLDSIGManifestCheck"/>
+ </xsl:call-template>
+ </sl11:XMLDSIGManifestCheck>
+ </xsl:if>
+ <sl11:CertificateCheck>
+ <xsl:call-template name="checkResult">
+ <xsl:with-param name="checkElem" select="moa:CertificateCheck"/>
+ </xsl:call-template>
+ </sl11:CertificateCheck>
+ </sl11:VerifyXMLSignatureResponse>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template für moa:SignerInfo -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="moa:SignerInfo">
+ <sl11:SignerInfo>
+ <xsl:for-each select="*">
+ <xsl:choose>
+ <xsl:when test="namespace-uri(.) = 'http://reference.e-government.gv.at/namespace/moa/20020822#'">
+ <!-- suppress moa elements -->
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </sl11:SignerInfo>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template für moa:CheckResultType, moa:ReferencesCheckResultType, moa:ManifestRefsCheckResultType -->
+ <!-- =================================================================================================== -->
+ <xsl:template name="checkResult">
+ <xsl:param name="checkElem">default</xsl:param>
+ <xsl:param name="checkType">default</xsl:param>
+ <sl10:Code>
+ <xsl:value-of select="$checkElem/moa:Code/child::node()"/>
+ </sl10:Code>
+ <sl10:Info>
+ <xsl:for-each select="$checkElem/moa:Info/child::node()">
+ <xsl:choose>
+ <xsl:when test="namespace-uri(.) = 'http://reference.e-government.gv.at/namespace/moa/20020822#'">
+ <xsl:choose>
+ <xsl:when test="local-name(.) = 'FailedReference'">
+ <sl11:FailedReference>
+ <xsl:value-of select="./node()"/>
+ </sl11:FailedReference>
+ </xsl:when>
+ <xsl:when test="local-name(.) = 'ReferringSigReference'">
+ <sl11:ReferringSigReference>
+ <xsl:value-of select="./node()"/>
+ </sl11:ReferringSigReference>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:copy-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </sl10:Info>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/spss.slinterface/res/resources/stylesheets/simpleVerReq.sl11.xml b/spss.slinterface/res/resources/stylesheets/simpleVerReq.sl11.xml
new file mode 100644
index 000000000..78180c2c3
--- /dev/null
+++ b/spss.slinterface/res/resources/stylesheets/simpleVerReq.sl11.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Gregor Karlinger (Bundeskanzleramt) -->
+<sl11:VerifyXMLSignatureRequest xmlns:sl10="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns:sl11="http://www.buergerkarte.at/namespaces/securitylayer/20020831#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.buergerkarte.at/namespaces/securitylayer/20020831#
+schemas\Core.20020831.xsd">
+ <sl11:SignatureInfo>
+ <sl11:SignatureEnvironment>
+ <sl10:XMLContent>
+ <dsig:Signature Id="HS_signature" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
+ <dsig:SignedInfo>
+ <dsig:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
+ <dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
+ <dsig:Reference Id="reference-data-1" URI="#signed-data">
+ <dsig:Transforms>
+ <dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
+ <xf2:XPath Filter="intersect" xmlns:xf2="http://www.w3.org/2002/06/xmldsig-filter2">id(&apos;signed-data&apos;)/node()</xf2:XPath>
+ </dsig:Transform>
+ </dsig:Transforms>
+ <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+ <dsig:DigestValue>aylv7lNNes2pI022g7zfY1AOUmI=</dsig:DigestValue>
+ </dsig:Reference>
+ <dsig:Reference Type="http://uri.etsi.org/01903/v1.1.1#SignedProperties" URI="#refetsi">
+ <dsig:Transforms>
+ <dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
+ <xf2:XPath Filter="intersect" xmlns:etsi="http://uri.etsi.org/01903/v1.1.1#" xmlns:xf2="http://www.w3.org/2002/06/xmldsig-filter2">id(&apos;refetsi&apos;)/etsi:QualifyingProperties/etsi:SignedProperties</xf2:XPath>
+ </dsig:Transform>
+ </dsig:Transforms>
+ <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+ <dsig:DigestValue>rYJgLYFMHaAcQjIlwSpFqXp5d1A=</dsig:DigestValue>
+ </dsig:Reference>
+ </dsig:SignedInfo>
+ <dsig:SignatureValue>VnwHohi/ootc3mIWh2WnInNvjA+/kJOr5bDRl5no1CMsNA+1qhoVZCErHt75gp9m
+O0MPBAcl7KfvkDTbHuMR1oG1Z4RUh52cE5oQietiwHGQIeuWEJ+IGcVcnkoayz4z
+2tQLkdotBhV0mCmkQjyADNn8P4H5yHNsdPq0joqy+2Q=</dsig:SignatureValue>
+ <dsig:KeyInfo>
+ <dsig:X509Data>
+ <dsig:X509Certificate>MIIE4DCCA8igAwIBAgICGEowDQYJKoZIhvcNAQEFBQAwgZcxCzAJBgNVBAYTAkFU
+MUgwRgYDVQQKEz9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGlt
+IGVsZWt0ci4gRGF0ZW52ZXJrZWhyIEdtYkgxHjAcBgNVBAsTFWEtc2lnbi1QcmVt
+aXVtLVNpZy0wMTEeMBwGA1UEAxMVYS1zaWduLVByZW1pdW0tU2lnLTAxMB4XDTAz
+MDEyNzEwMTQxM1oXDTA2MDEyNzEwMTQxM1owZDELMAkGA1UEBhMCQVQxGTAXBgNV
+BAMTEEdyZWdvciBLYXJsaW5nZXIxEjAQBgNVBAQTCUthcmxpbmdlcjEPMA0GA1UE
+KhMGR3JlZ29yMRUwEwYDVQQFEww5MTM4OTU1NTI5MTEwgZ8wDQYJKoZIhvcNAQEB
+BQADgY0AMIGJAoGBANrnnGN6wiOyq/rskasBf/Tz4grEKI+NBAuDgO5aqObNDBAe
+PISMQ2nFNX2nzoSNx7j7esl4KdgySmJkZWs/nErpE5fB8lHOfrPRD61dodS+Nhwi
+RWlm+I+ua+mOwR18fg/Cwt3YpXZihzZ+ju7eFlxRifHtKJCLOld6IvdFdFCtAgMB
+AAGjggHqMIIB5jATBgNVHSMEDDAKgAhA1/OeG4c6zDA+BggrBgEFBQcBAwEB/wQv
+MC0wCAYGBACORgEBMBUGBgQAjkYBAjALEwNFVVICAQACAQAwCgYIKwYBBQUHCwEw
+fQYIKwYBBQUHAQEEcTBvMEIGCCsGAQUFBzAChjZodHRwOi8vd3d3LmEtdHJ1c3Qu
+YXQvY2VydHMvYS1zaWduLVByZW1pdW0tU2lnLTAxYS5jcnQwKQYIKwYBBQUHMAGG
+HWh0dHA6Ly93d3cuYS10cnVzdC5hdDo4Mi9vY3NwME8GA1UdIARIMEYwRAYGKigA
+EQELMDowOAYIKwYBBQUHAgEWLGh0dHA6Ly93d3cuYS10cnVzdC5hdC9kb2NzL2Nw
+L2Etc2lnbi1QcmVtaXVtMGoGA1UdHwRjMGEwX6BdoFuGWWxkYXA6Ly9sZGFwLmEt
+dHJ1c3QuYXQvb3U9YS1zaWduLVByZW1pdW0tU2lnLTAxLG89QS1UcnVzdCxjPUFU
+P2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3Q/MBEGA1UdDgQKBAhOYExavdLCITAO
+BgNVHQ8BAf8EBAMCBsAwJQYDVR0RBB4wHIEaZ3JlZ29yLmthcmxpbmdlckBjaW8u
+Z3YuYXQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAL+A2+Z5gQvn6SnZe
+sLvVVVB1crHe7NI/Om2rEwha4PfEk2pV9UdOg7C1XSzRu9jCNXIAuUSIpxTtAoJH
+sCk82S+iuEEgyVaXU/zFcbgT/k7opHXHswEC6ab2SQnyOlugyG+o7e9nRwAQTzzj
+ryICr3KACQcVwCpLKCgsU6gYQL1bi/c5vk4rnDYquSm1U34+xIl77CefZN/peGU4
+26vUzGma30wHBepLX5M+NXT7ILRzRk4i8oyOccIzOMi/iwAODJmgSSMcYjUgAngE
+oGYK9ngWu7Rr1gvy4lvOwpGGRpz2MP3nU9H2IfKk36n6hhVpc3EC6aF02RdIBD+x
+8VxVsA==</dsig:X509Certificate>
+ </dsig:X509Data>
+ </dsig:KeyInfo>
+ <dsig:Object Id="signed-data">Das ist ein Test.</dsig:Object>
+ <dsig:Object Id="refetsi">
+ <etsi:QualifyingProperties Target="#HS_signature" xmlns:etsi="http://uri.etsi.org/01903/v1.1.1#">
+ <etsi:SignedProperties>
+ <etsi:SignedSignatureProperties>
+ <etsi:SigningTime>2003-08-14T12:53:27Z</etsi:SigningTime>
+ <etsi:SigningCertificate>
+ <etsi:Cert>
+ <etsi:CertDigest>
+ <etsi:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
+ <etsi:DigestValue>wl/zuayZxKuYlH2G2FQCTcosSSg=</etsi:DigestValue>
+ </etsi:CertDigest>
+ <etsi:IssuerSerial>
+ <dsig:X509IssuerName>CN=a-sign-Premium-Sig-01,OU=a-sign-Premium-Sig-01,O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH,C=AT</dsig:X509IssuerName>
+ <dsig:X509SerialNumber>6218</dsig:X509SerialNumber>
+ </etsi:IssuerSerial>
+ </etsi:Cert>
+ </etsi:SigningCertificate>
+ <etsi:SignaturePolicyIdentifier>
+ <etsi:SignaturePolicyImplied/>
+ </etsi:SignaturePolicyIdentifier>
+ </etsi:SignedSignatureProperties>
+ <etsi:SignedDataObjectProperties>
+ <etsi:DataObjectFormat ObjectReference="#reference-data-1">
+ <etsi:MimeType>text/plain</etsi:MimeType>
+ </etsi:DataObjectFormat>
+ </etsi:SignedDataObjectProperties>
+ </etsi:SignedProperties>
+ </etsi:QualifyingProperties>
+ </dsig:Object>
+ </dsig:Signature>
+ </sl10:XMLContent>
+ </sl11:SignatureEnvironment>
+ <sl11:SignatureLocation>/dsig:Signature</sl11:SignatureLocation>
+ </sl11:SignatureInfo>
+</sl11:VerifyXMLSignatureRequest>
diff --git a/spss.slinterface/res/resources/stylesheets/simpleVerReq.sl12.locref.moa.xml b/spss.slinterface/res/resources/stylesheets/simpleVerReq.sl12.locref.moa.xml
new file mode 100644
index 000000000..65e4f5de2
--- /dev/null
+++ b/spss.slinterface/res/resources/stylesheets/simpleVerReq.sl12.locref.moa.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><moa:VerifyXMLSignatureRequest xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:moa="http://reference.e-government.gv.at/namespace/moa/20020822#" xmlns:sl10="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns:sl11="http://www.buergerkarte.at/namespaces/securitylayer/20020831#" xmlns:sl12="http://www.buergerkarte.at/namespaces/securitylayer/20031231#"><moa:DateTime>2003-03-24T12:41:54+01:00</moa:DateTime><moa:VerifySignatureInfo><moa:VerifySignatureEnvironment><moa:LocRefContent>http://anywhere.com/signature.xml</moa:LocRefContent></moa:VerifySignatureEnvironment><moa:VerifySignatureLocation>/dsig:Signature</moa:VerifySignatureLocation></moa:VerifySignatureInfo><moa:MetaInfo><moa:MimeType>text/xml</moa:MimeType><moa:Description>description</moa:Description></moa:MetaInfo><moa:Content Reference="supplement.xml"><moa:LocRefContent>http://anywhere.com/supplement.xml</moa:LocRefContent></moa:Content><moa:ReturnHashInputData/><moa:Trustprofile>TrustProfile1</moa:Trustprofile></moa:VerifyXMLSignatureRequest> \ No newline at end of file
diff --git a/spss.slinterface/res/resources/stylesheets/simpleVerReq.sl12.locref.xml b/spss.slinterface/res/resources/stylesheets/simpleVerReq.sl12.locref.xml
new file mode 100644
index 000000000..25194465d
--- /dev/null
+++ b/spss.slinterface/res/resources/stylesheets/simpleVerReq.sl12.locref.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSPY v2004 rel. 2 U (http://www.xmlspy.com) by Gregor Karlinger (Bundeskanzleramt) -->
+<sl12:VerifyXMLSignatureRequest xmlns:sl10="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns:sl12="http://www.buergerkarte.at/namespaces/securitylayer/20031231#" xmlns:sl11="http://www.buergerkarte.at/namespaces/securitylayer/20020831#">
+ <sl12:DateTime>2003-03-24T12:41:54+01:00</sl12:DateTime>
+ <sl12:SignatureInfo>
+ <sl12:SignatureEnvironment>
+ <sl12:LocRefContent>http://anywhere.com/signature.xml</sl12:LocRefContent>
+ </sl12:SignatureEnvironment>
+ <sl12:SignatureLocation Test="abc" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">/dsig:Signature</sl12:SignatureLocation>
+ </sl12:SignatureInfo>
+ <sl12:Supplement>
+ <sl12:MetaInfo>
+ <sl10:MimeType>text/xml</sl10:MimeType>
+ <sl10:Description>description</sl10:Description>
+ </sl12:MetaInfo>
+ <sl12:Content Reference="supplement.xml">
+ <sl12:LocRefContent>http://anywhere.com/supplement.xml</sl12:LocRefContent>
+ </sl12:Content>
+ </sl12:Supplement>
+</sl12:VerifyXMLSignatureRequest>
diff --git a/spss.slinterface/res/resources/stylesheets/sl2moa.xsl b/spss.slinterface/res/resources/stylesheets/sl2moa.xsl
new file mode 100644
index 000000000..a2c43527f
--- /dev/null
+++ b/spss.slinterface/res/resources/stylesheets/sl2moa.xsl
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xmlspysamplexml E:\cio\projekte\basismodule\slinterface\res\resources\stylesheets\simpleVerReq.sl12.locref.xml?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sl12="http://www.buergerkarte.at/namespaces/securitylayer/20031231#" xmlns:sl11="http://www.buergerkarte.at/namespaces/securitylayer/20020831#" xmlns:sl10="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns:moa="http://reference.e-government.gv.at/namespace/moa/20020822#">
+ <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
+ <xsl:variable name="trustProfileId">TrustProfile1</xsl:variable>
+ <!-- ################################################################################################# -->
+ <!-- # Templates -->
+ <!-- ################################################################################################# -->
+ <!-- =================================================================================================== -->
+ <!-- Template für / -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="/">
+ <xsl:apply-templates select="*"/>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template für sl11:VerifyXMLSignatureRequest -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="sl11:VerifyXMLSignatureRequest">
+ <moa:VerifyXMLSignatureRequest>
+ <xsl:call-template name="copyNSDeclarations">
+ <xsl:with-param name="sourceElem" select="sl11:VerifyXMLSignatureRequest"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="sl11:DateTime"/>
+ <xsl:apply-templates select="sl11:SignatureInfo"/>
+ <xsl:apply-templates select="sl11:Supplement"/>
+ <moa:ReturnHashInputData/>
+ <moa:TrustProfileID>
+ <xsl:copy-of select="$trustProfileId"/>
+ </moa:TrustProfileID>
+ </moa:VerifyXMLSignatureRequest>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template für sl12:VerifyXMLSignatureRequest -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="sl12:VerifyXMLSignatureRequest">
+ <moa:VerifyXMLSignatureRequest>
+ <xsl:call-template name="copyNSDeclarations">
+ <xsl:with-param name="sourceElem" select="sl12:VerifyXMLSignatureRequest"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="sl12:DateTime"/>
+ <xsl:apply-templates select="sl12:SignatureInfo"/>
+ <xsl:apply-templates select="sl12:Supplement"/>
+ <moa:ReturnHashInputData/>
+ <moa:Trustprofile>
+ <xsl:copy-of select="$trustProfileId"/>
+ </moa:Trustprofile>
+ </moa:VerifyXMLSignatureRequest>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template für sl11:DateTime -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="sl11:DateTime">
+ <moa:DateTime>
+ <xsl:value-of select="."/>
+ </moa:DateTime>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template für sl12:DateTime -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="sl12:DateTime">
+ <moa:DateTime>
+ <xsl:value-of select="."/>
+ </moa:DateTime>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template for sl11:SignatureInfo -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="sl11:SignatureInfo">
+ <moa:VerifySignatureInfo>
+ <moa:VerifySignatureEnvironment>
+ <xsl:call-template name="content10">
+ <xsl:with-param name="contentElem" select="sl11:SignatureEnvironment"/>
+ </xsl:call-template>
+ </moa:VerifySignatureEnvironment>
+ <moa:VerifySignatureLocation xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
+ <!-- Explicit namespace decl xmlns:dsig above is a workaround since damn Xalan does not correctly copy the namespace declarations -->
+ <xsl:call-template name="copyNSDeclarations">
+ <xsl:with-param name="sourceElem" select="./sl11:SignatureLocation"/>
+ </xsl:call-template>
+ <xsl:value-of select="sl11:SignatureLocation/node()"/>
+ </moa:VerifySignatureLocation>
+ </moa:VerifySignatureInfo>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template for sl12:SignatureInfo -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="sl12:SignatureInfo">
+ <moa:VerifySignatureInfo>
+ <moa:VerifySignatureEnvironment>
+ <xsl:call-template name="content12">
+ <xsl:with-param name="contentElem" select="sl12:SignatureEnvironment"/>
+ </xsl:call-template>
+ </moa:VerifySignatureEnvironment>
+ <moa:VerifySignatureLocation xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
+ <!-- Explicit namespace decl xmlns:dsig above is a workaround since damn Xalan does not correctly copy the namespace declarations -->
+ <xsl:call-template name="copyNSDeclarations">
+ <xsl:with-param name="sourceElem" select="./sl12:SignatureLocation"/>
+ </xsl:call-template>
+ <xsl:value-of select="sl12:SignatureLocation/node()"/>
+ </moa:VerifySignatureLocation>
+ </moa:VerifySignatureInfo>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template for sl11:Supplement -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="sl11:Supplement">
+ <xsl:if test="sl10:MetaInfo">
+ <moa:MetaInfo>
+ <xsl:call-template name="metaInfo">
+ <xsl:with-param name="metaInfoElem" select="sl10:MetaInfo"/>
+ </xsl:call-template>
+ </moa:MetaInfo>
+ </xsl:if>
+ <moa:Content>
+ <xsl:call-template name="content10">
+ <xsl:with-param name="contentElem" select="sl10:Content"/>
+ </xsl:call-template>
+ </moa:Content>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template for sl12:Supplement -->
+ <!-- =================================================================================================== -->
+ <xsl:template match="sl12:Supplement">
+ <xsl:if test="sl12:MetaInfo">
+ <moa:MetaInfo>
+ <xsl:call-template name="metaInfo">
+ <xsl:with-param name="metaInfoElem" select="sl12:MetaInfo"/>
+ </xsl:call-template>
+ </moa:MetaInfo>
+ </xsl:if>
+ <moa:Content>
+ <xsl:call-template name="content12">
+ <xsl:with-param name="contentElem" select="sl12:Content"/>
+ </xsl:call-template>
+ </moa:Content>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template for sl10:ContentOptionalRefType and sl10:ContentRequiredRefType -->
+ <!-- =================================================================================================== -->
+ <xsl:template name="content10">
+ <xsl:param name="contentElem">default</xsl:param>
+ <xsl:if test="$contentElem/@Reference">
+ <xsl:attribute name="Reference"><xsl:value-of select="$contentElem/@Reference"/></xsl:attribute>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="$contentElem/sl10:Base64Content">
+ <moa:Base64Content>
+ <xsl:value-of select="$contentElem/sl10:Base64Content/node()"/>
+ </moa:Base64Content>
+ </xsl:when>
+ <xsl:otherwise>
+ <moa:XMLContent>
+ <xsl:if test="$contentElem/sl10:XMLContent/@xml:space">
+ <xsl:attribute name="xml:space"><xsl:value-of select="$contentElem/sl10:XMLContent/@xml:space"/></xsl:attribute>
+ </xsl:if>
+ <xsl:copy-of select="$contentElem/sl10:XMLContent/node()"/>
+ </moa:XMLContent>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template for sl12:ContentOptionalRefType and sl12:ContentRequiredRefType -->
+ <!-- =================================================================================================== -->
+ <xsl:template name="content12">
+ <xsl:param name="contentElem">default</xsl:param>
+ <xsl:if test="$contentElem/@Reference">
+ <xsl:attribute name="Reference"><xsl:value-of select="$contentElem/@Reference"/></xsl:attribute>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test="$contentElem/sl12:Base64Content">
+ <moa:Base64Content>
+ <xsl:value-of select="$contentElem/sl12:Base64Content/node()"/>
+ </moa:Base64Content>
+ </xsl:when>
+ <xsl:when test="$contentElem/sl12:LocRefContent">
+ <moa:LocRefContent>
+ <xsl:value-of select="$contentElem/sl12:LocRefContent/node()"/>
+ </moa:LocRefContent>
+ </xsl:when>
+ <xsl:otherwise>
+ <moa:XMLContent>
+ <xsl:if test="$contentElem/sl12:XMLContent/@xml:space">
+ <xsl:attribute name="xml:space"><xsl:value-of select="$contentElem/sl12:XMLContent/@xml:space"/></xsl:attribute>
+ </xsl:if>
+ <xsl:copy-of select="$contentElem/sl12:XMLContent/node()"/>
+ </moa:XMLContent>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template for sl10:MetaInfoType -->
+ <!-- =================================================================================================== -->
+ <xsl:template name="metaInfo">
+ <xsl:param name="metaInfoElem">default</xsl:param>
+ <moa:MimeType>
+ <xsl:value-of select="$metaInfoElem/sl10:MimeType/node()"/>
+ </moa:MimeType>
+ <xsl:if test="$metaInfoElem/sl10:Description">
+ <moa:Description>
+ <xsl:value-of select="$metaInfoElem/sl10:Description/node()"/>
+ </moa:Description>
+ </xsl:if>
+ <xsl:if test="$metaInfoElem/*[not(self::sl10:MimeType or self::sl10:Description)]">
+ <xsl:copy-of select="$metaInfoElem/*[not(self::sl10:MimeType or self::sl10:Description)]"/>
+ </xsl:if>
+ </xsl:template>
+ <!-- =================================================================================================== -->
+ <!-- Template for copying all namespace declarations of an element -->
+ <!-- =================================================================================================== -->
+ <xsl:template name="copyNSDeclarations">
+ <xsl:param name="sourceElem">default</xsl:param>
+ <xsl:for-each select="$sourceElem/namespace::*">
+ <xsl:variable name="currentNodeName" select="name(.)"/>
+ <xsl:variable name="currentNodeValue" select="string(.)"/>
+ <xsl:attribute name="xmlns:{$currentNodeName}"><xsl:copy-of select="$currentNodeValue"></xsl:copy-of></xsl:attribute>
+ </xsl:for-each>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/spss.slinterface/res/resources/stylesheets/verifyresponse.moa.sl.xml b/spss.slinterface/res/resources/stylesheets/verifyresponse.moa.sl.xml
new file mode 100644
index 000000000..8033f8dae
--- /dev/null
+++ b/spss.slinterface/res/resources/stylesheets/verifyresponse.moa.sl.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?><sl11:VerifyXMLSignatureResponse xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:moa="http://reference.e-government.gv.at/namespace/moa/20020822#" xmlns:sl10="http://www.buergerkarte.at/namespaces/securitylayer/20020225#" xmlns:sl11="http://www.buergerkarte.at/namespaces/securitylayer/20020831#"><sl11:SignerInfo><dsig:X509Data xmlns="http://reference.e-government.gv.at/namespace/moa/20020822#"><dsig:X509SubjectName>CN=Isolde B\C3\BCrgerin,OU=Insitute for Applied Information Processing and Communications,O=GRAZ UNIVERSITY OF TECHNOLOGY,C=AT</dsig:X509SubjectName><dsig:X509IssuerSerial><dsig:X509IssuerName>CN=IAIK Test CA,OU=IAIK Test CA,OU=Insitute for Applied Information Processing and Communications,O=GRAZ UNIVERSITY OF TECHNOLOGY,C=AT</dsig:X509IssuerName><dsig:X509SerialNumber>1044289238331</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIID1zCCA0SgAwIBAgIGAPMkfTU7MAkGBSsOAwIdBQAwgawxCzAJBgNVBAYTAkFU
+MSYwJAYDVQQKEx1HUkFaIFVOSVZFUlNJVFkgT0YgVEVDSE5PTE9HWTFHMEUGA1UE
+CxM+SW5zaXR1dGUgZm9yIEFwcGxpZWQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBh
+bmQgQ29tbXVuaWNhdGlvbnMxFTATBgNVBAsTDElBSUsgVGVzdCBDQTEVMBMGA1UE
+AxMMSUFJSyBUZXN0IENBMB4XDTAzMDIwMzE2MjA1NVoXDTAzMTIzMDIyNTkzMFow
+gZgxCzAJBgNVBAYTAkFUMSYwJAYDVQQKEx1HUkFaIFVOSVZFUlNJVFkgT0YgVEVD
+SE5PTE9HWTFHMEUGA1UECxM+SW5zaXR1dGUgZm9yIEFwcGxpZWQgSW5mb3JtYXRp
+b24gUHJvY2Vzc2luZyBhbmQgQ29tbXVuaWNhdGlvbnMxGDAWBgNVBAMUD0lzb2xk
+ZSBC/HJnZXJpbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA53m0qng6O9zV
+IAuJ22Ps91X+pddhMiA9P0QusMexQ+QEkfe43nEFIToUZ3uuoAQFd+n4MXM6D68t
+ZctGU5O4W5Aq/bEjI4efIHS0EThzgNAymqmT9Z9IIEhqm/1jhQ4SXTW33y3Xn3lx
+26DiTeApftuQB388YlV+Rs+rTyF9iRUCAwEAAaOCARwwggEYMAwGA1UdEwEB/wQC
+MAAwDgYDVR0PAQH/BAQDAgbAMBEGCWCGSAGG+EIBAQQEAwIFIDBnBgNVHSAEYDBe
+MFwGDCsGAQQBlRIBAnsBATBMMEoGCCsGAQUFBwICMD4aPFRoaXMgY2VydGlmaWNh
+dGUgb25seSBtYXkgYmUgdXNlZCBmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlczA8
+BgNVHR8ENTAzMDGgL6AthitodHRwOi8vd3d3LmlhaWsuYXQvdGVzdENBL2lhaWtf
+dGVzdF9zaWcuY3JsMB0GA1UdDgQWBBQoOuoIxS8M1o/DTZkJUs0lnN5A7TAfBgNV
+HSMEGDAWgBRMILBWAgz3iAqWiKUUtFHMOrXyvzAJBgUrDgMCHQUAA4GBACY81o8m
+zb8YCuTMgeplySm5nAkxjsv1T5n/Hzz1cLfSDJZ0HyNTVx/GDszY+Dx28MdW+6DL
+o9nWPSE/4P+k9HXJe/wEyAv44OrjvpzGGKjqoc3X8v4rzMo6MBRNluu0m3y1pktT
+V/q4aiWD/nbGXdrn/AoKAvOSAQ3Qe6X+dT/1</dsig:X509Certificate></dsig:X509Data></sl11:SignerInfo><sl11:SignatureCheck><sl10:Code>1</sl10:Code><sl10:Info>
+ Text1<sl11:FailedReference>0</sl11:FailedReference>Text2<sl11:FailedReference>1</sl11:FailedReference></sl10:Info></sl11:SignatureCheck><sl11:SignatureManifestCheck><sl10:Code>2</sl10:Code><sl10:Info>
+ Text1<sl11:FailedReference>0</sl11:FailedReference>Text2<sl11:FailedReference>1</sl11:FailedReference></sl10:Info></sl11:SignatureManifestCheck><sl11:XMLDSIGManifestCheck><sl10:Code>2</sl10:Code><sl10:Info>
+ Text1<sl11:FailedReference>0</sl11:FailedReference>Text2<sl11:FailedReference>1</sl11:FailedReference>
+ Text3<sl11:ReferringSigReference>1</sl11:ReferringSigReference></sl10:Info></sl11:XMLDSIGManifestCheck><sl11:CertificateCheck><sl10:Code>3</sl10:Code><sl10:Info>Text</sl10:Info></sl11:CertificateCheck></sl11:VerifyXMLSignatureResponse> \ No newline at end of file
diff --git a/spss.slinterface/res/resources/stylesheets/verifyresponse.moa.xml b/spss.slinterface/res/resources/stylesheets/verifyresponse.moa.xml
new file mode 100644
index 000000000..d591997ed
--- /dev/null
+++ b/spss.slinterface/res/resources/stylesheets/verifyresponse.moa.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<VerifyXMLSignatureResponse xmlns="http://reference.e-government.gv.at/namespace/moa/20020822#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><SignerInfo><dsig:X509Data><dsig:X509SubjectName>CN=Isolde B\C3\BCrgerin,OU=Insitute for Applied Information Processing and Communications,O=GRAZ UNIVERSITY OF TECHNOLOGY,C=AT</dsig:X509SubjectName><dsig:X509IssuerSerial><dsig:X509IssuerName>CN=IAIK Test CA,OU=IAIK Test CA,OU=Insitute for Applied Information Processing and Communications,O=GRAZ UNIVERSITY OF TECHNOLOGY,C=AT</dsig:X509IssuerName><dsig:X509SerialNumber>1044289238331</dsig:X509SerialNumber></dsig:X509IssuerSerial><dsig:X509Certificate>MIID1zCCA0SgAwIBAgIGAPMkfTU7MAkGBSsOAwIdBQAwgawxCzAJBgNVBAYTAkFU
+MSYwJAYDVQQKEx1HUkFaIFVOSVZFUlNJVFkgT0YgVEVDSE5PTE9HWTFHMEUGA1UE
+CxM+SW5zaXR1dGUgZm9yIEFwcGxpZWQgSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBh
+bmQgQ29tbXVuaWNhdGlvbnMxFTATBgNVBAsTDElBSUsgVGVzdCBDQTEVMBMGA1UE
+AxMMSUFJSyBUZXN0IENBMB4XDTAzMDIwMzE2MjA1NVoXDTAzMTIzMDIyNTkzMFow
+gZgxCzAJBgNVBAYTAkFUMSYwJAYDVQQKEx1HUkFaIFVOSVZFUlNJVFkgT0YgVEVD
+SE5PTE9HWTFHMEUGA1UECxM+SW5zaXR1dGUgZm9yIEFwcGxpZWQgSW5mb3JtYXRp
+b24gUHJvY2Vzc2luZyBhbmQgQ29tbXVuaWNhdGlvbnMxGDAWBgNVBAMUD0lzb2xk
+ZSBC/HJnZXJpbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA53m0qng6O9zV
+IAuJ22Ps91X+pddhMiA9P0QusMexQ+QEkfe43nEFIToUZ3uuoAQFd+n4MXM6D68t
+ZctGU5O4W5Aq/bEjI4efIHS0EThzgNAymqmT9Z9IIEhqm/1jhQ4SXTW33y3Xn3lx
+26DiTeApftuQB388YlV+Rs+rTyF9iRUCAwEAAaOCARwwggEYMAwGA1UdEwEB/wQC
+MAAwDgYDVR0PAQH/BAQDAgbAMBEGCWCGSAGG+EIBAQQEAwIFIDBnBgNVHSAEYDBe
+MFwGDCsGAQQBlRIBAnsBATBMMEoGCCsGAQUFBwICMD4aPFRoaXMgY2VydGlmaWNh
+dGUgb25seSBtYXkgYmUgdXNlZCBmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlczA8
+BgNVHR8ENTAzMDGgL6AthitodHRwOi8vd3d3LmlhaWsuYXQvdGVzdENBL2lhaWtf
+dGVzdF9zaWcuY3JsMB0GA1UdDgQWBBQoOuoIxS8M1o/DTZkJUs0lnN5A7TAfBgNV
+HSMEGDAWgBRMILBWAgz3iAqWiKUUtFHMOrXyvzAJBgUrDgMCHQUAA4GBACY81o8m
+zb8YCuTMgeplySm5nAkxjsv1T5n/Hzz1cLfSDJZ0HyNTVx/GDszY+Dx28MdW+6DL
+o9nWPSE/4P+k9HXJe/wEyAv44OrjvpzGGKjqoc3X8v4rzMo6MBRNluu0m3y1pktT
+V/q4aiWD/nbGXdrn/AoKAvOSAQ3Qe6X+dT/1</dsig:X509Certificate></dsig:X509Data></SignerInfo>
+ <SignatureCheck>
+ <Code>1</Code>
+ <Info>
+ Text1<FailedReference>0</FailedReference>Text2<FailedReference>1</FailedReference>
+ </Info>
+ </SignatureCheck>
+ <SignatureManifestCheck>
+ <Code>2</Code>
+ <Info>
+ Text1<FailedReference>0</FailedReference>Text2<FailedReference>1</FailedReference>
+ </Info>
+ </SignatureManifestCheck>
+ <XMLDSIGManifestCheck>
+ <Code>2</Code>
+ <Info>
+ Text1<FailedReference>0</FailedReference>Text2<FailedReference>1</FailedReference>
+ Text3<ReferringSigReference>1</ReferringSigReference>
+ </Info>
+ </XMLDSIGManifestCheck>
+ <CertificateCheck>
+ <Code>3</Code>
+ <Info>Text</Info>
+ </CertificateCheck>
+</VerifyXMLSignatureResponse> \ No newline at end of file
diff --git a/spss.slinterface/res/resources/test.xml b/spss.slinterface/res/resources/test.xml
new file mode 100644
index 000000000..a2f6a0740
--- /dev/null
+++ b/spss.slinterface/res/resources/test.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Test>Inhalt</Test>
diff --git a/spss.slinterface/res/resources/test.xsl b/spss.slinterface/res/resources/test.xsl
new file mode 100644
index 000000000..6bb618072
--- /dev/null
+++ b/spss.slinterface/res/resources/test.xsl
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xmlspysamplexml e:\cio\projekte\basismodule\slinterface\res\resources\test.xml?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
+ <xsl:template match="/">
+ <xsl:call-template name="test">
+ <xsl:with-param name="param1">hugo</xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+ <xsl:template name="test">
+ <xsl:param name="param1">ursl</xsl:param>
+ <Ergebnis attri="{$param1}"></Ergebnis>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/spss.slinterface/test/forms/simpleForm.html b/spss.slinterface/test/forms/simpleForm.html
new file mode 100644
index 000000000..120fa8073
--- /dev/null
+++ b/spss.slinterface/test/forms/simpleForm.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <title>Securitylayer Requests</title>
+
+</head>
+ <body>
+<h1>Securitykapsel - HTTP-Bindung</h1>
+<form action="http://localhost:8080/moa-spss-sl/http-security-layer-request" method="post">
+<p>
+XMLRequest: <textarea name="XMLRequest" cols=80 rows=20></textarea>
+<p>
+<!--
+RedirectURL: <input name="RedirectURL" value="" size=70>
+http://stud.fbi.fh-darmstadt.de/~adams/mathe/poesie.html#bit
+<p>-->
+DataURL: <input name="DataURL" value="http://default.url" size=70/>
+<p>
+<!--StylesheetURL: <input name="StylesheetURL" value="" size=70>
+http://localhost/securitylayer.xsl-->
+<p>
+<input type="submit">
+</form>
+</body>
+</html>