From 0e5320a6e524dd46179d5f7f1e86794b7b41092f Mon Sep 17 00:00:00 2001 From: Andreas Fitzek Date: Tue, 4 Nov 2014 09:12:37 +0100 Subject: Catch old SL Error Responses --- .../java/at/gv/egiz/sl/util/BKUSLConnector.java | 73 +++++++++++++++++++-- .../pdfas/lib/test/mains/LegacySLExtractor.java | 74 ++++++++++++++++++++++ 2 files changed, 141 insertions(+), 6 deletions(-) create mode 100644 pdf-as-lib/src/test/java/at/gv/egiz/pdfas/lib/test/mains/LegacySLExtractor.java 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*"; + public static final String PATTERN_ERROR_INFO = "<.*:?Info>\\s*(.*)\\s*"; + 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 = "" + + "" + + "1501" + + "Fehler in XML-Struktur der Anfrage. (Element content is invalid according to the DTD/Schema.)" + + ""; + + public static final String TEST_LEGACY_RESPONSE_NOINFO = "" + + "" + + "1501" + + ""; + + public static final String TEST_LEGACY_RESPONSE_PLAIN = "" + + "" + + ""; + + public static final String TEST_LEGACY_SOMETHING_ELSE = "" + + "" + + "1501" + + "Fehler in XML-Struktur der Anfrage. (Element content is invalid according to the DTD/Schema.)" + + ""; + + @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"); + } + } + +} -- cgit v1.2.3