summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.classpath5
-rw-r--r--pom.xml596
-rw-r--r--src/main/java/at/gv/util/ValidationUtils.java19
-rw-r--r--src/main/java/at/gv/util/client/ur_V7/URClient.java590
-rw-r--r--src/main/java/at/gv/util/client/ur_V7/URClientException.java33
-rw-r--r--src/main/resources/wsdl/szr/szr_pvp.xsd7
-rw-r--r--src/main/resources/wsdl/szr_v4/pvp19.xsd7
-rw-r--r--src/main/resources/wsdl/szr_v4/szr_v4.0.xsd1
-rw-r--r--src/test/java/at/gv/util/test/ValitationUtilsTest.java36
9 files changed, 1030 insertions, 264 deletions
diff --git a/.classpath b/.classpath
index 641ee2f..14f3e22 100644
--- a/.classpath
+++ b/.classpath
@@ -15,6 +15,7 @@
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
+ <attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
@@ -28,9 +29,9 @@
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
</attributes>
</classpathentry>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
- <attribute name="owner.project.facets" value="java"/>
+ <attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
diff --git a/pom.xml b/pom.xml
index de05886..e3ec84d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,287 +1,359 @@
<?xml version="1.0"?>
<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <groupId>at.gv.util</groupId>
- <artifactId>egovutils</artifactId>
- <version>2.0.11-SNAPSHOT</version>
- <name>zuseutil</name>
- <url>http://maven.apache.org</url>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <java.version>1.8</java.version>
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>at.gv.util</groupId>
+ <artifactId>egovutils</artifactId>
+ <version>2.0.12-SNAPSHOT</version>
+ <name>zuseutil</name>
+ <url>http://maven.apache.org</url>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <java.version>1.8</java.version>
- <cxf.version>3.4.1</cxf.version>
- <org.slf4j.version>1.7.30</org.slf4j.version>
+ <cxf.version>3.4.1</cxf.version>
+ <org.slf4j.version>1.7.30</org.slf4j.version>
+ <org.apache.httpcomponents.httpclient.version>4.5.13</org.apache.httpcomponents.httpclient.version>
+ <commons-collections.version>3.2.2</commons-collections.version>
+ <commons-lang.version>2.6</commons-lang.version>
+ <commons-codec.version>1.15</commons-codec.version>
+ <commons-beanutils.version>1.9.4</commons-beanutils.version>
+ <commons-validator.version>1.7</commons-validator.version>
- <org.apache.httpcomponents.httpclient.version>4.5.13</org.apache.httpcomponents.httpclient.version>
- <commons-collections.version>3.2.2</commons-collections.version>
- <commons-lang.version>2.6</commons-lang.version>
- <commons-codec.version>1.15</commons-codec.version>
- <commons-beanutils.version>1.9.4</commons-beanutils.version>
- <commons-validator.version>1.7</commons-validator.version>
+ <javax.xml.bind.jaxb-api.version>2.3.0</javax.xml.bind.jaxb-api.version>
+ <xalan.version>2.7.1</xalan.version>
+ <xerces.xercesImpl.version>2.12.0</xerces.xercesImpl.version>
- <javax.xml.bind.jaxb-api.version>2.3.0</javax.xml.bind.jaxb-api.version>
- <xalan.version>2.7.1</xalan.version>
- <xerces.xercesImpl.version>2.12.0</xerces.xercesImpl.version>
+ <javax.servlet-api.version>2.5</javax.servlet-api.version>
- <javax.servlet-api.version>2.5</javax.servlet-api.version>
+ <surefire.version>2.22.0</surefire.version>
+ <iaik_ecc.version>2.19</iaik_ecc.version>
- <surefire.version>2.22.0</surefire.version>
- <iaik_ecc.version>2.19</iaik_ecc.version>
+ <!-- Compile and deploy plugins -->
+ <versions-maven-plugin.version>2.8.1</versions-maven-plugin.version>
+ <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
+ <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
+ <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
+ <maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
+ <wagon-ssh.version>3.4.3</wagon-ssh.version>
- </properties>
+ </properties>
- <repositories>
- <repository>
- <id>egiz-commons</id>
- <url>https://apps.egiz.gv.at/maven/</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
- <repository>
- <id>egiz-commons-snapshot</id>
- <url>https://apps.egiz.gv.at/maven-snapshot/</url>
- <releases>
- <enabled>false</enabled>
- </releases>
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- </repository>
- <repository>
- <id>MOA_web</id>
- <name>MOA Dependencies weblocation</name>
- <releases>
- <enabled>true</enabled>
- <checksumPolicy>ignore</checksumPolicy>
- </releases>
- <layout>default</layout>
- <url>https://git.egiz.gv.at/EAAF-Components/plain/eaaf_modules/eaaf_module_moa-sig/repository</url>
- </repository>
- </repositories>
+ <repositories>
+ <repository>
+ <id>egiz-commons</id>
+ <url>https://apps.egiz.gv.at/maven/</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>egiz-commons-snapshot</id>
+ <url>https://apps.egiz.gv.at/maven-snapshot/</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>MOA_web</id>
+ <name>MOA Dependencies weblocation</name>
+ <releases>
+ <enabled>true</enabled>
+ <checksumPolicy>ignore</checksumPolicy>
+ </releases>
+ <layout>default</layout>
+ <url>https://git.egiz.gv.at/EAAF-Components/plain/eaaf_modules/eaaf_module_moa-sig/repository</url>
+ </repository>
+ </repositories>
- <profiles>
- <profile>
- <id>default</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- <property>
- <name>default</name>
- </property>
- </activation>
- </profile>
- <profile>
- <id>jenkinsDeploy</id>
- <distributionManagement>
- <repository>
- <id>egizMaven</id>
- <url>sftp://apps.egiz.gv.at/maven</url>
- </repository>
- <snapshotRepository>
- <id>egizMaven</id>
- <url>sftp://apps.egiz.gv.at/maven-snapshot</url>
- </snapshotRepository>
- </distributionManagement>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-deploy-plugin</artifactId>
- <version>2.8.2</version>
- <configuration>
- <deployAtEnd>true</deployAtEnd>
- </configuration>
- <executions>
- <execution>
- <id>default-deploy</id>
- <phase>deploy</phase>
- <goals>
- <goal>deploy</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </profile>
- </profiles>
+ <profiles>
+ <profile>
+ <id>default</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ <property>
+ <name>default</name>
+ </property>
+ </activation>
+ </profile>
+ <profile>
+ <id>jenkinsDeploy</id>
+ <distributionManagement>
+ <repository>
+ <id>egizMaven</id>
+ <url>sftp://apps.egiz.gv.at/maven</url>
+ </repository>
+ <snapshotRepository>
+ <id>egizMaven</id>
+ <url>sftp://apps.egiz.gv.at/maven-snapshot</url>
+ </snapshotRepository>
+ </distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>${maven-deploy-plugin.version}</version>
+ <configuration>
+ <deployAtEnd>true</deployAtEnd>
+ </configuration>
+ <executions>
+ <execution>
+ <id>default-deploy</id>
+ <phase>deploy</phase>
+ <goals>
+ <goal>deploy</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.7.0</version>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- </configuration>
- <executions>
- <execution>
- <goals>
- <goal>compile</goal>
- <goal>testCompile</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>3.1.0</version>
- <executions>
- <execution>
- <goals>
- <goal>test-jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>${maven-compiler-plugin.version}</version>
+ <configuration>
+ <source>1.8</source>
+ <target>1.8</target>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>compile</goal>
+ <goal>testCompile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>${maven-jar-plugin.version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
- <!-- enable co-existence of testng and junit -->
- <plugin>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>${surefire.version}</version>
- <configuration>
- <threadCount>1</threadCount>
- </configuration>
- <dependencies>
- <dependency>
- <groupId>org.apache.maven.surefire</groupId>
- <artifactId>surefire-junit47</artifactId>
- <version>${surefire.version}</version>
- </dependency>
- </dependencies>
- </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>${maven-source-plugin.version}</version>
+ <executions>
+ <execution>
+ <id>attach-sources</id>
+ <goals>
+ <goal>jar-no-fork</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>versions-maven-plugin</artifactId>
- <version>2.7</version>
- </plugin>
+ <!-- enable co-existence of testng and junit -->
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>${surefire.version}</version>
+ <configuration>
+ <threadCount>1</threadCount>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>surefire-junit47</artifactId>
+ <version>${surefire.version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
- </plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>versions-maven-plugin</artifactId>
+ <version>${versions-maven-plugin.version}</version>
+ </plugin>
- <extensions>
- <extension>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-ssh</artifactId>
- <version>3.3.3</version>
- </extension>
- </extensions>
- </build>
+ </plugins>
+ <extensions>
+ <extension>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh</artifactId>
+ <version>${wagon-ssh.version}</version>
+ </extension>
+ </extensions>
+ </build>
- <dependencies>
- <dependency>
- <groupId>xerces</groupId>
- <artifactId>xercesImpl</artifactId>
- <version>${xerces.xercesImpl.version}</version>
- </dependency>
- <dependency>
- <groupId>xalan</groupId>
- <artifactId>xalan</artifactId>
- <version>${xalan.version}</version>
- </dependency>
- <dependency>
- <groupId>javax.xml.bind</groupId>
- <artifactId>jaxb-api</artifactId>
- <version>${javax.xml.bind.jaxb-api.version}</version>
- </dependency>
- <!-- Apache CXF libs -->
- <dependency>
- <groupId>org.apache.cxf</groupId>
- <artifactId>cxf-rt-frontend-jaxws</artifactId>
- <version>${cxf.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.cxf</groupId>
- <artifactId>cxf-rt-transports-http</artifactId>
- <version>${cxf.version}</version>
- </dependency>
- <!-- Jetty is needed if you're are not using the CXFServlet -->
- <!-- <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId>
- <version>${cxf.version}</version> </dependency> -->
+ <dependencies>
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ <version>${xerces.xercesImpl.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ <version>${xalan.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ <version>${javax.xml.bind.jaxb-api.version}</version>
+ </dependency>
- <dependency>
- <groupId>commons-validator</groupId>
- <artifactId>commons-validator</artifactId>
- <version>${commons-validator.version}</version>
- </dependency>
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- <version>${commons-beanutils.version}</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>${org.slf4j.version}</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>${javax.servlet-api.version}</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- <version>${commons-codec.version}</version>
- </dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>${commons-lang.version}</version>
- <type>jar</type>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>${org.apache.httpcomponents.httpclient.version}</version>
- </dependency>
+ <!-- Apache CXF libs -->
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-frontend-jaxws</artifactId>
+ <version>${cxf.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-transports-http</artifactId>
+ <version>${cxf.version}</version>
+ </dependency>
+ <!-- Jetty is needed if you're are not using the CXFServlet -->
+ <!-- <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId>
+ <version>${cxf.version}</version> </dependency> -->
+
+ <!-- Apache CXF libs-->
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-frontend-jaxws</artifactId>
+ <version>${cxf.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-transports-http</artifactId>
+ <version>${cxf.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-features-clustering</artifactId>
+ <version>${cxf.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-features-logging</artifactId>
+ <version>${cxf.version}</version>
+ </dependency>
+
+
+ <!-- Jetty is needed if you're are not using the CXFServlet -->
+<!-- <dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-transports-http-jetty</artifactId>
+ <version>${cxf.version}</version>
+ </dependency> -->
+
+
+ <dependency>
+ <groupId>commons-validator</groupId>
+ <artifactId>commons-validator</artifactId>
+ <version>${commons-validator.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ <version>${commons-beanutils.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${org.slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>${javax.servlet-api.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>${commons-codec.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>${commons-lang.version}</version>
+ <type>jar</type>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ <version>${org.apache.httpcomponents.httpclient.version}</version>
+ </dependency>
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- <version>${commons-collections.version}</version>
- </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>${commons-collections.version}</version>
+ </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.13.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>iaik</groupId>
- <artifactId>iaik_ecc_signed</artifactId>
- <version>${iaik_ecc.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>${org.slf4j.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>iaik.prod</groupId>
- <artifactId>iaik_jce_full</artifactId>
- <version>5.61_moa</version>
- <scope>test</scope>
- </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.13.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>iaik</groupId>
+ <artifactId>iaik_ecc_signed</artifactId>
+ <version>${iaik_ecc.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>${org.slf4j.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>iaik.prod</groupId>
+ <artifactId>iaik_jce_full</artifactId>
+ <version>5.61_moa</version>
+ <scope>test</scope>
+ </dependency>
- </dependencies>
+ <!-- for testing -->
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ <version>5.7.1 </version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.vintage</groupId>
+ <artifactId>junit-vintage-engine</artifactId>
+ <version>5.7.1 </version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-migrationsupport</artifactId>
+ <version>5.7.1 </version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
</project>
diff --git a/src/main/java/at/gv/util/ValidationUtils.java b/src/main/java/at/gv/util/ValidationUtils.java
index cbc7207..108fe27 100644
--- a/src/main/java/at/gv/util/ValidationUtils.java
+++ b/src/main/java/at/gv/util/ValidationUtils.java
@@ -2,11 +2,16 @@ package at.gv.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.Period;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
import java.util.regex.Pattern;
public class ValidationUtils {
private static final String DATEFORMAT = "dd.MM.yyyy";
+ private static final int REPRESENTATION_MIN_AGE = 14;
public static boolean isDateFormat(String dateString) {
@@ -57,5 +62,19 @@ public class ValidationUtils {
return Pattern.compile("[0-9]{4}").matcher(postcode).matches();
}
+
+ public static boolean isOverThirteen(String representativeDateOfBirth) {
+ try {
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATEFORMAT);
+ LocalDate birthdate= LocalDate.parse(representativeDateOfBirth, formatter);
+ Period p = Period.between(birthdate, LocalDate.now());
+ return p.getYears() >= REPRESENTATION_MIN_AGE;
+
+ } catch (DateTimeParseException e) {
+ return false;
+
+ }
+
+ }
}
diff --git a/src/main/java/at/gv/util/client/ur_V7/URClient.java b/src/main/java/at/gv/util/client/ur_V7/URClient.java
new file mode 100644
index 0000000..530951e
--- /dev/null
+++ b/src/main/java/at/gv/util/client/ur_V7/URClient.java
@@ -0,0 +1,590 @@
+package at.gv.util.client.ur_V7;
+
+import java.math.BigInteger;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.GregorianCalendar;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Resource;
+import javax.net.ssl.SSLContext;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeConstants;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.XMLGregorianCalendar;
+import javax.xml.namespace.QName;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.handler.Handler;
+
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.cxf.configuration.jsse.TLSClientParameters;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.frontend.ClientProxy;
+import org.apache.cxf.transport.http.HTTPConduit;
+import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import at.gv.util.LaxHostNameVerifier;
+import at.gv.util.LoggingHandler;
+import at.gv.util.MiscUtil;
+import at.gv.util.client.pvp.rprofile.Pvp18pSoapHandler;
+import at.gv.util.config.EgovUtilConfiguration;
+import at.gv.util.ex.EgovUtilException;
+import at.gv.util.wsdl.ur_V7.URSuche;
+import at.gv.util.wsdl.ur_V7.URSucheService;
+import at.gv.util.wsdl.ur_V7.XmlSwFault;
+import at.gv.util.xsd.szr.pvp.PvpTokenType;
+import at.gv.util.xsd.ur_V7.pd.IdentificationType;
+import at.gv.util.xsd.ur_V7.pd.NichtNatuerlichePersonTyp;
+import at.gv.util.xsd.ur_V7.pd.PersonenDatenTyp;
+import at.gv.util.xsd.ur_V7.pd.PersonenDatenTyp.Zusatzdaten;
+import at.gv.util.xsd.ur_V7.pd.PersonenDatenZusatzdatenTyp;
+import at.gv.util.xsd.ur_V7.pd.ZusatzdatenPersonenTyp;
+import at.gv.util.xsd.ur_V7.search.BestandszeitraumVollzug;
+import at.gv.util.xsd.ur_V7.search.FktRegelTypVollzug;
+import at.gv.util.xsd.ur_V7.search.FunktionVollzug;
+import at.gv.util.xsd.ur_V7.search.SucheUnternehmenNachBpkRequest;
+import at.gv.util.xsd.ur_V7.search.SucheUnternehmenNachIdRequest;
+import at.gv.util.xsd.ur_V7.search.SucheUnternehmenRequest;
+import at.gv.util.xsd.ur_V7.search.SucheUnternehmensdaten;
+import at.gv.util.xsd.ur_V7.simpletypes.EvbStatusTyp;
+import at.gv.util.xsd.ur_V7.xmlsw.ExtraResultCriteria;
+import at.gv.util.xsd.ur_V7.xmlsw.ResultCriteriaType;
+import at.gv.util.xsd.ur_V7.xmlsw.ResultRecord;
+import at.gv.util.xsd.ur_V7.xmlsw.SearchByExampleType;
+import at.gv.util.xsd.ur_V7.xmlsw.SearchCriteriaType;
+import at.gv.util.xsd.ur_V7.xmlsw.SearchResponseType;
+
+public class URClient {
+
+ @Resource
+ WebServiceContext wsContext;
+
+ private EgovUtilConfiguration config = null;
+ private Logger log = LoggerFactory.getLogger(URClient.class);
+ private boolean logEnabled = true;
+ private boolean evbCheck = true;
+ private URSuche urSuche = null;
+
+ private final static String version = "V5.0";
+ private List<String> allowedKeys = null;
+ private HashSet<String> allowedERsBKeys = null;
+
+ public URClient(EgovUtilConfiguration config, List<String> allowedKeys, HashSet<String> ersbkeys, boolean evbCheck, boolean logEnabled) throws EgovUtilException {
+ MiscUtil.assertNotNull(config, "config");
+ this.config = config;
+ this.allowedKeys = allowedKeys;
+ this.logEnabled = logEnabled;
+ this.evbCheck = evbCheck;
+ this.allowedERsBKeys = ersbkeys;
+
+ initialize();
+ }
+
+ public List<URSearchResult> searchByRegisterNumberFullInfo(String number, String type, int maxResults) throws Exception {
+
+ SucheUnternehmenNachIdRequest request = new SucheUnternehmenNachIdRequest();
+
+ if (type.equals("ERJ"))
+ request.setErj(number);
+ else if (type.equals("FBN"))
+ request.setFbn(number);
+ else if (type.equals("KUR"))
+ request.setKur(number);
+ else if (type.equals("SEK"))
+ request.setSek(number);
+ else if (type.equals("ZVR"))
+ request.setZvr(number);
+ else
+ throw new Exception("Wrong RegisterNumber Type");
+
+ request.setMitHistorie(true);
+
+ SearchCriteriaType sct = new SearchCriteriaType();
+ sct.setSucheUnternehmenNachIdRequest(request);
+ List<ResultRecord> results = searchByExample(sct, -1);
+
+ return getURSearchResult(results);
+ }
+
+ public List<URSearchResult> searchByBpk(String vzbpk) throws URClientException {
+ SucheUnternehmenNachBpkRequest request = new SucheUnternehmenNachBpkRequest();
+ request.setVersion(version);
+ request.setBpkWTUREncoded(vzbpk);
+
+ request.setNurAktive(true);
+
+ SearchCriteriaType sct = new SearchCriteriaType();
+ sct.setSucheUnternehmenNachBpkRequest(request);
+
+ List<ResultRecord> results = searchByExample(sct, -1);
+ return getURSearchResult(results);
+ }
+
+ public List<NichtNatuerlichePersonTyp> searchByRegisterNumber(String number, String type, int maxResults) throws URClientException {
+ SucheUnternehmenRequest request = new SucheUnternehmenRequest();
+ request.setVersion(version);
+ SucheUnternehmensdaten sud = new SucheUnternehmensdaten();
+ sud.setId(number);
+ sud.setIdArt(type);
+ request.setUnternehmensdaten(sud);
+
+
+ SearchCriteriaType sct = new SearchCriteriaType();
+ sct.setSucheUnternehmenRequest(request);
+
+ List<ResultRecord> results = searchByExample(sct, maxResults);
+ return getNichtNatuerlichePersonen(results);
+ }
+
+ public List<NichtNatuerlichePersonTyp> searchByName(String name, String plz, int maxResults) throws URClientException {
+ SucheUnternehmenRequest request = new SucheUnternehmenRequest();
+ request.setVersion(version);
+ SucheUnternehmensdaten sud = new SucheUnternehmensdaten();
+ sud.setUntName(name);
+ if (MiscUtil.isNotEmpty(plz)) {
+ sud.setPlz(plz);
+ }
+ request.setUnternehmensdaten(sud);
+
+ SearchCriteriaType sct = new SearchCriteriaType();
+ sct.setSucheUnternehmenRequest(request);
+
+ List<ResultRecord> results = searchByExample(sct, maxResults);
+ return getNichtNatuerlichePersonen(results);
+ }
+
+ private List<URSearchResult> getURSearchResult(List<ResultRecord> records) throws URClientException {
+
+ if (records == null || records.size() == 0) {
+ return new ArrayList<URSearchResult>();
+ }
+
+ List<URSearchResult> result = new ArrayList<URSearchResult>();
+
+ log.debug("UR SOAP response with " + records.size() + "records");
+
+ for (ResultRecord rr : records) {
+ PersonenDatenTyp pdt = rr.getPersonenDaten();
+ NichtNatuerlichePersonTyp nnpt = pdt.getNichtNatuerlichePerson();
+ Zusatzdaten zsd = pdt.getZusatzdaten();
+
+ //check validity era
+ boolean check_valera = isInValidityEra(zsd);
+
+ //check allowed keys
+ boolean check_allowedkeys = hasAllowedKeys(nnpt.getIdentification());
+
+ //ERsB function codes
+ List<String> ersbcode = hasAllowedEVBCode(zsd);
+
+ //check EVB
+ boolean check_EVB = isEVB(zsd);
+
+ if (check_valera && check_allowedkeys && (check_EVB || !ersbcode.isEmpty())) {
+ result.add(new URSearchResult(nnpt, ersbcode, check_EVB));
+ }
+ else {
+ log.debug("No validity for " + nnpt.getRest().get(0).getValue()
+ + "(Validity era=" + String.valueOf(check_valera)
+ + " Allowed Keys="+ String.valueOf(check_allowedkeys)
+ + " EVB check=" + String.valueOf(check_EVB) +")");
+ }
+ }
+
+ return result;
+ }
+
+ private List<NichtNatuerlichePersonTyp> getNichtNatuerlichePersonen(List<ResultRecord> records) throws URClientException {
+
+ if (records == null || records.size() == 0) {
+ return new ArrayList<NichtNatuerlichePersonTyp>();
+ }
+
+ List<NichtNatuerlichePersonTyp> result = new ArrayList<NichtNatuerlichePersonTyp>();
+
+ log.debug("UR SOAP response with " + records.size() + "records");
+
+ for (ResultRecord rr : records) {
+ PersonenDatenTyp pdt = rr.getPersonenDaten();
+ NichtNatuerlichePersonTyp nnpt = pdt.getNichtNatuerlichePerson();
+ Zusatzdaten zsd = pdt.getZusatzdaten();
+
+ //check validity era
+ boolean check_valera = isInValidityEra(zsd);
+
+ //check allowed keys
+ boolean check_allowedkeys = hasAllowedKeys(nnpt.getIdentification());
+
+ //check EVB
+ boolean check_EVB = isEVB(zsd);
+
+ if (check_valera && check_allowedkeys && check_EVB) {
+ result.add(nnpt);
+ }
+ else {
+ log.debug("No validity for " + nnpt.getRest().get(0).getValue()
+ + "(Validity era=" + String.valueOf(check_valera)
+ + " Allowed Keys="+ String.valueOf(check_allowedkeys)
+ + " EVB check=" + String.valueOf(check_EVB) +")");
+ }
+ }
+
+ return result;
+ }
+
+ private List<String> hasAllowedEVBCode(Zusatzdaten zsd) {
+
+ Set<String> set = new HashSet<String>();
+
+ if ((this.allowedERsBKeys == null || this.allowedERsBKeys.size() == 0)) {
+ return new ArrayList<String>();
+
+ } else {
+
+ GregorianCalendar now = new GregorianCalendar();
+ XMLGregorianCalendar xmldate;
+ try {
+ xmldate = DatatypeFactory.newInstance().newXMLGregorianCalendar(now);
+ if(zsd != null) {
+ List<PersonenDatenZusatzdatenTyp> pd = zsd.getPersonenDaten();
+ for (PersonenDatenZusatzdatenTyp pdzd : pd) {
+
+ ZusatzdatenPersonenTyp zusatzdaten = pdzd.getZusatzdaten();
+ if (zusatzdaten != null) {
+
+ List<FunktionVollzug> function = zusatzdaten.getFunktion();
+ for (FunktionVollzug funct : function) {
+
+ if (this.allowedERsBKeys.contains(String.valueOf(funct.getFktName()))) {
+ List<FktRegelTypVollzug> functRegel = funct.getFktRegel();
+ for (FktRegelTypVollzug el : functRegel) {
+ if ( el.getFktRegelVon() == null && el.getFktRegelBis() == null)
+ set.add(String.valueOf(funct.getFktName()));
+
+ else if ( el.getFktRegelVon() != null && el.getFktRegelBis() == null
+ && el.getFktRegelVon().compare(xmldate) == DatatypeConstants.LESSER )
+ set.add(String.valueOf(funct.getFktName()));
+
+ else if ( el.getFktRegelVon() == null && el.getFktRegelBis() != null
+ && el.getFktRegelBis().compare(xmldate) == DatatypeConstants.GREATER )
+ set.add(String.valueOf(funct.getFktName()));
+
+
+ else if ( el.getFktRegelVon() != null && el.getFktRegelBis() != null
+ && (el.getFktRegelVon().compare(xmldate) == DatatypeConstants.LESSER
+ && el.getFktRegelBis().compare(xmldate) == DatatypeConstants.GREATER) )
+ set.add(String.valueOf(funct.getFktName()));
+
+ }
+ }
+ }
+ }
+ }
+ }
+
+ } catch (DatatypeConfigurationException e) {
+ log.warn("Internal error during date conversion", e);
+
+ }
+
+ return new ArrayList<String>(set);
+ }
+ }
+
+ //check if corporation is in validity era
+ //TODO: check correctness of TRUE if no validity era is defined!!!
+ private boolean isInValidityEra(Zusatzdaten zsd) throws URClientException {
+ if(zsd != null) {
+ List<BestandszeitraumVollzug> validityera = zsd.getBestandszeitraum();
+ for ( BestandszeitraumVollzug valera_el : validityera) {
+ try {
+ GregorianCalendar now = new GregorianCalendar();
+ XMLGregorianCalendar xmldate = DatatypeFactory.newInstance().newXMLGregorianCalendar(now);
+
+ if ( !(valera_el.getBestandVon().compare(xmldate) == DatatypeConstants.LESSER
+ && valera_el.getBestandBis().compare(xmldate) == DatatypeConstants.GREATER) ) {
+
+ log.debug("Corporation is not within the validity period");
+ return false;
+ }
+
+ } catch (DatatypeConfigurationException e) {
+ log.warn("Internal error during date conversion", e);
+ }
+ }
+ }
+ return true;
+ }
+
+ // check if person is einzelvertretungsbefugt
+ private boolean isEVB(Zusatzdaten zsd) {
+ if (!this.evbCheck) {
+ return true;
+ }
+ else {
+ if(zsd != null) {
+ List<PersonenDatenZusatzdatenTyp> pd = zsd.getPersonenDaten();
+ for (PersonenDatenZusatzdatenTyp pdzd : pd) {
+
+ if (pdzd.getZusatzdaten() != null) {
+ EvbStatusTyp evbstatus = pdzd.getZusatzdaten().getEvbStatus();
+ if (evbstatus!=null && evbstatus.equals(EvbStatusTyp.J)) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ //check allowedKeys
+ private boolean hasAllowedKeys(List<IdentificationType> list) throws URClientException {
+
+ if ((this.allowedKeys == null || this.allowedKeys.size() == 0)) {
+ return true;
+
+ } else {
+ for (IdentificationType idt : list) {
+ if (this.allowedKeys.contains(idt.getType())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+
+
+ // search by example
+ public List<ResultRecord> searchByExample(SearchCriteriaType sct, int maxResults) throws URClientException {
+
+
+ SearchByExampleType body = new SearchByExampleType();
+
+ body.setSearchRequestId(createURSearchId());
+ ResultCriteriaType rc = new ResultCriteriaType();
+
+ log.debug("UR SOAP request with Id " + body.getSearchRequestId());
+
+ // set only value of max results if > 0
+ if (maxResults > 0) {
+ rc.setMaxRecords(BigInteger.valueOf(maxResults));
+ }
+
+ // set ExtraResultCriterias
+ ExtraResultCriteria ec = new ExtraResultCriteria();
+ ec.setErsbAttribute(true);
+ rc.setExtraResultCriteria(ec);
+ body.setResultCriteria(rc);
+
+ body.setSearchCriteria(sct);
+
+
+ //request UR service
+ SearchResponseType srt = null;
+ try {
+ srt = this.urSuche.searchByExample(body);
+
+ } catch (javax.xml.ws.soap.SOAPFaultException e) {
+ //request secondary service
+ switchTOSecondarySystem(e);
+ try {
+ srt = this.urSuche.searchByExample(body);
+
+ } catch (XmlSwFault e1) {
+
+ if (e1.getFaultInfo() != null) {
+ throw new URClientException(e1.getFaultInfo().getHelp(), e1.getFaultInfo().getCode().intValue());
+
+ } else {
+ throw new URClientException(e1.getMessage(), -1, e1);
+ }
+ }
+
+ } catch (WebServiceException e) {
+ //request secondary service
+ switchTOSecondarySystem(e);
+
+ try {
+ srt = this.urSuche.searchByExample(body);
+
+ } catch (XmlSwFault e1) {
+
+ if (e1.getFaultInfo() != null) {
+ throw new URClientException(e1.getFaultInfo().getHelp(), e1.getFaultInfo().getCode().intValue());
+
+ } else {
+ throw new URClientException(e1.getMessage(), -1, e1);
+ }
+ }
+
+ } catch (XmlSwFault e) {
+
+ if (e.getFaultInfo() != null) {
+ throw new URClientException(e.getFaultInfo().getHelp(), e.getFaultInfo().getCode().intValue());
+
+ } else {
+ throw new URClientException(e.getMessage(), -1, e);
+ }
+
+ }
+
+ // check number of records found
+// int numFound = 0;
+// if (srt.getResultInfo() != null) {
+// numFound = srt.getResultInfo().getReturnedRecords().intValue();
+// }
+ // check whether we have an error message
+ if (srt.getMessage() != null) {
+ if (srt.getMessage().getCode().intValue() != 2040) { // 2040 = no records found
+ throw new URClientException(srt.getMessage().getReason().get(0), srt.getMessage().getCode().intValue());
+ }
+ }
+
+ if (srt.getResultRecords() == null || srt.getResultRecords().getResultRecord() == null) {
+ return new ArrayList<ResultRecord>();
+ }
+ return srt.getResultRecords().getResultRecord();
+ }
+
+ private void switchTOSecondarySystem(Exception e) throws URClientException {
+ log.warn("Request primary UR service failed with error \"" + e.getMessage() +"\". " +
+ "Switch to secondary UR service.");
+
+ String urURL = config.getURSecondaryProductionEnvironmentURL();
+ try {
+ setURServiceURL(urURL);
+
+ } catch (EgovUtilException e1) {
+ log.error("Switch to secodary UR service FAILED!", e1);
+ throw new URClientException(e1.getMessage(), 0);
+ }
+ }
+
+ private void setURServiceURL(String urURL) throws EgovUtilException {
+ // set UR Service URL
+
+ log.trace("UR connection URL: " + urURL);
+ BindingProvider bindingProvider = (BindingProvider) urSuche;
+ Map<String, Object> requestContext = bindingProvider.getRequestContext();
+ requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, urURL);
+
+ //set HTTP Client Timeout (Default Timeout 60sec)
+ Client client = ClientProxy.getClient(urSuche);
+ HTTPConduit http = (HTTPConduit) client.getConduit();
+ HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
+
+ //set HTTP Client Timeout (Default Timeout 60sec)
+ httpClientPolicy.setConnectionTimeout(15000);
+ httpClientPolicy.setAllowChunking(false);
+ httpClientPolicy.setReceiveTimeout(32000);
+ http.setClient(httpClientPolicy);
+
+ //check for ssl
+ if (urURL.toLowerCase().startsWith("https")) {
+ log.trace("Using ssl for SZR client request.");
+ SSLContext sslContext = this.config.getURsslConfiguration().getSSLContext(false);
+ if (sslContext == null) {
+ throw new EgovUtilException("SSL context from configuration is empty. Please configure an SSL context in the configuration first.");
+ }
+ TLSClientParameters tlsParams = new TLSClientParameters();
+ tlsParams.setSSLSocketFactory(sslContext.getSocketFactory());
+
+ // check for lax hostname
+ if (this.config.getURsslConfiguration().useLaxHostNameVerifier()) {
+ log.trace("LaxHostnameVerifier enabled. This setting is not recommended to use.");
+ tlsParams.setHostnameVerifier(new LaxHostNameVerifier());
+ }
+ http.setTlsClientParameters(tlsParams );
+ }
+
+ }
+
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ private void initialize() throws EgovUtilException {
+ URL url = URClient.class.getResource("/wsdl/ur_V5/URSucheService.wsdl");
+ URSucheService urService = null;
+ urService = new URSucheService(url, new QName("urn:at:statistik:ur:ws", "URSucheService"));
+ urSuche = urService.getURSucheService();
+
+ BindingProvider bindingProvider = (BindingProvider) urSuche;
+
+ //set service URLs
+ String urURL = null;
+ if (config.isURTestEnvironment()) {
+ log.trace("Initializing UR test configuration.");
+ urURL = config.getURTestEnvironmentURL();
+ } else {
+ log.trace("Initializing UR productive configuration.");
+ urURL = config.getURProductionEnvironmentURL();
+ }
+
+ setURServiceURL(urURL);
+
+ log.trace("Adding JAX-WS request/response trace handler.");
+ List<Handler> handlerList = bindingProvider.getBinding().getHandlerChain();
+ if (handlerList == null) {
+ handlerList = new ArrayList();
+ }
+
+ LoggingHandler loggingHandler = new LoggingHandler();
+ if (this.logEnabled) {
+ handlerList.add(loggingHandler);
+ }
+
+ log.trace("Adding WS-Security Header handler.");
+ PvpTokenType pvpToken = config.getURPVPToken();
+ Pvp18pSoapHandler szrSOAPHandler = new Pvp18pSoapHandler();
+ szrSOAPHandler.configure(pvpToken);
+ handlerList.add(szrSOAPHandler);
+ bindingProvider.getBinding().setHandlerChain(handlerList);
+ }
+
+ private String createURSearchId() {
+ return RandomStringUtils.randomAlphanumeric(8) + "-" +
+ RandomStringUtils.randomAlphanumeric(4) + "-" + RandomStringUtils.randomAlphanumeric(4) + "-" +
+ RandomStringUtils.randomAlphanumeric(12);
+ }
+
+ public class URSearchResult {
+ private NichtNatuerlichePersonTyp result;
+ private List<String> ersbcode;
+ private boolean evb;
+
+ public URSearchResult() {
+ this.result = null;
+ this.ersbcode = null;
+ this.evb = false;
+ }
+
+ public URSearchResult(NichtNatuerlichePersonTyp result, List<String> ersb_code, boolean isevb) {
+ this.result = result;
+ this.ersbcode = ersb_code;
+ this.evb = isevb;
+ }
+
+ public NichtNatuerlichePersonTyp getResult() {
+ return result;
+ }
+
+ public List<String> getErsbcode() {
+ return ersbcode;
+ }
+
+ public boolean isEVB() {
+ return evb;
+ }
+ }
+
+
+}
+
diff --git a/src/main/java/at/gv/util/client/ur_V7/URClientException.java b/src/main/java/at/gv/util/client/ur_V7/URClientException.java
new file mode 100644
index 0000000..fa922b9
--- /dev/null
+++ b/src/main/java/at/gv/util/client/ur_V7/URClientException.java
@@ -0,0 +1,33 @@
+package at.gv.util.client.ur_V7;
+
+public class URClientException extends Exception {
+
+ private static final long serialVersionUID = 5173056345209288701L;
+
+ private int code = -1;
+
+ public URClientException(int code) {
+ super();
+ this.code = code;
+ }
+
+ public URClientException(String message, int code, Throwable cause) {
+ super(message, cause);
+ this.code = code;
+ }
+
+ public URClientException(String message, int code) {
+ super(message);
+ this.code = code;
+ }
+
+ public URClientException(int code, Throwable cause) {
+ super(cause);
+ this.code = code;
+ }
+
+ public int getCode() {
+ return this.code;
+ }
+
+}
diff --git a/src/main/resources/wsdl/szr/szr_pvp.xsd b/src/main/resources/wsdl/szr/szr_pvp.xsd
index a536c47..373c45e 100644
--- a/src/main/resources/wsdl/szr/szr_pvp.xsd
+++ b/src/main/resources/wsdl/szr/szr_pvp.xsd
@@ -1,6 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://egov.gv.at/pvp1.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://egov.gv.at/pvp1.xsd" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="pvpToken" type="pvpTokenType"/>
+ <xs:element name="debug-ticket">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="txid" type="xs:string" minOccurs="1" maxOccurs="1" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
<xs:complexType name="pvpTokenType">
<xs:sequence>
<xs:element name="authenticate">
diff --git a/src/main/resources/wsdl/szr_v4/pvp19.xsd b/src/main/resources/wsdl/szr_v4/pvp19.xsd
index 596a2b9..aad728a 100644
--- a/src/main/resources/wsdl/szr_v4/pvp19.xsd
+++ b/src/main/resources/wsdl/szr_v4/pvp19.xsd
@@ -12,6 +12,13 @@
</xs:complexContent>
</xs:complexType>
</xs:element>
+ <xs:element name="debug-ticket">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="txid" type="xs:string" minOccurs="1" maxOccurs="1" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
<xs:complexType name="pvpTokenType">
<xs:sequence>
<xs:element name="authenticate">
diff --git a/src/main/resources/wsdl/szr_v4/szr_v4.0.xsd b/src/main/resources/wsdl/szr_v4/szr_v4.0.xsd
index fd255b1..1e2a06c 100644
--- a/src/main/resources/wsdl/szr_v4/szr_v4.0.xsd
+++ b/src/main/resources/wsdl/szr_v4/szr_v4.0.xsd
@@ -154,6 +154,7 @@
<xs:complexType name="SignContentResponseType">
<xs:sequence>
<xs:element name="JwsAlg" type="xs:string" minOccurs="0"/>
+ <xs:element name="Cert" minOccurs="0" type="xs:base64Binary"/>
<xs:element name="Out" type="szr:SignContentEntry" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
diff --git a/src/test/java/at/gv/util/test/ValitationUtilsTest.java b/src/test/java/at/gv/util/test/ValitationUtilsTest.java
new file mode 100644
index 0000000..e4e5b3f
--- /dev/null
+++ b/src/test/java/at/gv/util/test/ValitationUtilsTest.java
@@ -0,0 +1,36 @@
+package at.gv.util.test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.commons.lang.RandomStringUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.BlockJUnit4ClassRunner;
+
+import at.gv.util.ValidationUtils;
+
+@RunWith(BlockJUnit4ClassRunner.class)
+public class ValitationUtilsTest {
+
+ @Test
+ public void dateOfBirthFormat() {
+ assertFalse("wrong format not detected", ValidationUtils.isDateFormat("19-06-2002"));
+ assertFalse("wrong format not detected", ValidationUtils.isOverThirteen(RandomStringUtils.randomAlphanumeric(10)));
+
+ assertTrue("detected", ValidationUtils.isDateFormat("19.06.2002"));
+
+ }
+
+ @Test
+ public void ageVerification() {
+ assertTrue("not over 14", ValidationUtils.isOverThirteen("01.01.1985"));
+ assertTrue("not over 14", ValidationUtils.isOverThirteen("17.06.2007"));
+ assertTrue("not over 14", ValidationUtils.isOverThirteen("18.06.2007"));
+ assertFalse("not over 14", ValidationUtils.isOverThirteen("19.06.2015"));
+
+ assertFalse("not over 14", ValidationUtils.isOverThirteen("19-06-2002"));
+ assertFalse("not over 14", ValidationUtils.isOverThirteen(RandomStringUtils.randomAlphanumeric(10)));
+
+ }
+}