From 2c3c1d6bb748a0655a83fdf4cd26135042d898b9 Mon Sep 17 00:00:00 2001 From: Thomas Lenz Date: Fri, 19 Jul 2019 10:35:29 +0200 Subject: USP client integration switch to v2.0.7 --- .../at/gv/util/client/mis/usp_v2/USPClient.java | 171 ++++++++++++++------- 1 file changed, 115 insertions(+), 56 deletions(-) (limited to 'src/main/java/at/gv/util/client/mis/usp_v2/USPClient.java') diff --git a/src/main/java/at/gv/util/client/mis/usp_v2/USPClient.java b/src/main/java/at/gv/util/client/mis/usp_v2/USPClient.java index 4d23a1e..7bbdef9 100644 --- a/src/main/java/at/gv/util/client/mis/usp_v2/USPClient.java +++ b/src/main/java/at/gv/util/client/mis/usp_v2/USPClient.java @@ -1,7 +1,9 @@ package at.gv.util.client.mis.usp_v2; import java.net.URL; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; @@ -23,7 +25,7 @@ import org.slf4j.LoggerFactory; import at.gv.util.LaxHostNameVerifier; import at.gv.util.LoggingHandler; import at.gv.util.MiscUtil; -import at.gv.util.client.szr.SZRHTTPHeaderHandler; +import at.gv.util.client.szr.PVP2XHTTPHeaderHandler; import at.gv.util.config.EgovUtilConfiguration; import at.gv.util.ex.EgovUtilException; import at.gv.util.wsdl.mis.usp_v2.ISyncService; @@ -32,18 +34,31 @@ import at.gv.util.wsdl.mis.usp_v2.SynchronisationServiceServiceagent; import at.gv.util.xsd.mis.usp_v2.eai.syncmsgs.ListMandatesRequest; import at.gv.util.xsd.mis.usp_v2.eai.syncmsgs.ListMandatesResponseType; import at.gv.util.xsd.mis.usp_v2.eai.syncmsgs.MandateAttributesSearchFilterType; +import at.gv.util.xsd.mis.usp_v2.eai.syncmsgs.MandateList; +import at.gv.util.xsd.mis.usp_v2.eai.syncmsgs.MandateListType; +import at.gv.util.xsd.mis.usp_v2.eai.syncmsgs.ObjectFactory; +import at.gv.util.xsd.mis.usp_v2.eai.syncmsgs.SearchCriteriaTestType; +import at.gv.util.xsd.mis.usp_v2.eai.syncmsgs.SearchCriteriaType; +import at.gv.util.xsd.mis.usp_v2.eai.syncmsgs.TimeRangeType; +import at.gv.util.xsd.mis.usp_v2.mandates.Mandate; +import at.gv.util.xsd.mis.usp_v2.persondata.IdentificationType; +import at.gv.util.xsd.mis.usp_v2.persondata.IdentificationType.Value; import at.gv.util.xsd.szr.pvp.PvpTokenType; public class USPClient { - @Resource - WebServiceContext wsContext; + public static final String USP_DATE_PATTERN = "yyyy-MM-dd"; + + + @Resource WebServiceContext wsContext; private EgovUtilConfiguration config = null; private Logger log = LoggerFactory.getLogger(USPClient.class); private boolean logEnabled = true; private ISyncService uspSuche = null; + private SimpleDateFormat formater; + public USPClient(EgovUtilConfiguration config, boolean logEnabled) throws EgovUtilException { MiscUtil.assertNotNull(config, "config"); this.config = config; @@ -51,65 +66,100 @@ public class USPClient { initialize(); } -// public GetMandatesResponse getMandates(String bpkType, String bpkValue, List mandateFilters) { -// -// // assemble request -// GetMandatesRequest request = new GetMandatesRequest(); -// String requestId = createUSPRequestId(); -// log.debug("USP request id: " + requestId); -// request.setRequestId(requestId); -// Date date = new Date(); -// try { -// request.setTimestamp(MiscUtil.getXMLGregorianCalendar(date)); -// } catch (DatatypeConfigurationException e) { -// log.warn("Error initializing USP client.", e); -// return null; -// } -// log.debug("USP time stamp: " + date.toString()); -// request.setApplicationId(config.getUSPApplicationId()); -// log.debug("USP application id: " + config.getUSPApplicationId()); -// -// // set identification -// IdentificationType idt = new IdentificationType(); -// idt.setType(bpkType); -// idt.setValue(bpkValue); -// request.setIdentification(idt); -// -// // set filters -// if (mandateFilters != null && mandateFilters.size() > 0) { -// MandateFilters mf = new MandateFilters(); -// mf.getMandateFilter().addAll(mandateFilters); -// request.setMandateFilters(mf); -// } -// -// return this.uspSuche.getMandatesOperation(request); -// -// -// } - - public void getMandates(String bpkType, String bpkValue, List mandateFilters) { - ListMandatesRequest parameters = new ListMandatesRequest(); - - MandateAttributesSearchFilterType searchFilterType = new MandateAttributesSearchFilterType(); - - Object searchFilter = null; - searchFilterType.setFilter(searchFilter ); - - + public List getMandates(String bpkType, String bpkValue, List mandateFilters) throws Exception { - //request USP try { - log.trace("Request pre-processing finished. Requesting USP ... "); - - ListMandatesResponseType results = this.uspSuche.listMandates(parameters ); + if (mandateFilters.size() > 1) + log.debug("More than one mandate-profile required. Request each profile seperatly"); + + List results = new ArrayList(); + for (String mandateFilter : mandateFilters) { + log.trace("Building USP VDDS request ... "); + ListMandatesRequest req = generateRequest(bpkType, bpkValue, mandateFilter); - log.trace("Receive response from USP. Starting response post-processing ... "); + log.trace("Request pre-processing finished. Requesting USP ... "); + ListMandatesResponseType resp = this.uspSuche.listMandates(req ); + + log.trace("Receive response from USP for filter:" + mandateFilter + " . Start post processing ... "); + postProcessUSPMandateResult(resp, results); + + } + return results; + } catch (ListMandatesFault e) { - // TODO Auto-generated catch block - e.printStackTrace(); + log.warn("Receive an error from USP. Msg: " + e.getMessage(), e); + throw e; + + } catch (Exception e) { + log.error("Catch an generic error during USP communication.", e); + throw e; + } + + } + + private void postProcessUSPMandateResult(ListMandatesResponseType resp, List results) throws USPClientException { + if (resp.getSearchResult() != null) { + if (resp.getSearchResult().getDeclaredType().isAssignableFrom(MandateList.class)) { + log.trace("Find 'MandateList' element in USP response"); + MandateList mandateList = (MandateList) resp.getSearchResult().getValue(); + + if (mandateList.getMandates() != null && mandateList.getMandates().getMandate() != null) { + log.debug("Find #" + mandateList.getMandates().getMandate().size() + " mandates in USP response"); + results.addAll(mandateList.getMandates().getMandate()); + + } else + log.info("Find 'null' element in USP response. Ignore full response"); + } else + log.warn("'SearchResult' element in USP response contains an unknown type: " + resp.getSearchResult().getName().toString()); + + } else { + log.debug("'SearchResult' element in USP response is 'null' Inspecting response on errors ..."); + if (resp.getResult() != null) { + String errorCode = resp.getResult().getErrorCode(); + String errorMsg = resp.getResult().getErrorMessage(); + if (MiscUtil.isNotEmpty(errorCode) || MiscUtil.isNotEmpty(errorMsg)) { + log.info("Receice an error from USP! Code: " + errorCode + " Msg: " + errorMsg); + throw new USPClientException(errorMsg, errorCode); + } + + } + } + + } + + private ListMandatesRequest generateRequest(String bpkType, String bpkValue, String mandateFilter) { + ObjectFactory objFactory = new ObjectFactory(); + + ListMandatesRequest parameters = new ListMandatesRequest(); + MandateAttributesSearchFilterType searchFilterType = new MandateAttributesSearchFilterType(); + SearchCriteriaTestType searchCriteriaTest = new SearchCriteriaTestType(); + SearchCriteriaType searchCriteria = new SearchCriteriaType(); + IdentificationType representative = new IdentificationType(); + Value IdValue = new Value(); + + //set bPK + IdValue.setValue(bpkValue); + representative.setValue(IdValue ); + representative.setType(bpkType); + searchCriteria.getActivationRangeOrMandateTypeOrMandatorID().add(objFactory.createSearchCriteriaTypeRepresentativeID(representative)); + + //set allowed time range + TimeRangeType fromTo = new TimeRangeType(); + fromTo.setFrom(formater.format(new Date())); + fromTo.setTo("9999-12-31"); + searchCriteria.getActivationRangeOrMandateTypeOrMandatorID().add(objFactory.createSearchCriteriaTypeValidFromTo(fromTo)); + + //set mandate filters + searchCriteria.getActivationRangeOrMandateTypeOrMandatorID().add(objFactory.createSearchCriteriaTypeMandateType(mandateFilter)); + + searchCriteriaTest.setSearchCriteria(searchCriteria); + searchFilterType.setFilter(searchCriteriaTest); + parameters.getSearchFilter().add(objFactory.createMandateAttributesSearchFilter(searchFilterType)); + + return parameters; } @SuppressWarnings({ "rawtypes", "unchecked" }) @@ -141,7 +191,13 @@ public class USPClient { // PV authentication log.trace("Adding WS-Security Header handler."); PvpTokenType pvpToken = config.getUSPPVPToken(); - SZRHTTPHeaderHandler szrSOAPHandler = new SZRHTTPHeaderHandler(); + + VDDSRoleGenerationStrategy roleStrategy = new VDDSRoleGenerationStrategy( + config.getConfigurationValue("egovutil.usp.role.dynamic.participant"), + config.getConfigurationValue("egovutil.usp.role.dynamic.secret")); + + + PVP2XHTTPHeaderHandler szrSOAPHandler = new PVP2XHTTPHeaderHandler(roleStrategy); szrSOAPHandler.configure(pvpToken); handlerList.add(szrSOAPHandler); @@ -183,6 +239,9 @@ public class USPClient { } http.setTlsClientParameters(tlsParams ); } + + formater = new SimpleDateFormat(USP_DATE_PATTERN); + } private String createUSPRequestId() { -- cgit v1.2.3