diff options
Diffstat (limited to 'src/main/java/at/gv/util/client')
-rw-r--r-- | src/main/java/at/gv/util/client/ur/URClient.java | 307 | ||||
-rw-r--r-- | src/main/java/at/gv/util/client/ur_V5/URClient.java | 519 | ||||
-rw-r--r-- | src/main/java/at/gv/util/client/ur_V5/URClientException.java (renamed from src/main/java/at/gv/util/client/ur/URClientException.java) | 2 |
3 files changed, 520 insertions, 308 deletions
diff --git a/src/main/java/at/gv/util/client/ur/URClient.java b/src/main/java/at/gv/util/client/ur/URClient.java deleted file mode 100644 index 4988a0f..0000000 --- a/src/main/java/at/gv/util/client/ur/URClient.java +++ /dev/null @@ -1,307 +0,0 @@ -package at.gv.util.client.ur; - -import java.math.BigInteger; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.net.ssl.SSLContext; -import javax.xml.bind.JAXBElement; -import javax.xml.namespace.QName; -import javax.xml.ws.BindingProvider; -import javax.xml.ws.WebServiceContext; -import javax.xml.ws.handler.Handler; - -import org.apache.commons.lang.RandomStringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import at.gv.util.xsd.ur.xmlsw.ResultCriteriaType; -import at.gv.util.xsd.ur.xmlsw.ResultRecord; -import at.gv.util.xsd.ur.xmlsw.SearchByExampleType; -import at.gv.util.xsd.ur.xmlsw.SearchCriteriaType; -import at.gv.util.xsd.ur.xmlsw.SearchResponseType; -import at.gv.util.DOMUtils; -import at.gv.util.LaxHostNameVerifier; -import at.gv.util.LoggingHandler; -import at.gv.util.MiscUtil; -import at.gv.util.client.szr.SZRSOAPHandler; -import at.gv.util.config.EgovUtilConfiguration; -import at.gv.util.ex.EgovUtilException; -import at.gv.util.wsdl.ur.URSuche; -import at.gv.util.wsdl.ur.URSucheService; -import at.gv.util.xsd.szr.pvp.PvpTokenType; -import at.gv.util.xsd.ur.pd.IdentificationType; -import at.gv.util.xsd.ur.pd.NichtNatuerlichePersonTyp; -import at.gv.util.xsd.ur.pd.PersonenDatenTyp; -import at.gv.util.xsd.ur.search.Funktion; -import at.gv.util.xsd.ur.search.ObjectFactory; -import at.gv.util.xsd.ur.search.SucheUnternehmenNachBpkRequest; -import at.gv.util.xsd.ur.search.SucheUnternehmenNachIdsRequest; -import at.gv.util.xsd.ur.search.SucheUnternehmenRequest; -import at.gv.util.xsd.ur.search.SucheUnternehmensdaten; - -import com.sun.xml.ws.developer.JAXWSProperties; - -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 = "V2.0"; - private List<String> allowedKeys = null; - - private final static String EVB = "einzelvertretungsbefugt"; - - public URClient(EgovUtilConfiguration config, List<String> allowedKeys, boolean evbCheck, boolean logEnabled) throws EgovUtilException { - MiscUtil.assertNotNull(config, "config"); - this.config = config; - this.allowedKeys = allowedKeys; - this.logEnabled = logEnabled; - this.evbCheck = evbCheck; - initialize(); - } - - public List<NichtNatuerlichePersonTyp> searchByBpk(String vzbpk) throws URClientException { - SucheUnternehmenNachBpkRequest request = new SucheUnternehmenNachBpkRequest(); - ObjectFactory of = new ObjectFactory(); - request.setVersion(version); - request.setBpkWTUREncoded(vzbpk); - List<ResultRecord> results = searchByExample(of.createSucheUnternehmenNachBpkRequest(request), -1); - return getNichtNatuerlichePersonen(results); - } - - public List<NichtNatuerlichePersonTyp> searchByRegisterNumber(String number, String type, int maxResults) throws URClientException { - SucheUnternehmenRequest request = new SucheUnternehmenRequest(); - ObjectFactory of = new ObjectFactory(); - request.setVersion(version); - SucheUnternehmensdaten sud = new SucheUnternehmensdaten(); - sud.setId(number); - sud.setIdArt(type); - request.setUnternehmensdaten(sud); - List<ResultRecord> results = searchByExample(of.createSucheUnternehmenRequest(request), maxResults); - return getNichtNatuerlichePersonen(results); - } - - public List<NichtNatuerlichePersonTyp> searchByName(String name, String plz, int maxResults) throws URClientException { - SucheUnternehmenRequest request = new SucheUnternehmenRequest(); - ObjectFactory of = new ObjectFactory(); - request.setVersion(version); - SucheUnternehmensdaten sud = new SucheUnternehmensdaten(); - sud.setUntName(name); - if (MiscUtil.isNotEmpty(plz)) { - sud.setPlz(plz); - } - request.setUnternehmensdaten(sud); - List<ResultRecord> results = searchByExample(of.createSucheUnternehmenRequest(request), maxResults); - return getNichtNatuerlichePersonen(results); - } - - @SuppressWarnings("unchecked") - private List<NichtNatuerlichePersonTyp> getNichtNatuerlichePersonen(List<ResultRecord> records) throws URClientException { - - if (records == null || records.size() == 0) { - return new ArrayList<NichtNatuerlichePersonTyp>(); - } - List<String> kurs = new ArrayList<String>(); - for (ResultRecord rr : records) { - PersonenDatenTyp pdt = ((JAXBElement<PersonenDatenTyp>) rr.getAny().get(0)).getValue(); - NichtNatuerlichePersonTyp nnpt = ((JAXBElement<NichtNatuerlichePersonTyp>) pdt.getPerson()).getValue(); - for (IdentificationType idt : nnpt.getIdentification()) { - if ("KUR".equals(idt.getType())) { - - // check evb - if (this.evbCheck) { - if (isEVB(pdt)) { - kurs.add(idt.getValue().getValue()); - log.debug("EVB found for " + nnpt.getVollerName()); - } else { - log.debug("Not EVB for " + nnpt.getVollerName()); - } - } else { - kurs.add(idt.getValue().getValue()); - } - } - } - } - return getNichtNatuerlichePerson(kurs); - } - - // check if person is einzelvertretungsbefugt - public static boolean isEVB(PersonenDatenTyp pdt) { - boolean isEVB = false; - for (Object content : pdt.getZusatzdaten().getContent()) { - if (content instanceof JAXBElement) { - JAXBElement jxb = (JAXBElement) content; - if (jxb.getDeclaredType().equals(PersonenDatenTyp.class)) { - PersonenDatenTyp pd = (PersonenDatenTyp) jxb.getValue(); - if (pd.getZusatzdaten() != null) { - for (Object c2 : pd.getZusatzdaten().getContent()) { - - if (c2 instanceof Element) { - Element fktElement = (Element) c2; - if ("Funktion".equals(fktElement.getLocalName())) { - NodeList nl = fktElement.getElementsByTagNameNS("http://statistik.at/namespace/ur/stammdaten/1#", "Vertretungsbefugnis"); - if (nl.getLength() > 0) { - String vbt = DOMUtils.getText(nl.item(0)); - if (EVB.equals(vbt)) { - return true; - } - } - } - } else if (c2 instanceof JAXBElement) { - JAXBElement jxb2= (JAXBElement) c2; - if (jxb2.getDeclaredType().equals(Funktion.class)) { - Funktion fkt = (Funktion) jxb2.getValue(); - if (EVB.equals(fkt.getVertretungsbefugnis())) { - return true; - } - } - } - } - } - } - } - } - return false; - } - - // get list of legal persons - @SuppressWarnings("unchecked") - public List<NichtNatuerlichePersonTyp> getNichtNatuerlichePerson(List<String> ids) throws URClientException { - SucheUnternehmenNachIdsRequest request = new SucheUnternehmenNachIdsRequest(); - ObjectFactory of = new ObjectFactory(); - request.getKur().addAll(ids); - List<ResultRecord> results = searchByExample(of.createSucheUnternehmenNachIdsRequest(request), -1); - if (results.size() == 0) { - return new ArrayList<NichtNatuerlichePersonTyp>(); - } - List<NichtNatuerlichePersonTyp> result = new ArrayList<NichtNatuerlichePersonTyp>(); - for (ResultRecord rr : results) { - PersonenDatenTyp pdt = ((JAXBElement<PersonenDatenTyp>)rr.getAny().get(0)).getValue(); - - NichtNatuerlichePersonTyp nnpt = ((JAXBElement<NichtNatuerlichePersonTyp>) pdt.getPerson()).getValue(); - - // check if we have to filter out - if (this.allowedKeys == null || this.allowedKeys.size() == 0) { - result.add(nnpt); - } else { - boolean hasKey = false; - for (IdentificationType idt : nnpt.getIdentification()) { - if (this.allowedKeys.contains(idt.getType())) { - hasKey = true; - } - } - if (hasKey) { - result.add(nnpt); - } - } - - } - return result; - } - - // search by example - public List<ResultRecord> searchByExample(Object request, int maxResults) throws URClientException { - SearchByExampleType body = new SearchByExampleType(); - body.setSearchRequestId(createURSearchId()); - ResultCriteriaType rc = new ResultCriteriaType(); - // set only value of max results if > 0 - if (maxResults > 0) { - rc.setMaxRecords(BigInteger.valueOf(maxResults)); - } - body.setResultCriteria(rc); - SearchCriteriaType sct = new SearchCriteriaType(); - sct.getAny().add(request); - body.setSearchCriteria(sct); - SearchResponseType srt = this.urSuche.searchByExample(body); - - // 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(); - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - private void initialize() throws EgovUtilException { - URL url = URClient.class.getResource("/wsdl/ur/URSucheService.wsdl"); - URSucheService urService = null; - String urURL = null; - urService = new URSucheService(url, new QName("urn:at:statistik:udb:ws", "URSucheService")); - urSuche = urService.getURSucheService(); - if (config.isURTestEnvironment()) { - log.trace("Initializing UR test configuration."); - urURL = config.getURTestEnvironmentURL(); - } else { - log.trace("Initializing UR productive configuration."); - urURL = config.getURProductionEnvironmentURL(); - } - - log.trace("UR connection URL: " + urURL); - BindingProvider bindingProvider = (BindingProvider) urSuche; - Map<String, Object> requestContext = bindingProvider.getRequestContext(); - requestContext.put( - BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 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(); - SZRSOAPHandler szrSOAPHandler = new SZRSOAPHandler(); - szrSOAPHandler.configure(pvpToken); - handlerList.add(szrSOAPHandler); - bindingProvider.getBinding().setHandlerChain(handlerList); - - // 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."); - } - requestContext.put(JAXWSProperties.SSL_SOCKET_FACTORY, sslContext.getSocketFactory()); - - // check for lax hostname - if (this.config.getURsslConfiguration().useLaxHostNameVerifier()) { - log.trace("LaxHostnameVerifier enabled. This setting is not recommended to use."); - requestContext.put(JAXWSProperties.HOSTNAME_VERIFIER, new LaxHostNameVerifier()); - } - } - } - - private String createURSearchId() { - return RandomStringUtils.randomAlphanumeric(8) + "-" + - RandomStringUtils.randomAlphanumeric(4) + "-" + RandomStringUtils.randomAlphanumeric(4) + "-" + - RandomStringUtils.randomAlphanumeric(12); - } - -} diff --git a/src/main/java/at/gv/util/client/ur_V5/URClient.java b/src/main/java/at/gv/util/client/ur_V5/URClient.java new file mode 100644 index 0000000..e39b18d --- /dev/null +++ b/src/main/java/at/gv/util/client/ur_V5/URClient.java @@ -0,0 +1,519 @@ +package at.gv.util.client.ur_V5; + +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.handler.Handler; + +import org.apache.commons.lang.RandomStringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.util.xsd.ur_V5.xmlsw.ExtraResultCriteria; +import at.gv.util.xsd.ur_V5.xmlsw.ResultCriteriaType; +import at.gv.util.xsd.ur_V5.xmlsw.ResultRecord; +import at.gv.util.xsd.ur_V5.xmlsw.SearchByExampleType; +import at.gv.util.xsd.ur_V5.xmlsw.SearchCriteriaType; +import at.gv.util.xsd.ur_V5.xmlsw.SearchResponseType; +import at.gv.util.LaxHostNameVerifier; +import at.gv.util.LoggingHandler; +import at.gv.util.MiscUtil; +import at.gv.util.client.szr.SZRSOAPHandler; +import at.gv.util.config.EgovUtilConfiguration; +import at.gv.util.ex.EgovUtilException; +import at.gv.util.wsdl.ur_V5.URSuche; +import at.gv.util.wsdl.ur_V5.URSucheService; +import at.gv.util.wsdl.ur_V5.XmlSwFault; +import at.gv.util.xsd.szr.pvp.PvpTokenType; +import at.gv.util.xsd.ur_V5.pd.IdentificationType; +import at.gv.util.xsd.ur_V5.pd.NichtNatuerlichePersonTyp; +import at.gv.util.xsd.ur_V5.pd.PersonenDatenTyp; +import at.gv.util.xsd.ur_V5.pd.PersonenDatenTyp.Zusatzdaten; +import at.gv.util.xsd.ur_V5.pd.PersonenDatenZusatzdatenTyp; +import at.gv.util.xsd.ur_V5.pd.ZusatzdatenPersonenTyp; +import at.gv.util.xsd.ur_V5.search.BestandszeitraumVollzug; +import at.gv.util.xsd.ur_V5.search.FunktionVollzug; +import at.gv.util.xsd.ur_V5.search.SucheUnternehmenNachBpkRequest; +import at.gv.util.xsd.ur_V5.search.SucheUnternehmenRequest; +import at.gv.util.xsd.ur_V5.search.SucheUnternehmensdaten; +import at.gv.util.xsd.ur_V5.simpletypes.EvbStatusTyp; + +import com.sun.xml.ws.developer.JAXWSProperties; + +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> 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 { + + 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()))) + + set.add(String.valueOf(funct.getFktName())); + } + } + } + } + + 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 (com.sun.xml.ws.client.ClientTransportException 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) + //requestContext.put(JAXWSProperties.CONNECT_TIMEOUT, this.config.getHTTPRequestTimeout()); + requestContext.put(JAXWSProperties.CONNECT_TIMEOUT, 15000); + + //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."); + } + requestContext.put(JAXWSProperties.SSL_SOCKET_FACTORY, sslContext.getSocketFactory()); + + // check for lax hostname + if (this.config.getURsslConfiguration().useLaxHostNameVerifier()) { + log.trace("LaxHostnameVerifier enabled. This setting is not recommended to use."); + requestContext.put(JAXWSProperties.HOSTNAME_VERIFIER, new LaxHostNameVerifier()); + } + } + + } + + + @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(); + SZRSOAPHandler szrSOAPHandler = new SZRSOAPHandler(); + 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/URClientException.java b/src/main/java/at/gv/util/client/ur_V5/URClientException.java index 80b4cd6..2d69ec4 100644 --- a/src/main/java/at/gv/util/client/ur/URClientException.java +++ b/src/main/java/at/gv/util/client/ur_V5/URClientException.java @@ -1,4 +1,4 @@ -package at.gv.util.client.ur; +package at.gv.util.client.ur_V5; public class URClientException extends Exception { |