diff --git a/src/main/java/com/kms/handler/LogHandler.java b/src/main/java/com/kms/handler/LogHandler.java index b84963498e4428aab094d1845cfe45c1500ed019..abbe2ba55c523ce26a48206cc422e7137c7f3cca 100644 --- a/src/main/java/com/kms/handler/LogHandler.java +++ b/src/main/java/com/kms/handler/LogHandler.java @@ -13,7 +13,6 @@ import javax.xml.ws.handler.soap.SOAPMessageContext; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.net.InetSocketAddress; import java.util.Optional; import java.util.Set; @@ -34,33 +33,35 @@ public class LogHandler implements SOAPHandler<SOAPMessageContext> { soapMessageContext.put("messageHandled", true); - HttpExchange exchange = (HttpExchange)soapMessageContext.get("com.sun.xml.internal.ws.http.exchange"); - InetSocketAddress remoteAddress = exchange.getRemoteAddress(); - final String address = String.valueOf(remoteAddress.getAddress()); + final String address = Optional + .of((HttpExchange)soapMessageContext.get("com.sun.xml.internal.ws.http.exchange")) + .map(HttpExchange::getRemoteAddress) + .map(remoteAddress -> String.valueOf(remoteAddress.getAddress())) + .orElse(""); try { SOAPBody soapBody = soapMessageContext.getMessage().getSOAPBody(); OutputStream outputStream = new ByteArrayOutputStream(); soapMessageContext.getMessage().writeTo(outputStream); + final String callerId = (String) soapMessageContext.getOrDefault("callerId", "null"); + // extra defensive to avoid NPE + final String requestedServiceName = Optional.of(soapBody.getChildNodes()) + .map(nodeList -> nodeList.item(1)) + .map(Node::getNodeName) + .orElse(""); + LoggingHelper loggingHelper = LoggingHelper.getInstance(); if (callerId.equals("null")) { - String requestedServiceName = Optional.of(soapBody.getChildNodes().item(1)) - .map(Node::getNodeName) - .orElse(""); - loggingHelper.log(outputStream.toString(), address, requestedServiceName, callerId, "invalid api key"); SoapFaultHelper.throwFault("InvalidRequest","API key is invalid."); } - - loggingHelper.log(outputStream.toString(), address, - soapBody.getChildNodes().item(1).getNodeName(), callerId, ""); + loggingHelper.log(outputStream.toString(), address, requestedServiceName, callerId, ""); } catch (SOAPException | IOException ignored) { } - return true; } diff --git a/src/main/java/com/kms/service/PaymentService.java b/src/main/java/com/kms/service/PaymentService.java index 4bd791a4191ff16cc0c2ac8f830e21c847ed0deb..3687d359392abcbd3f318fb86a747079c9b00034 100644 --- a/src/main/java/com/kms/service/PaymentService.java +++ b/src/main/java/com/kms/service/PaymentService.java @@ -71,6 +71,9 @@ public class PaymentService { } private void verifyInitPaymentData(PaymentInitReq req) { + if (req == null) { + SoapFaultHelper.throwFault("InvalidRequest", "Request is empty"); + } if (req.getInitiatorId() == null) { SoapFaultHelper.throwFault("InvalidRequest", "Payment initiator id is empty"); }