aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2014-11-04 09:12:37 +0100
committerAndreas Fitzek <andreas.fitzek@iaik.tugraz.at>2014-11-04 09:12:37 +0100
commit0e5320a6e524dd46179d5f7f1e86794b7b41092f (patch)
treec51267e835c2745689b6f5680c421a2a92856ecd
parentfed2e4a84d0d7e3ffa714e7c0685247be76715fb (diff)
downloadpdf-as-4-0e5320a6e524dd46179d5f7f1e86794b7b41092f.tar.gz
pdf-as-4-0e5320a6e524dd46179d5f7f1e86794b7b41092f.tar.bz2
pdf-as-4-0e5320a6e524dd46179d5f7f1e86794b7b41092f.zip
Catch old SL Error Responses
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/sl/util/BKUSLConnector.java73
-rw-r--r--pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/mains/LegacySLExtractor.java74
2 files changed, 141 insertions, 6 deletions
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/sl/util/BKUSLConnector.java b/pdf-as-lib/src/main/java/at/gv/egiz/sl/util/BKUSLConnector.java
index 15d2fb38..84bd7d29 100644
--- a/pdf-as-lib/src/main/java/at/gv/egiz/sl/util/BKUSLConnector.java
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/sl/util/BKUSLConnector.java
@@ -27,6 +27,8 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
@@ -62,7 +64,10 @@ public class BKUSLConnector extends BaseSLConnector {
.getLogger(BKUSLConnector.class);
public static final String SIGNATURE_DEVICE = "BKU";
-
+
+ public static final String PATTERN_ERROR_CODE = "<.*:?ErrorCode>\\s*([0-9]+)\\s*</.*:?ErrorCode>";
+ public static final String PATTERN_ERROR_INFO = "<.*:?Info>\\s*(.*)\\s*</.*:?Info>";
+
private String bkuUrl;
public BKUSLConnector(Configuration config) {
@@ -74,6 +79,50 @@ public class BKUSLConnector extends BaseSLConnector {
return builder.build();
}
+ public static SLPdfAsException generateLegacySLException(String xmlResponse) {
+ if (xmlResponse != null) {
+ if (xmlResponse.contains("ErrorResponse")) {
+ int errorCode = -1;
+ String errorInfo = null;
+ // Probably an ErrorResponse
+ Pattern patternErrorCode = Pattern.compile(PATTERN_ERROR_CODE,
+ Pattern.CASE_INSENSITIVE);
+ Matcher matcherErrorCode = patternErrorCode
+ .matcher(xmlResponse);
+ if (matcherErrorCode.find()) {
+ if (matcherErrorCode.groupCount() == 1) {
+ String errorCodeString = matcherErrorCode.group(1);
+ try {
+ errorCode = Integer.parseInt(errorCodeString);
+ } catch (NumberFormatException e) {
+ // Ignore
+ logger.trace(
+ "Failed to convert ErrorCode [{}] into number",
+ errorCodeString);
+ }
+ }
+ }
+
+ if (errorCode > 0) {
+
+ Pattern patternErrorInfo = Pattern.compile(
+ PATTERN_ERROR_INFO, Pattern.CASE_INSENSITIVE);
+ Matcher matcherErrorInfo = patternErrorInfo
+ .matcher(xmlResponse);
+
+ if (matcherErrorInfo.find()) {
+ if (matcherErrorInfo.groupCount() == 1) {
+ errorInfo = matcherErrorInfo.group(1);
+ }
+ }
+
+ return new SLPdfAsException(errorCode, errorInfo);
+ }
+ }
+ }
+ return null;
+ }
+
private String performHttpRequestToBKU(String xmlRequest,
RequestPackage pack, SignParameter parameter)
throws ClientProtocolException, IOException, IllegalStateException {
@@ -118,9 +167,9 @@ public class BKUSLConnector extends BaseSLConnector {
holder.getProcessInfo().add(hdr);
}
}
-
- BKUHeader hdr = new BKUHeader(ErrorConstants.STATUS_INFO_SIGDEVICE,
- SIGNATURE_DEVICE);
+
+ BKUHeader hdr = new BKUHeader(
+ ErrorConstants.STATUS_INFO_SIGDEVICE, SIGNATURE_DEVICE);
logger.debug("Response Header : {}", hdr.toString());
holder.getProcessInfo().add(hdr);
}
@@ -153,18 +202,25 @@ public class BKUSLConnector extends BaseSLConnector {
throws PdfAsException {
JAXBElement<?> element = null;
String slRequest;
+ String slResponse = null;
try {
slRequest = SLMarschaller.marshalToString(of
.createInfoboxReadRequest(request));
logger.trace(slRequest);
- String slResponse = performHttpRequestToBKU(slRequest, null,
+ slResponse = performHttpRequestToBKU(slRequest, null,
parameter);
element = (JAXBElement<?>) SLMarschaller
.unmarshalFromString(slResponse);
} catch (JAXBException e) {
+
+ SLPdfAsException slError = generateLegacySLException(slResponse);
+ if(slError != null) {
+ throw slError;
+ }
+
throw new PDFIOException("error.pdf.io.03", e);
} catch (ClientProtocolException e) {
throw new PDFIOException("error.pdf.io.03", e);
@@ -193,17 +249,22 @@ public class BKUSLConnector extends BaseSLConnector {
SignParameter parameter) throws PdfAsException {
JAXBElement<?> element = null;
String slRequest;
+ String slResponse = null;
try {
slRequest = SLMarschaller.marshalToString(of
.createCreateCMSSignatureRequest(pack.getRequestType()));
logger.debug(slRequest);
- String slResponse = performHttpRequestToBKU(slRequest, pack,
+ slResponse = performHttpRequestToBKU(slRequest, pack,
parameter);
element = (JAXBElement<?>) SLMarschaller
.unmarshalFromString(slResponse);
} catch (JAXBException e) {
+ SLPdfAsException slError = generateLegacySLException(slResponse);
+ if(slError != null) {
+ throw slError;
+ }
throw new PDFIOException("error.pdf.io.03", e);
} catch (ClientProtocolException e) {
throw new PDFIOException("error.pdf.io.03", e);
diff --git a/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/mains/LegacySLExtractor.java b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/mains/LegacySLExtractor.java
new file mode 100644
index 00000000..d31d6b1e
--- /dev/null
+++ b/pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/mains/LegacySLExtractor.java
@@ -0,0 +1,74 @@
+package at.gv.egiz.pdfas.lib.test.mains;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+import at.gv.egiz.pdfas.common.exceptions.SLPdfAsException;
+import at.gv.egiz.sl.util.BKUSLConnector;
+
+public class LegacySLExtractor {
+
+ public static final String TEST_LEGACY_RESPONSE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sl10:ErrorResponse xmlns:sl10=\"http://www.buergerkarte.at/namespaces/securitylayer/20020225#\">" +
+ "<sl10:ErrorCode>1501</sl10:ErrorCode>" +
+ "<sl10:Info>Fehler in XML-Struktur der Anfrage. (Element content is invalid according to the DTD/Schema.)</sl10:Info>" +
+ "</sl10:ErrorResponse>";
+
+ public static final String TEST_LEGACY_RESPONSE_NOINFO = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sl10:ErrorResponse xmlns:sl10=\"http://www.buergerkarte.at/namespaces/securitylayer/20020225#\">" +
+ "<sl10:ErrorCode>1501</sl10:ErrorCode>" +
+ "</sl10:ErrorResponse>";
+
+ public static final String TEST_LEGACY_RESPONSE_PLAIN = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sl10:ErrorResponse xmlns:sl10=\"http://www.buergerkarte.at/namespaces/securitylayer/20020225#\">" +
+ "</sl10:ErrorResponse>";
+
+ public static final String TEST_LEGACY_SOMETHING_ELSE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+ "<sl10:Errorresponse xmlns:sl10=\"http://www.buergerkarte.at/namespaces/securitylayer/20020225#\">" +
+ "<sl10:ErrorCode>1501</sl10:ErrorCode>" +
+ "<sl10:Info>Fehler in XML-Struktur der Anfrage. (Element content is invalid according to the DTD/Schema.)</sl10:Info>" +
+ "</sl10:Errorresponse>";
+
+ @Test
+ public void test() {
+ SLPdfAsException e = BKUSLConnector.generateLegacySLException(TEST_LEGACY_RESPONSE);
+
+ if(e == null) {
+ fail("Failed to extract SL Error");
+ }
+
+ if(e.getCode() != 1501 || !e.getInfo().equals("Fehler in XML-Struktur der Anfrage. (Element content is invalid according to the DTD/Schema.)")) {
+ fail("Failed to extract SL Error");
+ }
+
+ SLPdfAsException e1 = BKUSLConnector.generateLegacySLException(TEST_LEGACY_RESPONSE_NOINFO);
+
+ if(e1 == null) {
+ fail("Failed to extract SL Error");
+ }
+
+ if(e1.getCode() != 1501 || e1.getInfo() != null) {
+ fail("Failed to extract SL Error");
+ }
+
+ SLPdfAsException e2 = BKUSLConnector.generateLegacySLException(TEST_LEGACY_RESPONSE_PLAIN);
+
+ if(e2 != null) {
+ fail("Extracted invalid error info");
+ }
+
+ SLPdfAsException e3 = BKUSLConnector.generateLegacySLException(TEST_LEGACY_SOMETHING_ELSE);
+
+ if(e3 != null) {
+ fail("Extracted invalid error info");
+ }
+
+ SLPdfAsException e4 = BKUSLConnector.generateLegacySLException(null);
+
+ if(e4 != null) {
+ fail("Extracted invalid error info");
+ }
+ }
+
+}