From defceef8afef538555c13d33e344a89a828a3d97 Mon Sep 17 00:00:00 2001 From: Thomas Lenz Date: Fri, 20 Dec 2013 12:35:28 +0100 Subject: inital --- src/main/java/at/gv/util/client/mis/MISClient.java | 93 ++++++++ .../at/gv/util/client/mis/MISClientException.java | 23 ++ .../at/gv/util/client/mis/simple/MISMandate.java | 23 ++ .../at/gv/util/client/mis/simple/MISSessionId.java | 23 ++ .../gv/util/client/mis/simple/MISSimpleClient.java | 233 +++++++++++++++++++++ .../mis/simple/MISSimpleClientException.java | 22 ++ .../java/at/gv/util/client/mis/usp/USPClient.java | 150 +++++++++++++ .../gv/util/client/mis/usp/USPClientException.java | 33 +++ 8 files changed, 600 insertions(+) create mode 100644 src/main/java/at/gv/util/client/mis/MISClient.java create mode 100644 src/main/java/at/gv/util/client/mis/MISClientException.java create mode 100644 src/main/java/at/gv/util/client/mis/simple/MISMandate.java create mode 100644 src/main/java/at/gv/util/client/mis/simple/MISSessionId.java create mode 100644 src/main/java/at/gv/util/client/mis/simple/MISSimpleClient.java create mode 100644 src/main/java/at/gv/util/client/mis/simple/MISSimpleClientException.java create mode 100644 src/main/java/at/gv/util/client/mis/usp/USPClient.java create mode 100644 src/main/java/at/gv/util/client/mis/usp/USPClientException.java (limited to 'src/main/java/at/gv/util/client/mis') diff --git a/src/main/java/at/gv/util/client/mis/MISClient.java b/src/main/java/at/gv/util/client/mis/MISClient.java new file mode 100644 index 0000000..88afc8b --- /dev/null +++ b/src/main/java/at/gv/util/client/mis/MISClient.java @@ -0,0 +1,93 @@ +package at.gv.util.client.mis; + +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.namespace.QName; +import javax.xml.ws.BindingProvider; +import javax.xml.ws.WebServiceContext; +import javax.xml.ws.handler.Handler; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.util.LaxHostNameVerifier; +import at.gv.util.LoggingHandler; +import at.gv.util.MiscUtil; +import at.gv.util.client.moaid.MOAIDClient; +import at.gv.util.config.EgovUtilConfiguration; +import at.gv.util.ex.EgovUtilException; +import at.gv.util.wsdl.mis.MandateIssuePortType; +import at.gv.util.wsdl.mis.MandateIssueService; +import at.gv.util.wsdl.szr.SZRException; +import at.gv.util.xsd.mis.MandateIssueRequestType; +import at.gv.util.xsd.mis.MandateIssueResponseType; + +import com.sun.xml.ws.developer.JAXWSProperties; + +public class MISClient { + + @Resource + WebServiceContext wsContext; + + private EgovUtilConfiguration config = null; + Logger log = LoggerFactory.getLogger(MISClient.class); + + public MISClient() {} + + public MISClient(EgovUtilConfiguration config) { + if (config == null) { + throw new NullPointerException("Parameter config must not be null."); + } + this.config = config; + + + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public MandateIssueResponseType sendMandateIssueRequest(MandateIssueRequestType mir, String misServiceURL) throws SZRException, EgovUtilException { + MiscUtil.assertNotNull(mir, "mir"); + MiscUtil.assertNotNull(misServiceURL, "misServiceURL"); + + URL url = MOAIDClient.class.getResource("/wsdl/mis/mis-1.0.3.wsdl"); + MandateIssueService service = new MandateIssueService(url, new QName("http://reference.e-government.gv.at/namespace/mandates/mis/1.0/wsdl", "MandateIssueService")); + MandateIssuePortType port = service.getMandateIssuePort(); + + log.debug("MIS connection URL: " + misServiceURL); + BindingProvider bindingProvider = (BindingProvider) port; + Map requestContext = bindingProvider.getRequestContext(); + requestContext.put( + BindingProvider.ENDPOINT_ADDRESS_PROPERTY, misServiceURL); + + log.trace("Adding JAX-WS request/response trace handler."); + List handlerList = bindingProvider.getBinding().getHandlerChain(); + if (handlerList == null) { + handlerList = new ArrayList(); + } + LoggingHandler loggingHandler = new LoggingHandler(); + handlerList.add(loggingHandler); + bindingProvider.getBinding().setHandlerChain(handlerList); + + // check for ssl + if (misServiceURL.toLowerCase().startsWith("https")) { + log.trace("Using ssl for MIS client request."); + SSLContext sslContext = config.getMISsslConfiguration().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.getMISsslConfiguration().useLaxHostNameVerifier()) { + log.trace("LaxHostnameVerifier enabled. This setting is not recommended to use."); + requestContext.put(JAXWSProperties.HOSTNAME_VERIFIER, new LaxHostNameVerifier()); + } + } + return port.mandateIssueOperation(mir); + } + +} diff --git a/src/main/java/at/gv/util/client/mis/MISClientException.java b/src/main/java/at/gv/util/client/mis/MISClientException.java new file mode 100644 index 0000000..74d3a4a --- /dev/null +++ b/src/main/java/at/gv/util/client/mis/MISClientException.java @@ -0,0 +1,23 @@ +package at.gv.util.client.mis; + +public class MISClientException extends Exception { + + private static final long serialVersionUID = 5173056345209288701L; + + public MISClientException() { + super(); + } + + public MISClientException(String message, Throwable cause) { + super(message, cause); + } + + public MISClientException(String message) { + super(message); + } + + public MISClientException(Throwable cause) { + super(cause); + } + +} diff --git a/src/main/java/at/gv/util/client/mis/simple/MISMandate.java b/src/main/java/at/gv/util/client/mis/simple/MISMandate.java new file mode 100644 index 0000000..fe4159a --- /dev/null +++ b/src/main/java/at/gv/util/client/mis/simple/MISMandate.java @@ -0,0 +1,23 @@ +package at.gv.util.client.mis.simple; + +public class MISMandate { + + private boolean isProfRep = false; + private byte[] mandate = null; + + public boolean isProfRep() { + return isProfRep; + } + public void setProfRep(boolean isProfRep) { + this.isProfRep = isProfRep; + } + public byte[] getMandate() { + return mandate; + } + public void setMandate(byte[] mandate) { + this.mandate = mandate; + } + + + +} diff --git a/src/main/java/at/gv/util/client/mis/simple/MISSessionId.java b/src/main/java/at/gv/util/client/mis/simple/MISSessionId.java new file mode 100644 index 0000000..c9adc66 --- /dev/null +++ b/src/main/java/at/gv/util/client/mis/simple/MISSessionId.java @@ -0,0 +1,23 @@ +package at.gv.util.client.mis.simple; + +public class MISSessionId { + + private String sessiondId = null; + private String redirectURL = null; + + public String getSessiondId() { + return sessiondId; + } + public void setSessiondId(String sessiondId) { + this.sessiondId = sessiondId; + } + public String getRedirectURL() { + return redirectURL; + } + public void setRedirectURL(String redirectURL) { + this.redirectURL = redirectURL; + } + + + +} diff --git a/src/main/java/at/gv/util/client/mis/simple/MISSimpleClient.java b/src/main/java/at/gv/util/client/mis/simple/MISSimpleClient.java new file mode 100644 index 0000000..34ba951 --- /dev/null +++ b/src/main/java/at/gv/util/client/mis/simple/MISSimpleClient.java @@ -0,0 +1,233 @@ +package at.gv.util.client.mis.simple; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.StringRequestEntity; +import org.apache.xpath.XPathAPI; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.DOMException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import at.gv.util.DOMUtils; + +public class MISSimpleClient { + + private final static String SOAP_NS = "http://schemas.xmlsoap.org/soap/envelope/"; + private final static String MIS_NS = "http://reference.e-government.gv.at/namespace/mandates/mis/1.0/xsd"; + + private static Element NS_NODE = null; + + private static Logger log = LoggerFactory.getLogger(MISSimpleClient.class); + + static { + try { + NS_NODE = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument().createElement("test"); + NS_NODE.setAttribute("xmlns:soap", SOAP_NS); + NS_NODE.setAttribute("xmlns:mis", MIS_NS); + } catch (Exception e) { + log.warn("Error initializing namespace node.", e); + } + } + + public static List sendGetMandatesRequest(String webServiceURL, String sessionId) throws MISSimpleClientException { + if (webServiceURL == null) { + throw new NullPointerException("Argument webServiceURL must not be null."); + } + if (sessionId == null) { + throw new NullPointerException("Argument sessionId must not be null."); + } + try { + Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); + Element mirElement = doc.createElementNS(MIS_NS, "MandateIssueRequest"); + Element sessionIdElement = doc.createElementNS(MIS_NS, "SessionID"); + sessionIdElement.appendChild(doc.createTextNode(sessionId)); + mirElement.appendChild(sessionIdElement); + // send soap request + Element mandateIssueResponseElement = sendSOAPRequest(webServiceURL, mirElement); + + // check for error + checkForError(mandateIssueResponseElement); + + // check for session id + NodeList mandateElements = XPathAPI.selectNodeList(mandateIssueResponseElement, "//mis:MandateIssueResponse/mis:Mandates/mis:Mandate", NS_NODE); + + if (mandateElements == null || mandateElements.getLength() == 0) { + throw new MISSimpleClientException("No mandates found in response."); + } + + ArrayList foundMandates = new ArrayList(); + for (int i=0; i 0) { + Element certElement = doc.createElementNS(MIS_NS, "X509SignatureCertificate"); + certElement.appendChild(doc.createTextNode(Base64.encodeBase64String(cert))); + mirElement.appendChild(certElement); + } + Element redirectElement = doc.createElementNS(MIS_NS, "RedirectURL"); + redirectElement.appendChild(doc.createTextNode(redirectURL)); + mirElement.appendChild(redirectElement); + Element refValElement = doc.createElementNS(MIS_NS, "ReferenceValue"); + refValElement.appendChild(doc.createTextNode(refValue)); + mirElement.appendChild(refValElement); + if (mandateIdentifier != null && mandateIdentifier.length > 0) { + Element filtersElement = doc.createElementNS(MIS_NS, "Filters"); + Element mandateIdentifiersElement = doc.createElementNS(MIS_NS, "MandateIdentifiers"); + for (int i=0; i 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); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private void initialize() throws EgovUtilException { + URL url = USPClient.class.getResource("/wsdl/mis/usp/mis-usp-1.0.2.wsdl"); + GetMandatesService uspService = null; + String uspURL = null; + uspService = new GetMandatesService(url, new QName("http://reference.e-government.gv.at/namespace/mandates/mis/usp/1.0.2/wsdl", "GetMandatesService")); + uspSuche = uspService.getGetMandatesPort(); + if (config.isUSPTestEnvironment()) { + log.trace("Initializing USP test configuration."); + uspURL = config.getUSPTestEnvironmentURL(); + } else { + log.trace("Initializing USP productive configuration."); + uspURL = config.getUSPProductionEnvironmentURL(); + } + log.trace("USP connection URL: " + uspURL); + BindingProvider bindingProvider = (BindingProvider) uspSuche; + Map requestContext = bindingProvider.getRequestContext(); + requestContext.put( + BindingProvider.ENDPOINT_ADDRESS_PROPERTY, uspURL); + + log.trace("Adding JAX-WS request/response trace handler."); + List handlerList = bindingProvider.getBinding().getHandlerChain(); + if (handlerList == null) { + handlerList = new ArrayList(); + } + LoggingHandler loggingHandler = new LoggingHandler(); + if (this.logEnabled) { + handlerList.add(loggingHandler); + } + // PV authentication + 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); + + + //set HTTP Client Timeout (Default Timeout 60sec) + requestContext.put(JAXWSProperties.CONNECT_TIMEOUT, this.config.getHTTPRequestTimeout()); + + // check for ssl + if (uspURL.toLowerCase().startsWith("https")) { + log.trace("Using ssl for SZR client request."); + SSLContext sslContext = this.config.getUSPsslConfiguration().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 createUSPRequestId() { + return RandomStringUtils.randomAlphanumeric(12); + } + +} diff --git a/src/main/java/at/gv/util/client/mis/usp/USPClientException.java b/src/main/java/at/gv/util/client/mis/usp/USPClientException.java new file mode 100644 index 0000000..3c36ccb --- /dev/null +++ b/src/main/java/at/gv/util/client/mis/usp/USPClientException.java @@ -0,0 +1,33 @@ +package at.gv.util.client.mis.usp; + +public class USPClientException extends Exception { + + private static final long serialVersionUID = 5173056345209288701L; + + private int code = -1; + + public USPClientException(int code) { + super(); + this.code = code; + } + + public USPClientException(String message, int code, Throwable cause) { + super(message, cause); + this.code = code; + } + + public USPClientException(String message, int code) { + super(message); + this.code = code; + } + + public USPClientException(int code, Throwable cause) { + super(cause); + this.code = code; + } + + public int getCode() { + return this.code; + } + +} -- cgit v1.2.3