Skip to content

Commit

Permalink
rework + uitbreiding (mock) unit test, refactor utility klasse
Browse files Browse the repository at this point in the history
  • Loading branch information
mprins committed Sep 16, 2019
1 parent 447441d commit c6ca351
Show file tree
Hide file tree
Showing 8 changed files with 349 additions and 135 deletions.
2 changes: 1 addition & 1 deletion .mvn/maven.config
Original file line number Diff line number Diff line change
@@ -1 +1 @@
-T1.1C
-T1
8 changes: 4 additions & 4 deletions Gds2Afgifte-AfgifteService-v2-0-soapui-project_20171130.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<con:soapui-project id="595a9503-d6ad-4ae8-9044-44a00670aa61" activeEnvironment="Default" name="Gds2Afgifte_AfgifteService_v2_0" resourceRoot="" soapui-version="5.4.0" abortOnError="false" runType="SEQUENTIAL" xmlns:con="http://eviware.com/soapui/config"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.actions.iface.tools.soapui.TestRunnerAction@values-local"><![CDATA[<xml-fragment xmlns:con="http://eviware.com/soapui/config">
<con:soapui-project id="595a9503-d6ad-4ae8-9044-44a00670aa61" activeEnvironment="Default" name="Gds2Afgifte_AfgifteService_v2_0" resourceRoot="" soapui-version="5.5.0" abortOnError="false" runType="SEQUENTIAL" xmlns:con="http://eviware.com/soapui/config"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.actions.iface.tools.soapui.TestRunnerAction@values-local"><![CDATA[<xml-fragment xmlns:con="http://eviware.com/soapui/config">
<con:entry key="Report Format(s)" value=""/>
<con:entry key="Host:Port" value=""/>
<con:entry key="Export JUnit Results" value="false"/>
Expand Down Expand Up @@ -792,9 +792,9 @@
</v20:verzoek>
</v20:BestandenlijstOpvragenRequest>
</soapenv:Body>
</soapenv:Envelope>]]></con:request><con:assertion type="SOAP Response" id="61ec3daa-e149-4d2a-b1c7-13829a60724a"/><con:assertion type="Schema Compliance" id="dcc510da-fb3b-4819-9807-4e508dd15939"><con:configuration/></con:assertion><con:credentials><con:authType>No Authorization</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:wsaConfig mustUnderstand="NONE" version="200508"/><con:wsrmConfig version="1.2"/></con:request></con:config></con:testStep><con:properties/></con:testCase><con:properties/></con:testSuite><con:mockService port="8088" path="/AfgifteService" host="localhost" name="AfgifteService Mock" bindToHostOnly="false" docroot="" id="4e108166-bf40-415b-b6f5-1f747b373af3"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.mock.WsdlMockService@require-soap-action">false</con:setting></con:settings><con:properties/><con:mockOperation name="BestandenlijstOpvragen" interface="Gds2AfgifteServiceSoapOverHttp" operation="BestandenlijstOpvragen" id="01fc393b-d7b9-459f-b2c4-029bf3c3a6fa"><con:settings/><con:defaultResponse>GeenResponse</con:defaultResponse><con:dispatchStyle>SCRIPT</con:dispatchStyle><con:dispatchPath><![CDATA[def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
</soapenv:Envelope>]]></con:request><con:assertion type="SOAP Response" id="61ec3daa-e149-4d2a-b1c7-13829a60724a"/><con:assertion type="Schema Compliance" id="dcc510da-fb3b-4819-9807-4e508dd15939"><con:configuration/></con:assertion><con:credentials><con:authType>No Authorization</con:authType></con:credentials><con:jmsConfig JMSDeliveryMode="PERSISTENT"/><con:jmsPropertyConfig/><con:wsaConfig mustUnderstand="NONE" version="200508"/><con:wsrmConfig version="1.2"/></con:request></con:config></con:testStep><con:properties/></con:testCase><con:properties/></con:testSuite><con:mockService port="8088" path="/AfgifteService" host="localhost" name="AfgifteService Mock" bindToHostOnly="false" docroot="" id="4e108166-bf40-415b-b6f5-1f747b373af3"><con:settings><con:setting id="com.eviware.soapui.impl.wsdl.mock.WsdlMockService@require-soap-action">false</con:setting><con:setting id="com.eviware.soapui.impl.wsdl.panels.mock.WsdlMockServiceDesktopPanel$LogListModel@maxSize">100</con:setting></con:settings><con:properties/><con:mockOperation name="BestandenlijstOpvragen" interface="Gds2AfgifteServiceSoapOverHttp" operation="BestandenlijstOpvragen" id="01fc393b-d7b9-459f-b2c4-029bf3c3a6fa"><con:settings/><con:defaultResponse>GeenResponse</con:defaultResponse><con:dispatchStyle>SCRIPT</con:dispatchStyle><con:dispatchPath><![CDATA[def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = new com.eviware.soapui.support.XmlHolder(mockRequest.requestContent)
/* beetje dom van kadaster; hardcoded namescapce aliases
/* beetje dom van kadaster; hardcoded namescpace aliases
def contractnummer = String.valueOf(holder.getNodeValue("//v201:contractnummer"))
def artikelnummer= String.valueOf(holder.getNodeValue("//v201:artikelnummer"))
def datumtijdvan= String.valueOf(holder.getNodeValue("//v202:DatumTijdVanaf"))
Expand Down Expand Up @@ -1823,7 +1823,7 @@ else {return "GeenResponse"}]]></con:dispatchPath><con:response name="AlleBestan
<v201:ProcesVerwerkingCode>1</v201:ProcesVerwerkingCode>
<v201:SeverityCode>INFO</v201:SeverityCode>
</v201:ProcesVerwerking>
<v202:klantAfgiftenummerMax>4142</v202:klantAfgiftenummerMax>
<v202:klantAfgiftenummerMax>4143</v202:klantAfgiftenummerMax>
<v202:afgifteAantalInLijst>3</v202:afgifteAantalInLijst>
<v202:BaseURLSet>
<v203:BaseURL type="login">https://service10.kadaster.nl/gds2/download/private</v203:BaseURL>
Expand Down
1 change: 0 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
Expand Down
127 changes: 126 additions & 1 deletion src/main/java/nl/b3p/gds2/GDS2Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,18 @@
*/
package nl.b3p.gds2;

import nl.kadaster.schemas.gds2.afgifte_bestandenlijstopvragenresultaat.v20170401.BestandenlijstOpvragenResultaatType;
import nl.kadaster.schemas.gds2.afgifte_bestandenlijstresultaat.afgifte.v20170401.AfgifteType;
import nl.kadaster.schemas.gds2.imgds.baseurl.v20170401.BaseURLType;
import nl.kadaster.schemas.gds2.service.afgifte.v20170401.Gds2AfgifteServiceV20170401;
import nl.kadaster.schemas.gds2.service.afgifte_bestandenlijstopvragen.v20170401.BestandenlijstOpvragenRequest;
import nl.kadaster.schemas.gds2.service.afgifte_bestandenlijstopvragen.v20170401.BestandenlijstOpvragenResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.security.KeyFactory;
Expand All @@ -14,13 +26,16 @@
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;
import java.util.Date;
import java.util.GregorianCalendar;


/**
*
* @author mprins
*/
public class GDS2Util {

private static final Log LOG = LogFactory.getLog(GDS2Util.class);
private static final String PEM_KEY_START = "-----BEGIN PRIVATE KEY-----";
private static final String PEM_KEY_END = "-----END PRIVATE KEY-----";
private static final String PEM_CERT_START = "-----BEGIN CERTIFICATE-----";
Expand Down Expand Up @@ -55,6 +70,116 @@ public static PrivateKey getPrivateKeyFromPEM(String pem) throws NoSuchAlgorithm
return kf.generatePrivate(spec);
}

/**
* vraagt de bestandenlijst op in maximaal 2 pogingen.
*
* @param gds2 afgifte service
* @param request geconfigureerd verzoek
* @return opgevraagde bestanden lijst
*/
public static BestandenlijstOpvragenResponse retryBestandenLijstGBOpvragen(Gds2AfgifteServiceV20170401 gds2, BestandenlijstOpvragenRequest request) throws Exception {
return retryBestandenLijstGBOpvragen(gds2, request, 2);
}

/**
* vraagt de bestandenlijst op.
*
* @param gds2 afgifte service
* @param request geconfigureerd verzoek
* @param retries aantal pogingen om verzoek uit te voeren
* @return opgevraagde bestanden lijst
*/
public static BestandenlijstOpvragenResponse retryBestandenLijstGBOpvragen(Gds2AfgifteServiceV20170401 gds2, BestandenlijstOpvragenRequest request, int retries) throws Exception {
int attempt = 0;
while (true) {
try {
return gds2.bestandenlijstOpvragen(request);
} catch (Exception e) {
attempt++;
if (attempt == retries) {
LOG.error("Fout bij laatste poging ophalen bestandenlijst: " + e.getClass().getName() + ": " + e.getMessage());
throw e;
} else {
LOG.warn("Fout bij poging " + attempt + " om bestandenlijst op te halen: " + e.getClass().getName() + ": " + e.getMessage());
Thread.sleep(retries);
LOG.info("Uitvoeren poging " + (attempt + 1) + " om bestandenlijst op te halen...");
}
}
}
}

/**
* bepaal de "certificaat" url, nodig voor BRK download.
*
* @param antwoord de url
* @return type of {@code null}
*/
public static BaseURLType getCertificaatBaseURL(BestandenlijstOpvragenResultaatType antwoord) {
for (BaseURLType type : antwoord.getBaseURLSet().getBaseURL()) {
if (type.getType().equalsIgnoreCase("certificaat")) {
return type;
}
}
return null;
}

/**
* bepaal de "anoniem" url, nodig voor BAG download.
*
* @param antwoord de url
* @return type of {@code null}
*/
public static BaseURLType getAnoniemBaseURL(BestandenlijstOpvragenResultaatType antwoord) {
for (BaseURLType type : antwoord.getBaseURLSet().getBaseURL()) {
if (type.getType().equalsIgnoreCase("anoniem")) {
return type;
}
}
return null;
}

/**
* bepaal de afgifte url.
*
* @param afgifte de afgifte
* @param type de base url
* @return de afgifte url
*/
public static String getAfgifteURL(AfgifteType afgifte, BaseURLType type) {
return type.getValue() + "/" + afgifte.getBestand().getBestandsnaam();
}

/**
* maakt een datum die te gebruiken is in een "van" of "tot" criterium, houdt rekening met de juiste maand.
*
* @param year jaartal (4 cijfers, > 2000)
* @param month maand (waarde van 0 t/m 12)
* @param day dag van de maand
* @return xml datum
* @throws DatatypeConfigurationException If the implementation of DatatypeFactory is not available or cannot be instantiated.
*/
public static XMLGregorianCalendar getGregorianCalendar(int year, int month, int day) throws DatatypeConfigurationException {
return DatatypeFactory.newInstance().newXMLGregorianCalendar(
new GregorianCalendar(
year,
month - 1 /* GregorianCalendar heeft 0-based month */,
day)
);
}

/**
* maakt een datum die te gebruiken is in een "van" of "tot" criterium.
*
* @param date datum
* @return xml datum
* @throws DatatypeConfigurationException If the implementation of DatatypeFactory is not available or cannot be instantiated.
*/
public static XMLGregorianCalendar getGregorianCalendar(Date date) throws DatatypeConfigurationException {
final GregorianCalendar cal = new GregorianCalendar();
cal.setTime(date);
return DatatypeFactory.newInstance().newXMLGregorianCalendar(cal);
}

private GDS2Util() {
}
}
46 changes: 16 additions & 30 deletions src/main/java/nl/b3p/gds2/Main2.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.Handler;
import java.math.BigInteger;
Expand All @@ -36,6 +37,8 @@
import java.util.List;
import java.util.Map;

import static nl.b3p.gds2.GDS2Util.*;

/**
* Test klasse om gds2 te bevragen.
*
Expand Down Expand Up @@ -107,17 +110,18 @@ public static void main(String[] args) throws Exception {
criteria.setNogNietGerapporteerd(alGerapporteerd);

// vanaf 1 jan 2018
GregorianCalendar vanaf = new GregorianCalendar(2018, (1 - 1) /* GregorianCalendar heeft 0-based month */, 1);
GregorianCalendar tot = new GregorianCalendar();
XMLGregorianCalendar vanaf = getGregorianCalendar(2018, 1, 1);

XMLGregorianCalendar tot;
// tot vandaag
tot.setTime(new Date());
tot = getGregorianCalendar(new Date());
// tot 1 sept 2019
tot = new GregorianCalendar(2019, 9 - 1, 1);
tot = getGregorianCalendar(2019, 9, 1);

// om bepaalde periode te selecteren; kan niet samen met afgiftenummers
criteria.setPeriode(new FilterDatumTijdType());
criteria.getPeriode().setDatumTijdVanaf(DatatypeFactory.newInstance().newXMLGregorianCalendar(vanaf));
criteria.getPeriode().setDatumTijdTotmet(DatatypeFactory.newInstance().newXMLGregorianCalendar(tot));
criteria.getPeriode().setDatumTijdVanaf(vanaf);
criteria.getPeriode().setDatumTijdTotmet(tot);

// om bepaalde afgiftenummers te selecteren; kan niet samen met periode
KlantAfgiftenummerReeksType afgiftenummers = new KlantAfgiftenummerReeksType();
Expand All @@ -140,8 +144,8 @@ public static void main(String[] args) throws Exception {

System.out.println("Contract nummer: " + criteria.getBestandKenmerken().getContractnummer());
System.out.println("Artikel nummer: " + criteria.getBestandKenmerken().getArtikelnummer());
System.out.println("DatumTijdVanaf criterium: " + vanaf.getTime());
System.out.println("DatumTijdTot criterium: " + tot.getTime());
System.out.println("DatumTijdVanaf criterium: " + vanaf.toGregorianCalendar().getTime());
System.out.println("DatumTijdTot criterium: " + tot.toGregorianCalendar().getTime());
System.out.println("alGerapporteerd criterium: " + alGerapporteerd);


Expand All @@ -150,7 +154,7 @@ public static void main(String[] args) throws Exception {
bestandenlijstOpvragenRequest.setVerzoek(bestandenlijstOpvragenVerzoek);
bestandenlijstOpvragenVerzoek.setAfgifteSelectieCriteria(criteria);

BestandenlijstOpvragenResponse bestandenlijstOpvragenResponse = retryBestandenLijstGBOpvragen(gds2, bestandenlijstOpvragenRequest);
BestandenlijstOpvragenResponse bestandenlijstOpvragenResponse = retryBestandenLijstGBOpvragen(gds2, bestandenlijstOpvragenRequest, 5);

// basis meta info van antwoord
//
Expand All @@ -168,14 +172,14 @@ public static void main(String[] args) throws Exception {
// documentatie suggereert dat bestandenLijst null ("niet aanwezig") kan zijn als er geen afgiftes aan de selectie criteria voldoen.
List<AfgifteType> afgiftes = bestandenLijst.getAfgifte();

verwerkAfgiftesGb(afgiftes);
printAfgiftes(afgiftes);

// opletten; in de xsd staat een default value van 'J' voor meerAfgiftesbeschikbaar
// trus als er meer dan het maximum aantal afgiftes zijn gevonden voor de selectie criterian
boolean hasMore = bestandenlijstOpvragenResponse.getAntwoord().isMeerAfgiftesbeschikbaar();
System.out.println("Meer afgiftes beschikbaar: " + hasMore);

// TODO logica om
// TODO logica om datum periode of nummerreeks kleiner te maken

// GregorianCalendar currentMoment = null;
// boolean parseblePeriod = false;
Expand Down Expand Up @@ -361,7 +365,7 @@ public static void main(String[] args) throws Exception {
// System.out.println("Aantal afgiftes: " + (afgiftes == null ? "<fout>" : afgiftes.size()));
}

private static void verwerkAfgiftesGb(List<AfgifteType> afgiftes) {
private static void printAfgiftes(List<AfgifteType> afgiftes) {
System.out.println("Afgiftegegevens, bestandskenmerken en Digikoppeling datareference gegevens van de bestandenlijst.");
// tab gescheiden output, of kvp
System.out.println("ID\treferentie\tbestandsnaam\tbestandref\tbeschikbaarTot\tcontractnr\tartikelnr\tartikelomschrijving\tcontextId\tcreationTime\texpirationTime\tfilename\tchecksum\ttype\tsize\tsenderUrl\treceiverUrl");
Expand Down Expand Up @@ -412,22 +416,4 @@ private static void verwerkAfgiftesGb(List<AfgifteType> afgiftes) {
}
}

private static BestandenlijstOpvragenResponse retryBestandenLijstGBOpvragen(Gds2AfgifteServiceV20170401 gds2, BestandenlijstOpvragenRequest requestGb) throws Exception {
int attempt = 0;
while (true) {
try {
return gds2.bestandenlijstOpvragen(requestGb);
} catch (Exception e) {
attempt++;
if (attempt == BESTANDENLIJST_ATTEMPTS) {
System.out.println("Fout bij laatste poging ophalen bestandenlijst: " + e.getClass().getName() + ": " + e.getMessage());
throw e;
} else {
System.out.println("Fout bij poging " + attempt + " om bestandenlijst op te halen: " + e.getClass().getName() + ": " + e.getMessage());
Thread.sleep(BESTANDENLIJST_RETRY_WAIT);
System.out.println("Uitvoeren poging " + (attempt + 1) + " om bestandenlijst op te halen...");
}
}
}
}
}
3 changes: 1 addition & 2 deletions src/main/java/nl/b3p/soap/logging/LogMessageHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,14 @@ public boolean handleMessage(SOAPMessageContext context) {
boolean isOutboundMessage= (Boolean)context.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if(isOutboundMessage){
LOG.trace("Uitgaand soap bericht \n================");

}else{
LOG.trace("Inkomend soap bericht \n================");
}

Iterator<MimeHeader> i = context.getMessage().getMimeHeaders().getAllHeaders();
while (i.hasNext()) {
MimeHeader h = i.next();
LOG.trace("header: " + h.getName() + "" + h.getValue());
LOG.trace("header: " + h.getName() + " = " + h.getValue());
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
context.getMessage().writeTo(bos);
Expand Down
Loading

0 comments on commit c6ca351

Please sign in to comment.