6 new revisions:
Revision: f1292ef2facd
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Sun Jan 25 19:49:30 2015 UTC
Log: - Supports PHIZ-29....
https://code.google.com/p/phiz/source/detail?r=f1292ef2facd
Revision: a17144b6a1ba
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Mon Jan 26 17:11:24 2015 UTC
Log: - Further supports PHIZ-29....
https://code.google.com/p/phiz/source/detail?r=a17144b6a1ba
Revision: b786abb235b6
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Thu Jan 29 00:44:10 2015 UTC
Log: - Further supports PHIZ-28....
https://code.google.com/p/phiz/source/detail?r=b786abb235b6
Revision: 3e38665027e7
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Tue Feb 3 16:25:30 2015 UTC
Log: - Further supports PHIZ-28 and PHIZ-30....
https://code.google.com/p/phiz/source/detail?r=3e38665027e7
Revision: 23c3a4a3b804
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Fri Feb 6 12:28:44 2015 UTC
Log: - Further supports PHIZ-28....
https://code.google.com/p/phiz/source/detail?r=23c3a4a3b804
Revision: ba3e55c81d94
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Fri Feb 6 12:53:52 2015 UTC
Log: - Supports PHIZ-31....
https://code.google.com/p/phiz/source/detail?r=ba3e55c81d94
==============================================================================
Revision: f1292ef2facd
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Sun Jan 25 19:49:30 2015 UTC
Log: - Supports PHIZ-29.
- Implemented root cause exception stack trace logging + web service fault
detail child element creation.
https://code.google.com/p/phiz/source/detail?r=f1292ef2facd
Added:
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logback/impl/RootCauseThrowableProxyConverter.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/xml/utils/PhizXmlUtils.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/PhizHttpRequestMethods.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizMessageContextProperties.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/AbstractPhizSoapInterceptor.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/FaultRootCauseStackTraceInterceptor.java
Deleted:
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/AbstractPhizPhaseInterceptor.java
Modified:
/phiz-core/pom.xml
/phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsNames.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsQnames.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/xml/PhizXmlNs.java
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-data-db.xml
/phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-test.xml
/phiz-parent/pom.xml
/phiz-web-portal/pom.xml
/phiz-web-ws/pom.xml
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/IisHubDevActionInterceptor.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsAddressingUtils.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsUtils.java
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-server.xml
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws.xml
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logback/impl/RootCauseThrowableProxyConverter.java
Sun Jan 25 19:49:30 2015 UTC
@@ -0,0 +1,18 @@
+package gov.hhs.onc.phiz.logging.logback.impl;
+
+import ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter;
+import ch.qos.logback.classic.spi.IThrowableProxy;
+import ch.qos.logback.classic.spi.ThrowableProxy;
+import ch.qos.logback.core.CoreConstants;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+public class RootCauseThrowableProxyConverter extends
ExtendedThrowableProxyConverter {
+ public String throwableProxyToString(IThrowableProxy throwableProxy) {
+ String[] rootCauseStackTraceArr =
ExceptionUtils.getRootCauseStackTrace(((ThrowableProxy)
throwableProxy).getThrowable());
+ rootCauseStackTraceArr[0] = CoreConstants.CAUSED_BY +
rootCauseStackTraceArr[0];
+ rootCauseStackTraceArr[rootCauseStackTraceArr.length - 1] +=
CoreConstants.LINE_SEPARATOR;
+
+ return StringUtils.join(rootCauseStackTraceArr,
CoreConstants.LINE_SEPARATOR);
+ }
+}
=======================================
--- /dev/null
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/xml/utils/PhizXmlUtils.java
Sun Jan 25 19:49:30 2015 UTC
@@ -0,0 +1,36 @@
+package gov.hhs.onc.phiz.xml.utils;
+
+import java.io.InputStream;
+import java.io.StringWriter;
+import javax.xml.stream.StreamFilter;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.cxf.staxutils.PrettyPrintXMLStreamWriter;
+import org.apache.cxf.staxutils.StaxUtils;
+
+public final class PhizXmlUtils {
+ public static class IgnoreWhitespaceStreamFilter implements
StreamFilter {
+ public final static IgnoreWhitespaceStreamFilter INSTANCE = new
IgnoreWhitespaceStreamFilter();
+
+ @Override
+ public boolean accept(XMLStreamReader xmlStreamReader) {
+ return !xmlStreamReader.isWhiteSpace();
+ }
+ }
+
+ private PhizXmlUtils() {
+ }
+
+ public static String toFormattedString(InputStream inStream, int
indentSize) throws XMLStreamException {
+ StringWriter writer = new StringWriter();
+ PrettyPrintXMLStreamWriter xmlStreamWriter = new
PrettyPrintXMLStreamWriter(StaxUtils.createXMLStreamWriter(writer),
indentSize);
+
+
StaxUtils.copy(StaxUtils.createFilteredReader(StaxUtils.createXMLStreamReader(inStream),
IgnoreWhitespaceStreamFilter.INSTANCE), xmlStreamWriter);
+
+ xmlStreamWriter.flush();
+ xmlStreamWriter.close();
+
+ return StringUtils.trim(writer.toString());
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/PhizHttpRequestMethods.java
Sun Jan 25 19:49:30 2015 UTC
@@ -0,0 +1,9 @@
+package gov.hhs.onc.phiz.web;
+
+public final class PhizHttpRequestMethods {
+ public final static String GET = "GET";
+ public final static String POST = "POST";
+
+ private PhizHttpRequestMethods() {
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizMessageContextProperties.java
Sun Jan 25 19:49:30 2015 UTC
@@ -0,0 +1,8 @@
+package
gov.hhs.onc.phiz.web.ws;
+
+public final class PhizMessageContextProperties {
+ public final static String FAULT_ROOT_STACK_TRACE_ENABLED
= "faultRootStackTraceEnabled";
+
+ private PhizMessageContextProperties() {
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
Sun Jan 25 19:49:30 2015 UTC
@@ -0,0 +1,168 @@
+package gov.hhs.onc.phiz.web.ws.feature.impl;
+
+import com.github.sebhoss.warnings.CompilerWarnings;
+import gov.hhs.onc.phiz.web.PhizHttpRequestMethods;
+import
gov.hhs.onc.phiz.web.ws.interceptor.impl.AbstractPhizSoapInterceptor;
+import gov.hhs.onc.phiz.web.ws.utils.PhizWsUtils;
+import gov.hhs.onc.phiz.xml.utils.PhizXmlUtils;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Objects;
+import java.util.concurrent.atomic.AtomicInteger;
+import javax.xml.stream.XMLStreamException;
+import org.apache.cxf.Bus;
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.feature.AbstractFeature;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.InterceptorProvider;
+import org.apache.cxf.interceptor.StaxOutInterceptor;
+import org.apache.cxf.io.CacheAndWriteOutputStream;
+import org.apache.cxf.io.CachedOutputStream;
+import org.apache.cxf.io.CachedOutputStreamCallback;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.Phase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class PhizLoggingFeature extends AbstractFeature {
+ private abstract class AbstractPhizLoggingInterceptor extends
AbstractPhizSoapInterceptor {
+ protected AbstractPhizLoggingInterceptor(String phase) {
+ super(phase);
+ }
+
+ @Override
+ public void handleMessage(SoapMessage msg) throws Fault {
+ Exchange msgExchange = msg.getExchange();
+
+ if (!msgExchange.containsKey(LOG_MSG_ID_MSG_PROP_NAME)) {
+ msgExchange.put(LOG_MSG_ID_MSG_PROP_NAME,
LOG_MSG_ID.incrementAndGet());
+ }
+
+ try {
+ this.handleMessageInternal(msg, ((int)
msgExchange.get(LOG_MSG_ID_MSG_PROP_NAME)), new StringBuilder());
+ } catch (Fault e) {
+ throw e;
+ } catch (Exception e) {
+ throw new Fault(e);
+ }
+ }
+
+ protected abstract void handleMessageInternal(SoapMessage msg, int
logMsgId, StringBuilder msgBuilder) throws Exception;
+ }
+
+ private class PhizLoggingInInterceptor extends
AbstractPhizLoggingInterceptor {
+ public PhizLoggingInInterceptor() {
+ super(Phase.RECEIVE);
+ }
+
+ @Override
+ public void handleMessage(SoapMessage msg) throws Fault {
+ if (!Objects.equals(msg.get(Message.HTTP_REQUEST_METHOD),
PhizHttpRequestMethods.POST) || msg.containsKey(LOG_MSG_ID_MSG_PROP_NAME)) {
+ return;
+ }
+
+ super.handleMessage(msg);
+ }
+
+ @Override
+ protected void handleMessageInternal(SoapMessage msg, int
logMsgId, StringBuilder msgBuilder) throws Exception {
+ msg.put(LOG_MSG_ID_MSG_PROP_NAME, logMsgId);
+
+ String msgReqUrl = ((String) msg.get(Message.REQUEST_URL));
+ msg.getExchange().put(Message.REQUEST_URL, msgReqUrl);
+
+ msgBuilder.append("Inbound message (logId=");
+ msgBuilder.append(logMsgId);
+ msgBuilder.append(", addr=");
+ msgBuilder.append(msgReqUrl);
+ msgBuilder.append(", headers=");
+ msgBuilder.append(msg.get(Message.PROTOCOL_HEADERS));
+ msgBuilder.append("):\n");
+
+ PhizLoggingFeature.this.logMessage(msgBuilder,
PhizWsUtils.getCachedInputStream(msg));
+ }
+ }
+
+ private class PhizLoggingOutCallback implements
CachedOutputStreamCallback {
+ private SoapMessage msg;
+ private StringBuilder msgBuilder;
+
+ public PhizLoggingOutCallback(SoapMessage msg, StringBuilder
msgBuilder) {
+ this.msg = msg;
+ this.msgBuilder = msgBuilder;
+ }
+
+ @Override
+ public void onClose(CachedOutputStream msgPayloadOutStream) {
+ this.msgBuilder.append(", headers=");
+ this.msgBuilder.append(this.msg.get(Message.PROTOCOL_HEADERS));
+ this.msgBuilder.append(", status=");
+ this.msgBuilder.append(this.msg.get(Message.RESPONSE_CODE));
+ this.msgBuilder.append("):\n");
+
+ try (InputStream msgPayloadInStream =
msgPayloadOutStream.getInputStream()) {
+ PhizLoggingFeature.this.logMessage(this.msgBuilder,
msgPayloadInStream);
+ } catch (IOException | XMLStreamException ignored) {
+ }
+ }
+
+ @Override
+ public void onFlush(CachedOutputStream msgPayloadOutStream) {
+ }
+ }
+
+ private class PhizLoggingOutInterceptor extends
AbstractPhizLoggingInterceptor {
+ @SuppressWarnings({ CompilerWarnings.UNCHECKED })
+ public PhizLoggingOutInterceptor() {
+ super(Phase.PRE_STREAM);
+
+ this.setBeforeClasses(StaxOutInterceptor.class);
+ }
+
+ @Override
+ protected void handleMessageInternal(SoapMessage msg, int
logMsgId, StringBuilder msgBuilder) throws Exception {
+ msgBuilder.append("Outbound message (logId=");
+ msgBuilder.append(logMsgId);
+ msgBuilder.append(", addr=");
+ msgBuilder.append(msg.getExchange().get(Message.REQUEST_URL));
+
+ CacheAndWriteOutputStream msgPayloadOutStream = new
CacheAndWriteOutputStream(msg.getContent(OutputStream.class));
+ msgPayloadOutStream.registerCallback(new
PhizLoggingOutCallback(msg, msgBuilder));
+ msg.setContent(OutputStream.class, msgPayloadOutStream);
+ }
+ }
+
+ private final static String LOG_MSG_ID_MSG_PROP_NAME = "
log.msg.id";
+ private final static AtomicInteger LOG_MSG_ID = new AtomicInteger();
+
+ private final static Logger LOGGER =
LoggerFactory.getLogger(PhizLoggingFeature.class);
+
+ private int indentSize;
+
+ @Override
+ protected void initializeProvider(InterceptorProvider interceptorProv,
Bus bus) {
+ PhizLoggingInInterceptor loggingInInterceptor = new
PhizLoggingInInterceptor();
+ interceptorProv.getInInterceptors().add(loggingInInterceptor);
+ interceptorProv.getInInterceptors().add(loggingInInterceptor);
+
+ PhizLoggingOutInterceptor loggingOutInterceptor = new
PhizLoggingOutInterceptor();
+ interceptorProv.getOutInterceptors().add(loggingOutInterceptor);
+
interceptorProv.getOutFaultInterceptors().add(loggingOutInterceptor);
+ }
+
+ private void logMessage(StringBuilder msgBuilder, InputStream
msgPayloadInStream) throws XMLStreamException {
+
msgBuilder.append(PhizXmlUtils.toFormattedString(msgPayloadInStream,
this.indentSize));
+
+ LOGGER.info(msgBuilder.toString());
+ }
+
+ public int getIndentSize() {
+ return this.indentSize;
+ }
+
+ public void setIndentSize(int indentSize) {
+ this.indentSize = indentSize;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/AbstractPhizSoapInterceptor.java
Sun Jan 25 19:49:30 2015 UTC
@@ -0,0 +1,42 @@
+package gov.hhs.onc.phiz.web.ws.interceptor.impl;
+
+import com.github.sebhoss.warnings.CompilerWarnings;
+import java.util.Collection;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.PhaseInterceptor;
+
+public abstract class AbstractPhizSoapInterceptor extends
AbstractPhaseInterceptor<SoapMessage> {
+ protected AbstractPhizSoapInterceptor(String phase) {
+ super(phase);
+ }
+
+ @SuppressWarnings({ CompilerWarnings.UNCHECKED })
+ public void setAfterClasses(Class<? extends PhaseInterceptor<? extends
Message>> ... afterClasses) {
+ this.setAfterClasses(Stream.of(afterClasses));
+ }
+
+ public void setAfterClasses(Collection<Class<? extends
PhaseInterceptor<? extends Message>>> afterClasses) {
+ this.setAfterClasses(afterClasses.stream());
+ }
+
+ public void setAfterClasses(Stream<Class<? extends PhaseInterceptor<?
extends Message>>> afterClasses) {
+
this.setAfter(afterClasses.map(Object::getClass).map(Class::getName).collect(Collectors.toList()));
+ }
+
+ @SuppressWarnings({ CompilerWarnings.UNCHECKED })
+ public void setBeforeClasses(Class<? extends PhaseInterceptor<?
extends Message>> ... beforeClasses) {
+ this.setBeforeClasses(Stream.of(beforeClasses));
+ }
+
+ public void setBeforeClasses(Collection<Class<? extends
PhaseInterceptor<? extends Message>>> beforeClasses) {
+ this.setBeforeClasses(beforeClasses.stream());
+ }
+
+ public void setBeforeClasses(Stream<Class<? extends PhaseInterceptor<?
extends Message>>> beforeClasses) {
+
this.setBefore(beforeClasses.map(Object::getClass).map(Class::getName).collect(Collectors.toList()));
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/FaultRootCauseStackTraceInterceptor.java
Sun Jan 25 19:49:30 2015 UTC
@@ -0,0 +1,47 @@
+package gov.hhs.onc.phiz.web.ws.interceptor.impl;
+
+import com.github.sebhoss.warnings.CompilerWarnings;
+import gov.hhs.onc.phiz.web.ws.PhizMessageContextProperties;
+import gov.hhs.onc.phiz.ws.PhizWsQnames;
+import gov.hhs.onc.phiz.xml.utils.PhizXmlQnameUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.MessageUtils;
+import org.apache.cxf.phase.Phase;
+import org.springframework.stereotype.Component;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+@Component("interceptorFaultRootCauseStackTrace")
+public class FaultRootCauseStackTraceInterceptor extends
AbstractPhizSoapInterceptor {
+ @SuppressWarnings({ CompilerWarnings.UNCHECKED })
+ public FaultRootCauseStackTraceInterceptor() {
+ super(Phase.PREPARE_SEND);
+
+ this.setBeforeClasses(Soap12FaultOutInterceptor.class);
+ }
+
+ @Override
+ public void handleMessage(SoapMessage msg) throws Fault {
+ // noinspection ThrowableResultOfMethodCallIgnored
+ Fault fault = ((Fault) msg.getContent(Exception.class));
+ Throwable faultCause;
+
+ if (!MessageUtils.getContextualBoolean(msg,
PhizMessageContextProperties.FAULT_ROOT_STACK_TRACE_ENABLED, false)
+ || ((faultCause = fault.getCause()) == null)) {
+ return;
+ }
+
+ Element faultDetailElem = fault.getOrCreateDetail();
+ Document faultDetailDoc = faultDetailElem.getOwnerDocument();
+
+ Element faultDetailStacktraceElem =
+ faultDetailDoc.createElementNS(Fault.STACKTRACE_NAMESPACE,
PhizXmlQnameUtils.toReferenceString(PhizWsQnames.CXF_FAULT_ROOT_CAUSE_STACK_TRACE));
+
faultDetailStacktraceElem.appendChild(faultDetailDoc.createCDATASection((StringUtils.LF
+ +
StringUtils.join(ExceptionUtils.getRootCauseStackTrace(faultCause),
StringUtils.LF) + StringUtils.LF)));
+ faultDetailElem.appendChild(faultDetailStacktraceElem);
+ }
+}
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/AbstractPhizPhaseInterceptor.java
Fri Jan 9 08:17:07 2015 UTC
+++ /dev/null
@@ -1,10 +0,0 @@
-package gov.hhs.onc.phiz.web.ws.interceptor.impl;
-
-import org.apache.cxf.binding.soap.SoapMessage;
-import org.apache.cxf.phase.AbstractPhaseInterceptor;
-
-public abstract class AbstractPhizPhaseInterceptor extends
AbstractPhaseInterceptor<SoapMessage> {
- protected AbstractPhizPhaseInterceptor(String phase) {
- super(phase);
- }
-}
=======================================
--- /phiz-core/pom.xml Thu Jan 22 06:01:46 2015 UTC
+++ /phiz-core/pom.xml Sun Jan 25 19:49:30 2015 UTC
@@ -89,6 +89,10 @@
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
+ <groupId>net.logstash.logback</groupId>
+ <artifactId>logstash-logback-encoder</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
</dependency>
@@ -345,7 +349,7 @@
</bindingFiles>
<extraargs>
<extraarg>-exceptionSuper</extraarg>
-
<extraarg>java.lang.RuntimeException</extraarg>
+
<extraarg>java.lang.Exception</extraarg>
<extraarg>-faultSerialVersionUID</extraarg>
<extraarg>1</extraarg>
<extraarg>-mark-generated</extraarg>
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsNames.java Thu Dec
18 15:30:39 2014 UTC
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsNames.java Sun Jan
25 19:49:30 2015 UTC
@@ -1,19 +1,24 @@
package
gov.hhs.onc.phiz.ws;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.cxf.interceptor.Fault;
+
public final class PhizWsNames {
- private final static String HUB_PREFIX = "Hub";
- private final static String IIS_PREFIX = "IIS";
- private final static String IIS_HUB_PREFIX = IIS_PREFIX + HUB_PREFIX;
+ public final static String HUB_PREFIX = "Hub";
+ public final static String IIS_PREFIX = "IIS";
+ public final static String IIS_HUB_PREFIX = IIS_PREFIX + HUB_PREFIX;
+
+ public final static String PORT_TYPE_SUFFIX = "PortType";
+ public final static String BINDING_SUFFIX = "BindingSoap12";
+ public final static String REQ_SUFFIX = "Request";
+ public final static String RESP_SUFFIX = "Response";
+ public final static String HEADER_SUFFIX = "Header";
+ public final static String FAULT_SUFFIX = "Fault";
+ public final static String MSG_SUFFIX = "Message";
+ public final static String SERVICE_SUFFIX = "Service";
+ public final static String PORT_SUFFIX = "PortSoap12";
- private final static String PORT_TYPE_SUFFIX = "PortType";
- private final static String BINDING_SUFFIX = "BindingSoap12";
- private final static String REQ_SUFFIX = "Request";
- private final static String RESP_SUFFIX = "Response";
- private final static String HEADER_SUFFIX = "Header";
- private final static String FAULT_SUFFIX = "Fault";
- private final static String MSG_SUFFIX = "Message";
- private final static String SERVICE_SUFFIX = "Service";
- private final static String PORT_SUFFIX = "PortSoap12";
+ public final static String CXF_FAULT_ROOT_CAUSE_STACK_TRACE
= "rootCause" + StringUtils.capitalize(Fault.STACKTRACE);
public final static String PORT_TYPE = IIS_PREFIX + PORT_TYPE_SUFFIX;
public final static String PORT_TYPE_HUB = IIS_HUB_PREFIX +
PORT_TYPE_SUFFIX;
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsQnames.java Wed Dec
3 17:31:58 2014 UTC
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsQnames.java Sun Jan
25 19:49:30 2015 UTC
@@ -2,8 +2,12 @@
import gov.hhs.onc.phiz.xml.PhizXmlNs;
import javax.xml.namespace.QName;
+import org.apache.cxf.interceptor.Fault;
public final class PhizWsQnames {
+ public final static QName CXF_FAULT_ROOT_CAUSE_STACK_TRACE = new
QName(Fault.STACKTRACE_NAMESPACE,
PhizWsNames.CXF_FAULT_ROOT_CAUSE_STACK_TRACE,
+ PhizXmlNs.CXF_FAULT_PREFIX);
+
public final static QName PORT_TYPE = new QName(PhizXmlNs.IIS,
PhizWsNames.PORT_TYPE, PhizXmlNs.IIS_PREFIX);
public final static QName PORT_TYPE_HUB = new QName(PhizXmlNs.IIS_HUB,
PhizWsNames.PORT_TYPE_HUB, PhizXmlNs.IIS_HUB_PREFIX);
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/xml/PhizXmlNs.java Mon Nov 24
00:46:37 2014 UTC
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/xml/PhizXmlNs.java Sun Jan 25
19:49:30 2015 UTC
@@ -1,6 +1,8 @@
package gov.hhs.onc.phiz.xml;
public final class PhizXmlNs {
+ public final static String CXF_FAULT_PREFIX = "cxf-fault";
+
public final static String IIS_PREFIX = "iis";
public final static String IIS_HUB_PREFIX = IIS_PREFIX + "-hub";
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
Thu Jan 22 06:01:46 2015 UTC
+++
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
Sun Jan 25 19:49:30 2015 UTC
@@ -40,6 +40,8 @@
<!--====================================================================================================
= CONVERSION RULES
=====================================================================================================-->
+ <conversionRule conversionWord="exRoot"
converterClass="gov.hhs.onc.phiz.logging.logback.impl.RootCauseThrowableProxyConverter"/>
+
<conversionRule conversionWord="pColor"
converterClass="gov.hhs.onc.phiz.logging.logback.impl.PriorityColorCompositeConverter"/>
<conversionRule conversionWord="xReq"
converterClass="gov.hhs.onc.phiz.logging.logback.impl.RequestMdcConverter"/>
@@ -49,7 +51,7 @@
=====================================================================================================-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <pattern>%pColor(%p){${phiz.log.console.tty:-false}}
- %m%n%rEx</pattern>
+ <pattern>%pColor(%p){${phiz.log.console.tty:-false}}
- %m%n%exRoot</pattern>
</encoder>
<target>System.out</target>
<withJansi>true</withJansi>
@@ -63,7 +65,7 @@
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>${phiz.log.file.dir}/${
phiz.log.file.name}${phiz.log.file.name.ext}</file>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <pattern>%d{yyyy-MM-dd HH:mm:ss z} [%C:%L %t]%xReq %p
- %m%n%rEx</pattern>
+ <pattern>%d{yyyy-MM-dd HH:mm:ss z} [%C:%L %t]%xReq %p
- %m%n%exRoot</pattern>
</encoder>
<prudent>true</prudent>
</appender>
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-data-db.xml
Tue Jan 20 22:42:18 2015 UTC
+++
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-data-db.xml
Sun Jan 25 19:49:30 2015 UTC
@@ -29,9 +29,9 @@
<beans:bean id="dataSrcPooled"
class="com.mchange.v2.c3p0.ComboPooledDataSource" parent="dataSrc"
abstract="true"
p:acquireIncrement="1"
- p:initialPoolSize="0"
- p:maxIdleTime="#{
T(com.mchange.v2.c3p0.impl.C3P0Defaults).maxIdleTime() }"
- p:maxPoolSize="#{
T(com.mchange.v2.c3p0.impl.C3P0Defaults).maxPoolSize() }"
+ p:initialPoolSize="1"
+ p:maxIdleTime="0"
+ p:maxPoolSize="5"
p:minPoolSize="1"/>
<!--suppress SpringPlaceholdersInspection -->
=======================================
--- /phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-test.xml
Tue Jan 20 22:42:18 2015 UTC
+++ /phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-test.xml
Sun Jan 25 19:49:30 2015 UTC
@@ -189,6 +189,7 @@
p:directory="${phiz.data.db.dir}"
p:password="${phiz.data.db.user.admin.pass}"
p:port="${phiz.data.db.port}"
+ p:silent="true"
p:user="${
phiz.data.db.user.admin.name}"/>
<!--====================================================================================================
=======================================
--- /phiz-parent/pom.xml Thu Jan 22 06:01:46 2015 UTC
+++ /phiz-parent/pom.xml Sun Jan 25 19:49:30 2015 UTC
@@ -218,6 +218,11 @@
<version>2.2.12</version>
</dependency>
<dependency>
+ <groupId>net.logstash.logback</groupId>
+ <artifactId>logstash-logback-encoder</artifactId>
+ <version>3.6</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.0</version>
@@ -910,7 +915,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.18</version>
+ <version>2.18.1</version>
<inherited>true</inherited>
<configuration>
<reportFormat>plain</reportFormat>
@@ -964,7 +969,7 @@
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
- <version>1.2</version>
+ <version>1.3</version>
<inherited>true</inherited>
<dependencies>
<dependency>
=======================================
--- /phiz-web-portal/pom.xml Thu Jan 22 06:01:46 2015 UTC
+++ /phiz-web-portal/pom.xml Sun Jan 25 19:49:30 2015 UTC
@@ -200,6 +200,10 @@
<artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-core</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
=======================================
--- /phiz-web-ws/pom.xml Thu Jan 22 06:01:46 2015 UTC
+++ /phiz-web-ws/pom.xml Sun Jan 25 19:49:30 2015 UTC
@@ -221,6 +221,10 @@
<artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>spring-security-core</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/IisHubDevActionInterceptor.java
Fri Jan 9 08:17:07 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/IisHubDevActionInterceptor.java
Sun Jan 25 19:49:30 2015 UTC
@@ -16,17 +16,27 @@
import java.math.BigInteger;
import java.util.Objects;
import java.util.Optional;
-import org.apache.commons.lang3.StringUtils;
import org.apache.cxf.binding.soap.SoapFault;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.logging.FaultListener;
+import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
import org.apache.cxf.transport.http.Headers;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("interceptorIisHubDevAction")
-public class IisHubDevActionInterceptor extends
AbstractPhizPhaseInterceptor {
+public class IisHubDevActionInterceptor extends
AbstractPhizSoapInterceptor {
+ private static class IisHubDevFaultListener implements FaultListener {
+ public final static IisHubDevFaultListener INSTANCE = new
IisHubDevFaultListener();
+
+ @Override
+ public boolean faultOccurred(Exception exception, String desc,
Message msg) {
+ return false;
+ }
+ }
+
@Value("${
phiz.dest.iis.dev.id}")
private String iisDevDestId;
@@ -49,25 +59,38 @@
Optional.ofNullable(Headers.getSetProtocolHeaders(msg).get(PhizWsHttpHeaders.EXT_IIS_HUB_DEV_ACTION_NAME)).ifPresent(
(devActionValues) -> {
String devActionValue = devActionValues.get(0),
devActionFaultMsg = String.format("Fault for IIS Hub development
action: %s", devActionValue);
+ Exception devActionValueFaultCause = null;
switch (devActionValue) {
case
PhizWsHttpHeaders.EXT_IIS_HUB_DEV_ACTION_DEST_CONN_FAULT_VALUE:
- throw new SoapFault(StringUtils.EMPTY, new
DestinationConnectionFault(devActionFaultMsg, new
DestinationConnectionFaultTypeImpl(destId,
- this.iisDevDestUriStr)),
SoapFault.FAULT_CODE_SERVER);
+ devActionValueFaultCause =
+ new
DestinationConnectionFault(devActionFaultMsg, new
DestinationConnectionFaultTypeImpl(destId, this.iisDevDestUriStr));
+ break;
case
PhizWsHttpHeaders.EXT_IIS_HUB_DEV_ACTION_HUB_CLIENT_FAULT_VALUE:
- throw new HubClientFault(devActionFaultMsg, new
HubClientFaultTypeImpl(destId, this.iisDevDestUriStr));
+ devActionValueFaultCause = new
HubClientFault(devActionFaultMsg, new HubClientFaultTypeImpl(destId,
this.iisDevDestUriStr));
+ break;
case
PhizWsHttpHeaders.EXT_IIS_HUB_DEV_ACTION_MSG_TOO_LARGE_FAULT_VALUE:
// noinspection ConstantConditions
- throw new MessageTooLargeFault(devActionFaultMsg,
new MessageTooLargeFaultTypeImpl(BigInteger.valueOf(PhizWsUtils
- .getHttpServletRequest(msg).getContentLengthLong()),
BigInteger.valueOf(-1)));
+ devActionValueFaultCause =
+ new MessageTooLargeFault(devActionFaultMsg,
new
MessageTooLargeFaultTypeImpl(BigInteger.valueOf(PhizWsUtils.getHttpServletRequest(
+ msg).getContentLengthLong()),
BigInteger.valueOf(-1)));
+ break;
case
PhizWsHttpHeaders.EXT_IIS_HUB_DEV_ACTION_SEC_FAULT_VALUE:
- throw new SecurityFault(devActionFaultMsg, new
SecurityFaultTypeImpl());
+ devActionValueFaultCause = new
SecurityFault(devActionFaultMsg, new SecurityFaultTypeImpl());
+ break;
case
PhizWsHttpHeaders.EXT_IIS_HUB_DEV_ACTION_UNKNOWN_DEST_FAULT_VALUE:
- throw new
UnknownDestinationFault(devActionFaultMsg, new
UnknownDestinationFaultTypeImpl(destId));
+ devActionValueFaultCause = new
UnknownDestinationFault(devActionFaultMsg, new
UnknownDestinationFaultTypeImpl(destId));
+ break;
+ }
+
+ if (devActionValueFaultCause != null) {
+
msg.setContextualProperty(FaultListener.class.getName(),
IisHubDevFaultListener.INSTANCE);
+
+ throw SoapFault.createFault(new
Fault(devActionValueFaultCause), msg.getVersion());
}
});
}
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsAddressingUtils.java
Fri Jan 9 01:16:51 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsAddressingUtils.java
Sun Jan 25 19:49:30 2015 UTC
@@ -1,6 +1,5 @@
package gov.hhs.onc.phiz.web.ws.utils;
-import java.io.BufferedInputStream;
import java.io.IOException;
import javax.xml.stream.XMLStreamException;
import org.apache.cxf.helpers.DOMUtils;
@@ -22,12 +21,7 @@
return msgAddrProps.getMessageID().getValue();
}
- BufferedInputStream msgBufferedInStream =
PhizWsUtils.getMarkedInputStream(msg);
-
- try {
- return
DOMUtils.getContent(StaxUtils.read(msgBufferedInStream).getElementsByTagNameNS(Names.WSA_NAMESPACE_NAME,
Names.WSA_MESSAGEID_NAME).item(0));
- } finally {
- msgBufferedInStream.reset();
- }
+ return
DOMUtils.getContent(StaxUtils.read(PhizWsUtils.getCachedInputStream(msg))
+ .getElementsByTagNameNS(Names.WSA_NAMESPACE_NAME,
Names.WSA_MESSAGEID_NAME).item(0));
}
}
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsUtils.java
Fri Jan 9 01:16:51 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsUtils.java
Sun Jan 25 19:49:30 2015 UTC
@@ -1,6 +1,6 @@
package gov.hhs.onc.phiz.web.ws.utils;
-import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@@ -12,7 +12,10 @@
import javax.xml.ws.Holder;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
+import org.apache.commons.io.IOUtils;
import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.io.CachedOutputStream;
+import org.apache.cxf.io.DelegatingInputStream;
import org.apache.cxf.jaxws.context.WrappedMessageContext;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageContentsList;
@@ -22,17 +25,29 @@
private PhizWsUtils() {
}
- public static BufferedInputStream getMarkedInputStream(Message msg)
throws IOException {
+ public static InputStream getCachedInputStream(Message msg) throws
IOException {
InputStream msgInStream = msg.getContent(InputStream.class);
- BufferedInputStream msgBufferedInStream = ((msgInStream instanceof
BufferedInputStream) ? ((BufferedInputStream) msgInStream) : null);
+ DelegatingInputStream delegatingMsgInStream = ((msgInStream
instanceof DelegatingInputStream) ? ((DelegatingInputStream) msgInStream) :
null);
+ CachedOutputStream cachedMsgOutStream = new CachedOutputStream();
+ byte[] msgContent;
+
+ IOUtils.copy(((delegatingMsgInStream != null) ?
delegatingMsgInStream.getInputStream() : msgInStream), cachedMsgOutStream);
+
+ msgInStream.close();
+ cachedMsgOutStream.flush();
+
+ msgContent =
IOUtils.toByteArray(cachedMsgOutStream.getInputStream());
+ msgInStream = new ByteArrayInputStream(msgContent);
- if (msgBufferedInStream == null) {
- msg.setContent(InputStream.class, (msgBufferedInStream = new
BufferedInputStream(msgInStream)));
+ if (delegatingMsgInStream != null) {
+ delegatingMsgInStream.setInputStream(msgInStream);
+ } else {
+ msg.setContent(InputStream.class, msgInStream);
}
- msgBufferedInStream.mark(msgBufferedInStream.available());
+ cachedMsgOutStream.close();
- return msgBufferedInStream;
+ return new ByteArrayInputStream(msgContent);
}
@Nullable
=======================================
---
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-server.xml
Fri Jan 9 08:17:07 2015 UTC
+++
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-server.xml
Sun Jan 25 19:49:30 2015 UTC
@@ -42,7 +42,13 @@
<beans:bean id="serverJaxWs"
class="gov.hhs.onc.phiz.web.ws.jaxws.impl.PhizJaxWsServerFactoryBean"
parent="server" abstract="true"
p:bindingConfig-ref="soapBindingConfig12"
p:bus-ref="busPhiz"
- p:dataBinding-ref="dataBindingJaxb"/>
+ p:dataBinding-ref="dataBindingJaxb">
+ <beans:property name="outFaultInterceptors">
+ <beans:list>
+ <beans:ref bean="interceptorFaultRootCauseStackTrace"/>
+ </beans:list>
+ </beans:property>
+ </beans:bean>
<!--====================================================================================================
= SERVERS: IIS
=======================================
---
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws.xml
Fri Jan 9 01:16:51 2015 UTC
+++
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws.xml
Sun Jan 25 19:49:30 2015 UTC
@@ -4,16 +4,12 @@
xmlns:aop="
http://www.springframework.org/schema/aop"
xmlns:beans="
http://www.springframework.org/schema/beans"
xmlns:c="
http://www.springframework.org/schema/c"
- xmlns:camel="
http://camel.apache.org/schema/spring"
- xmlns:camel-cxf="
http://camel.apache.org/schema/cxf"
xmlns:context="
http://www.springframework.org/schema/context"
xmlns:p="
http://www.springframework.org/schema/p"
xmlns:task="
http://www.springframework.org/schema/task"
xmlns:util="
http://www.springframework.org/schema/util"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
-
http://camel.apache.org/schema/cxf
http://camel.apache.org/schema/cxf/camel-cxf.xsd
-
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
@@ -126,8 +122,14 @@
<beans:bean id="busPhiz" parent="busSpring" primary="true">
<beans:property name="features">
<beans:list merge="true">
- <beans:bean
class="org.apache.cxf.feature.LoggingFeature" parent="feature"/>
+ <beans:bean
class="gov.hhs.onc.phiz.web.ws.feature.impl.PhizLoggingFeature"
parent="feature"
+ p:indentSize="4"/>
</beans:list>
+ </beans:property>
+ <beans:property name="properties">
+ <beans:map>
+ <beans:entry key="#{
T(gov.hhs.onc.phiz.web.ws.PhizMessageContextProperties).FAULT_ROOT_STACK_TRACE_ENABLED
}" value="true"/>
+ </beans:map>
</beans:property>
</beans:bean>
</beans:beans>
==============================================================================
Revision: a17144b6a1ba
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Mon Jan 26 17:11:24 2015 UTC
Log: - Further supports PHIZ-29.
- Supports PHIZ-28.
- Implemented initial Logstash Logback appender configuration
(using/expecting a local Logstash, for now).
- Refactored custom logging CXF feature to include markers used by the
Logstash Logback encoder (via the associated Logback appender).
- Implemented CXF message payload element content "hiding" (content
replacement w/ a placeholder comment) to filter sensitive data prior to
logging.
https://code.google.com/p/phiz/source/detail?r=a17144b6a1ba
Added:
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/MarkerFieldName.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/PhizJsonFactoryDecorator.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/PhizMarkers.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/PriorityColorCompositeConverter.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/RequestMdcConverter.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/RootCauseThrowableProxyConverter.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/xml/DomStreamFilter.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpRequestEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpResponseEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/AbstractHttpEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpRequestEventImpl.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpResponseEventImpl.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizWsMessageContextProperties.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizWsMessageDirection.java
Deleted:
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logback/impl/PriorityColorCompositeConverter.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logback/impl/RequestMdcConverter.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logback/impl/RootCauseThrowableProxyConverter.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizMessageContextProperties.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsAddressingUtils.java
Modified:
/phiz-core/pom.xml
/phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsAddressingActions.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsNames.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsQnames.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/xml/utils/PhizXmlUtils.java
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
/phiz-parent/pom.xml
/phiz-web-core/pom.xml
/phiz-web-parent/pom.xml
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/FaultRootCauseStackTraceInterceptor.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/IisHubDevActionInterceptor.java
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws.xml
=======================================
--- /dev/null
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/logging/MarkerFieldName.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,17 @@
+package gov.hhs.onc.phiz.logging;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import org.apache.commons.lang3.StringUtils;
+
+@Documented
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.TYPE })
+public @interface MarkerFieldName {
+ String value() default StringUtils.EMPTY;
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/PhizJsonFactoryDecorator.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,24 @@
+package gov.hhs.onc.phiz.logging.impl;
+
+import com.fasterxml.jackson.databind.MapperFeature;
+import com.fasterxml.jackson.databind.MappingJsonFactory;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.PropertyNamingStrategy;
+import net.logstash.logback.decorate.JsonFactoryDecorator;
+
+public class PhizJsonFactoryDecorator implements JsonFactoryDecorator {
+ @Override
+ public MappingJsonFactory decorate(MappingJsonFactory jsonFactory) {
+ ObjectMapper objMapper = jsonFactory.getCodec();
+
+ objMapper.disable(MapperFeature.AUTO_DETECT_CREATORS);
+ objMapper.disable(MapperFeature.AUTO_DETECT_FIELDS);
+ objMapper.disable(MapperFeature.AUTO_DETECT_GETTERS);
+ objMapper.disable(MapperFeature.AUTO_DETECT_IS_GETTERS);
+ objMapper.disable(MapperFeature.AUTO_DETECT_SETTERS);
+
+
objMapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
+
+ return jsonFactory;
+ }
+}
=======================================
--- /dev/null
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/PhizMarkers.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,37 @@
+package gov.hhs.onc.phiz.logging.impl;
+
+import gov.hhs.onc.phiz.logging.MarkerFieldName;
+import net.logstash.logback.marker.Markers;
+import net.logstash.logback.marker.ObjectAppendingMarker;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.core.annotation.AnnotationUtils;
+
+public final class PhizMarkers {
+ public final static String MARKER_FIELD_NAME_DELIM = "_";
+
+ private PhizMarkers() {
+ }
+
+ public static ObjectAppendingMarker append(Object ... markerObjs) {
+ ObjectAppendingMarker marker = null, nextMarker;
+
+ for (Object markerObj : markerObjs) {
+ nextMarker = Markers.append(buildFieldName(markerObj),
markerObj);
+
+ marker = ((marker != null) ? marker.and(nextMarker) :
nextMarker);
+ }
+
+ return marker;
+ }
+
+ public static String buildFieldName(Object markerObj) {
+ Class<?> markerObjClass = markerObj.getClass();
+ MarkerFieldName markerFieldNameAnno =
AnnotationUtils.findAnnotation(markerObjClass, MarkerFieldName.class);
+ String markerFieldName = ((markerFieldNameAnno != null) ?
markerFieldNameAnno.value() : null);
+
+ // noinspection ConstantConditions
+ return StringUtils.join(
+
StringUtils.splitByCharacterTypeCamelCase((!StringUtils.isEmpty(markerFieldName) ?
markerFieldName : markerObjClass.getSimpleName())),
+ MARKER_FIELD_NAME_DELIM).toLowerCase();
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/PriorityColorCompositeConverter.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,41 @@
+package gov.hhs.onc.phiz.logging.impl;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.pattern.color.ANSIConstants;
+import ch.qos.logback.core.pattern.color.ForegroundCompositeConverterBase;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+
+public class PriorityColorCompositeConverter extends
ForegroundCompositeConverterBase<ILoggingEvent> {
+ private final static Map<Level, String> LVL_COLOR_CODE_MAP =
Stream.of(new ImmutablePair<>(Level.TRACE, ANSIConstants.DEFAULT_FG),
+ new ImmutablePair<>(Level.DEBUG, ANSIConstants.WHITE_FG), new
ImmutablePair<>(Level.INFO, ANSIConstants.BLUE_FG),
+ new ImmutablePair<>(Level.WARN, ANSIConstants.YELLOW_FG), new
ImmutablePair<>(Level.ERROR, ANSIConstants.RED_FG)).collect(
+ Collectors.toMap(Pair::getLeft, ((lvlColorCodePair) ->
(ANSIConstants.BOLD + lvlColorCodePair.getRight()))));
+
+ private boolean enabled;
+
+ @Override
+ public void start() {
+ String enabledOptValue = this.getFirstOption();
+
+ this.enabled = (StringUtils.isBlank(enabledOptValue) ||
BooleanUtils.toBoolean(enabledOptValue));
+
+ super.start();
+ }
+
+ @Override
+ protected String transform(ILoggingEvent loggingEvent, String msgStr) {
+ return (this.enabled ? super.transform(loggingEvent, msgStr) :
msgStr);
+ }
+
+ @Override
+ protected String getForegroundColorCode(ILoggingEvent loggingEvent) {
+ return LVL_COLOR_CODE_MAP.get(loggingEvent.getLevel());
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/RequestMdcConverter.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,20 @@
+package gov.hhs.onc.phiz.logging.impl;
+
+import ch.qos.logback.classic.ClassicConstants;
+import ch.qos.logback.classic.pattern.ClassicConverter;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
+
+public class RequestMdcConverter extends ClassicConverter {
+ private final static String SECTION_PREFIX = " [";
+ private final static String SECTION_SUFFIX = "]";
+
+ @Override
+ public String convert(ILoggingEvent event) {
+ Map<String, String> mdcProps = event.getMDCPropertyMap();
+
+ return
(mdcProps.containsKey(ClassicConstants.REQUEST_REMOTE_HOST_MDC_KEY) ?
(SECTION_PREFIX
+ + mdcProps.get(ClassicConstants.REQUEST_REMOTE_HOST_MDC_KEY) +
SECTION_SUFFIX) : StringUtils.EMPTY);
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/RootCauseThrowableProxyConverter.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,18 @@
+package gov.hhs.onc.phiz.logging.impl;
+
+import ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter;
+import ch.qos.logback.classic.spi.IThrowableProxy;
+import ch.qos.logback.classic.spi.ThrowableProxy;
+import ch.qos.logback.core.CoreConstants;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+public class RootCauseThrowableProxyConverter extends
ExtendedThrowableProxyConverter {
+ public String throwableProxyToString(IThrowableProxy throwableProxy) {
+ String[] rootCauseStackTraceArr =
ExceptionUtils.getRootCauseStackTrace(((ThrowableProxy)
throwableProxy).getThrowable());
+ rootCauseStackTraceArr[0] = CoreConstants.CAUSED_BY +
rootCauseStackTraceArr[0];
+ rootCauseStackTraceArr[rootCauseStackTraceArr.length - 1] +=
CoreConstants.LINE_SEPARATOR;
+
+ return StringUtils.join(rootCauseStackTraceArr,
CoreConstants.LINE_SEPARATOR);
+ }
+}
=======================================
--- /dev/null
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/xml/DomStreamFilter.java Mon
Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,7 @@
+package gov.hhs.onc.phiz.xml;
+
+import org.apache.cxf.staxutils.W3CDOMStreamReader;
+
+public interface DomStreamFilter {
+ public void filter(W3CDOMStreamReader domStreamReader);
+}
=======================================
--- /dev/null
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpEvent.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,20 @@
+package gov.hhs.onc.phiz.web.logging;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public interface HttpEvent<T> {
+ @JsonProperty("headers")
+ public Map<String, List<String>> getHeaderMap();
+
+ public Set<String> getHeaderNames();
+
+ public List<String> getHeaders(String headerName);
+
+ @JsonProperty
+ public String getContentType();
+
+ public T getDescriptor();
+}
=======================================
--- /dev/null
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpRequestEvent.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,59 @@
+package gov.hhs.onc.phiz.web.logging;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import gov.hhs.onc.phiz.logging.MarkerFieldName;
+import javax.servlet.http.HttpServletRequest;
+
+@MarkerFieldName("httpRequest")
+public interface HttpRequestEvent extends HttpEvent<HttpServletRequest> {
+ @JsonProperty
+ public String getAuthType();
+
+ @JsonProperty
+ public long getContentLength();
+
+ @JsonProperty
+ public String getContextPath();
+
+ @JsonProperty
+ public String getLocalName();
+
+ @JsonProperty
+ public int getLocalPort();
+
+ @JsonProperty
+ public String getMethod();
+
+ @JsonProperty
+ public String getPathInfo();
+
+ @JsonProperty
+ public String getProtocol();
+
+ @JsonProperty
+ public String getQueryString();
+
+ @JsonProperty
+ public String getRemoteAddr();
+
+ @JsonProperty
+ public int getRemotePort();
+
+ @JsonProperty
+ public String getScheme();
+
+ @JsonProperty
+ public String getServerName();
+
+ @JsonProperty
+ public int getServerPort();
+
+ @JsonProperty
+ public String getServletPath();
+
+ @JsonProperty
+ public String getUrl();
+
+ @JsonProperty
+ public String getUserPrincipal();
+}
=======================================
--- /dev/null
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpResponseEvent.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,11 @@
+package gov.hhs.onc.phiz.web.logging;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import gov.hhs.onc.phiz.logging.MarkerFieldName;
+import javax.servlet.http.HttpServletResponse;
+
+@MarkerFieldName("httpResponse")
+public interface HttpResponseEvent extends HttpEvent<HttpServletResponse> {
+ @JsonProperty
+ public int getStatus();
+}
=======================================
--- /dev/null
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/AbstractHttpEvent.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,29 @@
+package gov.hhs.onc.phiz.web.logging.impl;
+
+import gov.hhs.onc.phiz.web.logging.HttpEvent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+public abstract class AbstractHttpEvent<T> implements HttpEvent<T> {
+ protected T desc;
+
+ protected AbstractHttpEvent(T desc) {
+ this.desc = desc;
+ }
+
+ @Override
+ public Map<String, List<String>> getHeaderMap() {
+ Map<String, List<String>> headers = new
TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+
+ this.getHeaderNames().stream().forEach((headerName) ->
headers.put(headerName, new ArrayList<>(this.getHeaders(headerName))));
+
+ return headers;
+ }
+
+ @Override
+ public T getDescriptor() {
+ return this.desc;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpRequestEventImpl.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,118 @@
+package gov.hhs.onc.phiz.web.logging.impl;
+
+import gov.hhs.onc.phiz.web.logging.HttpRequestEvent;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.TreeSet;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.collections4.EnumerationUtils;
+
+public class HttpRequestEventImpl extends
AbstractHttpEvent<HttpServletRequest> implements HttpRequestEvent {
+ public HttpRequestEventImpl(HttpServletRequest desc) {
+ super(desc);
+ }
+
+ @Override
+ public Set<String> getHeaderNames() {
+ Set<String> headerNames = new
TreeSet<>(String.CASE_INSENSITIVE_ORDER);
+
headerNames.addAll(EnumerationUtils.toList(this.desc.getHeaderNames()));
+
+ return headerNames;
+ }
+
+ @Override
+ public List<String> getHeaders(String headerName) {
+ return EnumerationUtils.toList(this.desc.getHeaders(headerName));
+ }
+
+ @Override
+ public String getAuthType() {
+ return this.desc.getAuthType();
+ }
+
+ @Override
+ public long getContentLength() {
+ return this.desc.getContentLengthLong();
+ }
+
+ @Override
+ public String getContentType() {
+ return this.desc.getContentType();
+ }
+
+ @Override
+ public String getContextPath() {
+ return this.desc.getContextPath();
+ }
+
+ @Override
+ public String getLocalName() {
+ return this.desc.getLocalName();
+ }
+
+ @Override
+ public int getLocalPort() {
+ return this.desc.getLocalPort();
+ }
+
+ @Override
+ public String getMethod() {
+ return this.desc.getMethod();
+ }
+
+ @Override
+ public String getPathInfo() {
+ return this.desc.getPathInfo();
+ }
+
+ @Override
+ public String getProtocol() {
+ return this.desc.getProtocol();
+ }
+
+ @Override
+ public String getQueryString() {
+ return this.desc.getQueryString();
+ }
+
+ @Override
+ public String getRemoteAddr() {
+ return this.desc.getRemoteAddr();
+ }
+
+ @Override
+ public int getRemotePort() {
+ return this.desc.getRemotePort();
+ }
+
+ @Override
+ public String getScheme() {
+ return this.desc.getScheme();
+ }
+
+ @Override
+ public String getServerName() {
+ return this.desc.getServerName();
+ }
+
+ @Override
+ public int getServerPort() {
+ return this.desc.getServerPort();
+ }
+
+ @Override
+ public String getServletPath() {
+ return this.desc.getServletPath();
+ }
+
+ @Override
+ public String getUrl() {
+ return this.desc.getRequestURL().toString();
+ }
+
+ @Override
+ public String getUserPrincipal() {
+ return Objects.toString(this.desc.getUserPrincipal(), null);
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpResponseEventImpl.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,37 @@
+package gov.hhs.onc.phiz.web.logging.impl;
+
+import gov.hhs.onc.phiz.web.logging.HttpResponseEvent;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+import javax.servlet.http.HttpServletResponse;
+
+public class HttpResponseEventImpl extends
AbstractHttpEvent<HttpServletResponse> implements HttpResponseEvent {
+ public HttpResponseEventImpl(HttpServletResponse desc) {
+ super(desc);
+ }
+
+ @Override
+ public Set<String> getHeaderNames() {
+ Set<String> headerNames = new
TreeSet<>(String.CASE_INSENSITIVE_ORDER);
+ headerNames.addAll(this.desc.getHeaderNames());
+
+ return headerNames;
+ }
+
+ @Override
+ public List<String> getHeaders(String headerName) {
+ return new ArrayList<>(this.desc.getHeaders(headerName));
+ }
+
+ @Override
+ public String getContentType() {
+ return this.desc.getContentType();
+ }
+
+ @Override
+ public int getStatus() {
+ return this.desc.getStatus();
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizWsMessageContextProperties.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,9 @@
+package
gov.hhs.onc.phiz.web.ws;
+
+public final class PhizWsMessageContextProperties {
+ public final static String FAULT_ROOT_STACK_TRACE_ENABLED
= "faultRootStackTraceEnabled";
+ public final static String LOG_MSG_PAYLOAD_HIDE_CONTENT_ELEM_QNAMES
= "logMsgPayloadHideContentElemQnames";
+
+ private PhizWsMessageContextProperties() {
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizWsMessageDirection.java
Mon Jan 26 17:11:24 2015 UTC
@@ -0,0 +1,5 @@
+package
gov.hhs.onc.phiz.web.ws;
+
+public enum PhizWsMessageDirection {
+ INBOUND, OUTBOUND
+}
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logback/impl/PriorityColorCompositeConverter.java
Wed Dec 3 17:31:58 2014 UTC
+++ /dev/null
@@ -1,41 +0,0 @@
-package gov.hhs.onc.phiz.logging.logback.impl;
-
-import ch.qos.logback.classic.Level;
-import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.core.pattern.color.ANSIConstants;
-import ch.qos.logback.core.pattern.color.ForegroundCompositeConverterBase;
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import org.apache.commons.lang3.BooleanUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.apache.commons.lang3.tuple.Pair;
-
-public class PriorityColorCompositeConverter extends
ForegroundCompositeConverterBase<ILoggingEvent> {
- private final static Map<Level, String> LVL_COLOR_CODE_MAP =
Stream.of(new ImmutablePair<>(Level.TRACE, ANSIConstants.DEFAULT_FG),
- new ImmutablePair<>(Level.DEBUG, ANSIConstants.WHITE_FG), new
ImmutablePair<>(Level.INFO, ANSIConstants.BLUE_FG),
- new ImmutablePair<>(Level.WARN, ANSIConstants.YELLOW_FG), new
ImmutablePair<>(Level.ERROR, ANSIConstants.RED_FG)).collect(
- Collectors.toMap(Pair::getLeft, ((lvlColorCodePair) ->
(ANSIConstants.BOLD + lvlColorCodePair.getRight()))));
-
- private boolean enabled;
-
- @Override
- public void start() {
- String enabledOptValue = this.getFirstOption();
-
- this.enabled = (StringUtils.isBlank(enabledOptValue) ||
BooleanUtils.toBoolean(enabledOptValue));
-
- super.start();
- }
-
- @Override
- protected String transform(ILoggingEvent loggingEvent, String msgStr) {
- return (this.enabled ? super.transform(loggingEvent, msgStr) :
msgStr);
- }
-
- @Override
- protected String getForegroundColorCode(ILoggingEvent loggingEvent) {
- return LVL_COLOR_CODE_MAP.get(loggingEvent.getLevel());
- }
-}
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logback/impl/RequestMdcConverter.java
Sun Jan 4 15:55:30 2015 UTC
+++ /dev/null
@@ -1,20 +0,0 @@
-package gov.hhs.onc.phiz.logging.logback.impl;
-
-import ch.qos.logback.classic.ClassicConstants;
-import ch.qos.logback.classic.pattern.ClassicConverter;
-import ch.qos.logback.classic.spi.ILoggingEvent;
-import java.util.Map;
-import org.apache.commons.lang3.StringUtils;
-
-public class RequestMdcConverter extends ClassicConverter {
- private final static String SECTION_PREFIX = " [";
- private final static String SECTION_SUFFIX = "]";
-
- @Override
- public String convert(ILoggingEvent event) {
- Map<String, String> mdcProps = event.getMDCPropertyMap();
-
- return
(mdcProps.containsKey(ClassicConstants.REQUEST_REMOTE_HOST_MDC_KEY) ?
(SECTION_PREFIX
- + mdcProps.get(ClassicConstants.REQUEST_REMOTE_HOST_MDC_KEY) +
SECTION_SUFFIX) : StringUtils.EMPTY);
- }
-}
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logback/impl/RootCauseThrowableProxyConverter.java
Sun Jan 25 19:49:30 2015 UTC
+++ /dev/null
@@ -1,18 +0,0 @@
-package gov.hhs.onc.phiz.logging.logback.impl;
-
-import ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter;
-import ch.qos.logback.classic.spi.IThrowableProxy;
-import ch.qos.logback.classic.spi.ThrowableProxy;
-import ch.qos.logback.core.CoreConstants;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.exception.ExceptionUtils;
-
-public class RootCauseThrowableProxyConverter extends
ExtendedThrowableProxyConverter {
- public String throwableProxyToString(IThrowableProxy throwableProxy) {
- String[] rootCauseStackTraceArr =
ExceptionUtils.getRootCauseStackTrace(((ThrowableProxy)
throwableProxy).getThrowable());
- rootCauseStackTraceArr[0] = CoreConstants.CAUSED_BY +
rootCauseStackTraceArr[0];
- rootCauseStackTraceArr[rootCauseStackTraceArr.length - 1] +=
CoreConstants.LINE_SEPARATOR;
-
- return StringUtils.join(rootCauseStackTraceArr,
CoreConstants.LINE_SEPARATOR);
- }
-}
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizMessageContextProperties.java
Sun Jan 25 19:49:30 2015 UTC
+++ /dev/null
@@ -1,8 +0,0 @@
-package
gov.hhs.onc.phiz.web.ws;
-
-public final class PhizMessageContextProperties {
- public final static String FAULT_ROOT_STACK_TRACE_ENABLED
= "faultRootStackTraceEnabled";
-
- private PhizMessageContextProperties() {
- }
-}
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsAddressingUtils.java
Sun Jan 25 19:49:30 2015 UTC
+++ /dev/null
@@ -1,27 +0,0 @@
-package gov.hhs.onc.phiz.web.ws.utils;
-
-import java.io.IOException;
-import javax.xml.stream.XMLStreamException;
-import org.apache.cxf.helpers.DOMUtils;
-import org.apache.cxf.message.Message;
-import org.apache.cxf.message.MessageUtils;
-import org.apache.cxf.staxutils.StaxUtils;
-import org.apache.cxf.ws.addressing.AddressingProperties;
-import org.apache.cxf.ws.addressing.ContextUtils;
-import org.apache.cxf.ws.addressing.Names;
-
-public final class PhizWsAddressingUtils {
- private PhizWsAddressingUtils() {
- }
-
- public static String getAddressingMessageId(Message msg) throws
IOException, XMLStreamException {
- AddressingProperties msgAddrProps = ContextUtils.retrieveMAPs(msg,
false, MessageUtils.isOutbound(msg), false);
-
- if (msgAddrProps != null) {
- return msgAddrProps.getMessageID().getValue();
- }
-
- return
DOMUtils.getContent(StaxUtils.read(PhizWsUtils.getCachedInputStream(msg))
- .getElementsByTagNameNS(Names.WSA_NAMESPACE_NAME,
Names.WSA_MESSAGEID_NAME).item(0));
- }
-}
=======================================
--- /phiz-core/pom.xml Sun Jan 25 19:49:30 2015 UTC
+++ /phiz-core/pom.xml Mon Jan 26 17:11:24 2015 UTC
@@ -57,6 +57,18 @@
<artifactId>logback-core</artifactId>
</dependency>
<dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ </dependency>
+ <dependency>
<groupId>com.github.sebhoss</groupId>
<artifactId>suppress-warnings</artifactId>
</dependency>
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsAddressingActions.java
Wed Dec 3 17:31:58 2014 UTC
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsAddressingActions.java
Mon Jan 26 17:11:24 2015 UTC
@@ -4,11 +4,11 @@
import gov.hhs.onc.phiz.xml.utils.PhizXmlQnameUtils;
public final class PhizWsAddressingActions {
- private final static String IIS_PREFIX = PhizXmlNs.IIS +
PhizXmlQnameUtils.REF_DELIM;
- private final static String IIS_HUB_PREFIX = PhizXmlNs.IIS_HUB +
PhizXmlQnameUtils.REF_DELIM;
+ public final static String IIS_PREFIX = PhizXmlNs.IIS +
PhizXmlQnameUtils.REF_DELIM;
+ public final static String IIS_HUB_PREFIX = PhizXmlNs.IIS_HUB +
PhizXmlQnameUtils.REF_DELIM;
- private final static String SUBMIT_SINGLE_MSG_PREFIX = IIS_PREFIX +
PhizWsNames.PORT_TYPE + PhizXmlQnameUtils.REF_DELIM;
- private final static String SUBMIT_SINGLE_MSG_HUB_PREFIX =
IIS_HUB_PREFIX + PhizWsNames.PORT_TYPE_HUB + PhizXmlQnameUtils.REF_DELIM;
+ public final static String SUBMIT_SINGLE_MSG_PREFIX = IIS_PREFIX +
PhizWsNames.PORT_TYPE + PhizXmlQnameUtils.REF_DELIM;
+ public final static String SUBMIT_SINGLE_MSG_HUB_PREFIX =
IIS_HUB_PREFIX + PhizWsNames.PORT_TYPE_HUB + PhizXmlQnameUtils.REF_DELIM;
public final static String SUBMIT_SINGLE_MSG_REQ =
SUBMIT_SINGLE_MSG_PREFIX + PhizWsNames.SUBMIT_SINGLE_MSG_REQ;
public final static String SUBMIT_SINGLE_MSG_REQ_HUB =
SUBMIT_SINGLE_MSG_HUB_PREFIX + PhizWsNames.SUBMIT_SINGLE_MSG_REQ;
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsNames.java Sun Jan
25 19:49:30 2015 UTC
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsNames.java Mon Jan
26 17:11:24 2015 UTC
@@ -20,6 +20,11 @@
public final static String CXF_FAULT_ROOT_CAUSE_STACK_TRACE
= "rootCause" + StringUtils.capitalize(Fault.STACKTRACE);
+ public final static String USERNAME = "Username";
+ public final static String PASSWORD = "Password";
+ public final static String FACILITY_ID = "FacilityID";
+ public final static String HL7_MSG = "Hl7" + MSG_SUFFIX;
+
public final static String PORT_TYPE = IIS_PREFIX + PORT_TYPE_SUFFIX;
public final static String PORT_TYPE_HUB = IIS_HUB_PREFIX +
PORT_TYPE_SUFFIX;
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsQnames.java Sun Jan
25 19:49:30 2015 UTC
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/ws/PhizWsQnames.java Mon Jan
26 17:11:24 2015 UTC
@@ -8,6 +8,11 @@
public final static QName CXF_FAULT_ROOT_CAUSE_STACK_TRACE = new
QName(Fault.STACKTRACE_NAMESPACE,
PhizWsNames.CXF_FAULT_ROOT_CAUSE_STACK_TRACE,
PhizXmlNs.CXF_FAULT_PREFIX);
+ public final static QName USERNAME = new QName(PhizXmlNs.IIS,
PhizWsNames.USERNAME, PhizXmlNs.IIS_PREFIX);
+ public final static QName PASSWORD = new QName(PhizXmlNs.IIS,
PhizWsNames.PASSWORD, PhizXmlNs.IIS_PREFIX);
+ public final static QName FACILITY_ID = new QName(PhizXmlNs.IIS,
PhizWsNames.FACILITY_ID, PhizXmlNs.IIS_PREFIX);
+ public final static QName HL7_MSG = new QName(PhizXmlNs.IIS,
PhizWsNames.HL7_MSG, PhizXmlNs.IIS_PREFIX);
+
public final static QName PORT_TYPE = new QName(PhizXmlNs.IIS,
PhizWsNames.PORT_TYPE, PhizXmlNs.IIS_PREFIX);
public final static QName PORT_TYPE_HUB = new QName(PhizXmlNs.IIS_HUB,
PhizWsNames.PORT_TYPE_HUB, PhizXmlNs.IIS_HUB_PREFIX);
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/xml/utils/PhizXmlUtils.java
Sun Jan 25 19:49:30 2015 UTC
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/xml/utils/PhizXmlUtils.java
Mon Jan 26 17:11:24 2015 UTC
@@ -1,15 +1,100 @@
package gov.hhs.onc.phiz.xml.utils;
+import gov.hhs.onc.phiz.xml.DomStreamFilter;
import java.io.InputStream;
import java.io.StringWriter;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.function.Supplier;
+import java.util.stream.Stream;
+import javax.annotation.Nullable;
+import javax.xml.namespace.QName;
import javax.xml.stream.StreamFilter;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+import org.apache.commons.collections4.IteratorUtils;
+import org.apache.commons.collections4.iterators.NodeListIterator;
import org.apache.commons.lang3.StringUtils;
+import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.staxutils.PrettyPrintXMLStreamWriter;
import org.apache.cxf.staxutils.StaxUtils;
+import org.apache.cxf.staxutils.W3CDOMStreamReader;
+import org.springframework.util.xml.DomUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
public final class PhizXmlUtils {
+ public static class HideContentDomStreamFilter implements
DomStreamFilter {
+ private String hiddenContentComment;
+ private Set<QName> hideContentElemQnames;
+
+ public HideContentDomStreamFilter(Set<QName>
hideContentElemQnames) {
+ this("[hidden]", hideContentElemQnames);
+ }
+
+ public HideContentDomStreamFilter(String hiddenContentComment,
Set<QName> hideContentElemQnames) {
+ this.hiddenContentComment = hiddenContentComment;
+ this.hideContentElemQnames = hideContentElemQnames;
+ }
+
+ @Override
+ public void filter(W3CDOMStreamReader domStreamReader) {
+ if
(!this.hideContentElemQnames.contains(domStreamReader.getName())) {
+ return;
+ }
+
+ Element hideContentElem = domStreamReader.getCurrentElement();
+
+ Stream.of(IteratorUtils.toArray(new
NodeListIterator(hideContentElem.getChildNodes()),
Node.class)).forEach(hideContentElem::removeChild);
+
+
hideContentElem.appendChild(hideContentElem.getOwnerDocument().createComment(this.hiddenContentComment));
+ }
+ }
+
+ public static class FilteringDomStreamReader extends
W3CDOMStreamReader {
+ private DomStreamFilter[] domStreamFilters;
+
+ public FilteringDomStreamReader(Element elem, DomStreamFilter ...
domStreamFilters) {
+ super(elem);
+
+ this.domStreamFilters = domStreamFilters;
+ }
+
+ public FilteringDomStreamReader(Element elem, String sysId,
DomStreamFilter ... domStreamFilters) {
+ super(elem, sysId);
+
+ this.domStreamFilters = domStreamFilters;
+ }
+
+ public FilteringDomStreamReader(Document doc, DomStreamFilter ...
domStreamFilters) {
+ super(doc);
+
+ this.domStreamFilters = domStreamFilters;
+ }
+
+ public FilteringDomStreamReader(DocumentFragment docFrag,
DomStreamFilter ... domStreamFilters) {
+ super(docFrag);
+
+ this.domStreamFilters = domStreamFilters;
+ }
+
+ @Override
+ public int next() throws XMLStreamException {
+ int currentEvent = super.next();
+
+ if ((currentEvent == START_ELEMENT) &&
(this.getCurrentFrame().getCurrentChild() == null)) {
+ Stream.of(this.domStreamFilters).forEach((domStreamFilter)
-> domStreamFilter.filter(this));
+ }
+
+ return currentEvent;
+ }
+ }
+
public static class IgnoreWhitespaceStreamFilter implements
StreamFilter {
public final static IgnoreWhitespaceStreamFilter INSTANCE = new
IgnoreWhitespaceStreamFilter();
@@ -18,19 +103,115 @@
return !xmlStreamReader.isWhiteSpace();
}
}
+
+ public static class CompositeStreamFilter implements StreamFilter {
+ private StreamFilter[] streamFilters;
+
+ public CompositeStreamFilter(StreamFilter ... streamFilters) {
+ this.streamFilters = streamFilters;
+ }
+
+ @Override
+ public boolean accept(XMLStreamReader xmlStreamReader) {
+ for (StreamFilter streamFilter : this.streamFilters) {
+ if (!streamFilter.accept(xmlStreamReader)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ }
private PhizXmlUtils() {
}
- public static String toFormattedString(InputStream inStream, int
indentSize) throws XMLStreamException {
- StringWriter writer = new StringWriter();
- PrettyPrintXMLStreamWriter xmlStreamWriter = new
PrettyPrintXMLStreamWriter(StaxUtils.createXMLStreamWriter(writer),
indentSize);
+ public static Map<String, Object> mapTreeContent(Supplier<Map<String,
Object>> treeContentMapSupplier, Element ... elems) {
+ return mapTreeContent(treeContentMapSupplier.get(),
treeContentMapSupplier, elems);
+ }
-
StaxUtils.copy(StaxUtils.createFilteredReader(StaxUtils.createXMLStreamReader(inStream),
IgnoreWhitespaceStreamFilter.INSTANCE), xmlStreamWriter);
+ public static Map<String, Object> mapTreeContent(Map<String, Object>
treeContentMap, Supplier<Map<String, Object>> treeContentMapSupplier,
+ Element ... elems) {
+ Stream.of(elems).forEach(
+ (elem) -> {
+ String elemLocalName = elem.getLocalName();
+ List<Element> childElems = DomUtils.getChildElements(elem);
+
+ treeContentMap.put(
+ elemLocalName,
+ (!childElems.isEmpty() ?
mapTreeContent(treeContentMapSupplier.get(), treeContentMapSupplier,
+ childElems.toArray(new
Element[childElems.size()])) : DOMUtils.getContent(elem)));
+ });
+
+ return treeContentMap;
+ }
+
+ public static Document read(InputStream inStream, StreamFilter ...
streamFilters) throws XMLStreamException {
+ XMLStreamReader xmlStreamReader =
StaxUtils.createXMLStreamReader(inStream);
+
+ if (streamFilters.length == 1) {
+ xmlStreamReader =
StaxUtils.createFilteredReader(xmlStreamReader, streamFilters[0]);
+ } else if (streamFilters.length > 1) {
+ xmlStreamReader =
StaxUtils.createFilteredReader(xmlStreamReader, new
CompositeStreamFilter(streamFilters));
+ }
+
+ return StaxUtils.read(xmlStreamReader);
+ }
+
+ public static String toString(Document doc, DomStreamFilter ...
domStreamFilters) throws XMLStreamException {
+ return toString(doc, -1, domStreamFilters);
+ }
+
+ public static String toString(Document doc, int indentSize,
DomStreamFilter ... domStreamFilters) throws XMLStreamException {
+ StringWriter strWriter = new StringWriter();
+ XMLStreamWriter xmlStreamWriter =
StaxUtils.createXMLStreamWriter(strWriter);
+
+ if (indentSize > 0) {
+ xmlStreamWriter = new
PrettyPrintXMLStreamWriter(xmlStreamWriter, indentSize);
+ }
+
+ if (domStreamFilters.length > 0) {
+ StaxUtils.copy(new FilteringDomStreamReader(doc,
domStreamFilters), xmlStreamWriter);
+ } else {
+ StaxUtils.copy(doc, xmlStreamWriter);
+ }
xmlStreamWriter.flush();
xmlStreamWriter.close();
- return StringUtils.trim(writer.toString());
+ return StringUtils.trim(strWriter.toString());
+ }
+
+ @Nullable
+ public static String findElementContent(Element parentElem, QName
elemQname) {
+ return findElementContent(parentElem, elemQname.getNamespaceURI(),
elemQname.getLocalPart());
+ }
+
+ @Nullable
+ public static String findElementContent(Element parentElem, String
elemNsUri, String elemLocalName) {
+ return DOMUtils.getContent(findElement(parentElem, elemNsUri,
elemLocalName));
+ }
+
+ @Nullable
+ public static Element findElement(Element parentElem, QName elemQname)
{
+ return findElement(parentElem, elemQname.getNamespaceURI(),
elemQname.getLocalPart());
+ }
+
+ @Nullable
+ public static Element findElement(Element parentElem, String
elemNsUri, String elemLocalName) {
+ Element childElem;
+
+ for (Node childNode : IteratorUtils.asIterable(new
NodeListIterator(parentElem.getChildNodes()))) {
+ if (childNode.getNodeType() != Node.ELEMENT_NODE) {
+ continue;
+ }
+
+ if ((Objects.equals(((childElem = ((Element)
childNode))).getNamespaceURI(), elemNsUri) &&
childElem.getLocalName().equals(elemLocalName))
+ || ((childElem = findElement(childElem, elemNsUri,
elemLocalName)) != null)) {
+ return childElem;
+ }
+ }
+
+ return null;
}
}
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
Sun Jan 25 19:49:30 2015 UTC
+++
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
Mon Jan 26 17:11:24 2015 UTC
@@ -15,9 +15,9 @@
<!--====================================================================================================
= PROPERTIES: FILE
=====================================================================================================-->
- <if condition='!isDefined("hub.log.file.dir")'>
+ <if condition='!isDefined("phiz.log.file.dir")'>
<then>
- <property name="hub.log.file.dir" value="logs"
scope="context"/>
+ <property name="phiz.log.file.dir" value="logs"
scope="context"/>
</then>
</if>
@@ -40,11 +40,11 @@
<!--====================================================================================================
= CONVERSION RULES
=====================================================================================================-->
- <conversionRule conversionWord="exRoot"
converterClass="gov.hhs.onc.phiz.logging.logback.impl.RootCauseThrowableProxyConverter"/>
+ <conversionRule conversionWord="exRoot"
converterClass="gov.hhs.onc.phiz.logging.impl.RootCauseThrowableProxyConverter"/>
- <conversionRule conversionWord="pColor"
converterClass="gov.hhs.onc.phiz.logging.logback.impl.PriorityColorCompositeConverter"/>
+ <conversionRule conversionWord="pColor"
converterClass="gov.hhs.onc.phiz.logging.impl.PriorityColorCompositeConverter"/>
- <conversionRule conversionWord="xReq"
converterClass="gov.hhs.onc.phiz.logging.logback.impl.RequestMdcConverter"/>
+ <conversionRule conversionWord="xReq"
converterClass="gov.hhs.onc.phiz.logging.impl.RequestMdcConverter"/>
<!--====================================================================================================
= APPENDERS: CONSOLE
@@ -63,10 +63,10 @@
<if condition='isDefined("phiz.log.file.dir") && !new
java.io.File(p("phiz.log.file.dir")).isFile()'>
<then>
<appender name="file" class="ch.qos.logback.core.FileAppender">
-
<file>${phiz.log.file.dir}/${
phiz.log.file.name}${phiz.log.file.name.ext}</file>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss z} [%C:%L %t]%xReq %p
- %m%n%exRoot</pattern>
</encoder>
+
<file>${phiz.log.file.dir}/${
phiz.log.file.name}${phiz.log.file.name.ext}</file>
<prudent>true</prudent>
</appender>
</then>
@@ -75,12 +75,28 @@
</else>
</if>
+
<!--====================================================================================================
+ = APPENDERS: LOGSTASH
+
=====================================================================================================-->
+ <appender name="logstash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+ <encoder class="net.logstash.logback.encoder.LogstashEncoder">
+ <includeCallerInfo>true</includeCallerInfo>
+ <includeContext>false</includeContext>
+ <includeMdc>false</includeMdc>
+ <jsonFactoryDecorator
class="gov.hhs.onc.phiz.logging.impl.PhizJsonFactoryDecorator"/>
+ <throwableConverter
class="gov.hhs.onc.phiz.logging.impl.RootCauseThrowableProxyConverter"/>
+ </encoder>
+ <port>4560</port>
+ <remoteHost>127.0.0.1</remoteHost>
+ </appender>
+
<!--====================================================================================================
= LOGGERS: PROJECT
=====================================================================================================-->
<logger name="gov.hhs.onc.phiz" level="all" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</logger>
<!--====================================================================================================
@@ -89,6 +105,7 @@
<logger name="br.net.woodstock.rockframework" level="info"
additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</logger>
<!--====================================================================================================
@@ -97,6 +114,7 @@
<logger name="com.eviware" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</logger>
<!--====================================================================================================
@@ -105,6 +123,7 @@
<logger name="org.apache" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</logger>
<!--====================================================================================================
@@ -113,16 +132,19 @@
<logger name="org.apache.cxf" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</logger>
<logger name="org.apache.cxf.transport.http" level="info"
additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</logger>
<logger name="org.apache.cxf.transport.https" level="info"
additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</logger>
<!--====================================================================================================
@@ -131,11 +153,13 @@
<logger name="org.hibernate" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</logger>
<logger name="org.hibernate.SQL" level="debug" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</logger>
<!--====================================================================================================
@@ -144,11 +168,13 @@
<logger name="org.springframework" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</logger>
<logger
name="org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker"
level="warn" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</logger>
<!--====================================================================================================
@@ -157,5 +183,6 @@
<root level="warn">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
</root>
</included>
=======================================
--- /phiz-parent/pom.xml Sun Jan 25 19:49:30 2015 UTC
+++ /phiz-parent/pom.xml Mon Jan 26 17:11:24 2015 UTC
@@ -136,6 +136,21 @@
<version>1.1.2</version>
</dependency>
<dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ <version>2.5.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ <version>2.5.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>2.5.0</version>
+ </dependency>
+ <dependency>
<groupId>com.github.sebhoss</groupId>
<artifactId>suppress-warnings</artifactId>
<version>1.0.0</version>
=======================================
--- /phiz-web-core/pom.xml Thu Jan 22 06:01:46 2015 UTC
+++ /phiz-web-core/pom.xml Mon Jan 26 17:11:24 2015 UTC
@@ -31,6 +31,10 @@
</dependency>
<!-- Compile dependencies (inherited) -->
<dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-access</artifactId>
+ </dependency>
+ <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
=======================================
--- /phiz-web-parent/pom.xml Thu Jan 22 06:01:46 2015 UTC
+++ /phiz-web-parent/pom.xml Mon Jan 26 17:11:24 2015 UTC
@@ -85,6 +85,11 @@
<dependencies>
<!-- Compile dependencies -->
<dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-access</artifactId>
+ <version>1.1.2</version>
+ </dependency>
+ <dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
Sun Jan 25 19:49:30 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
Mon Jan 26 17:11:24 2015 UTC
@@ -1,19 +1,46 @@
package gov.hhs.onc.phiz.web.ws.feature.impl;
+import com.fasterxml.jackson.annotation.JsonProperty;
import com.github.sebhoss.warnings.CompilerWarnings;
+import com.sun.xml.ws.encoding.soap.SOAP12Constants;
+import gov.hhs.onc.phiz.logging.MarkerFieldName;
+import gov.hhs.onc.phiz.logging.impl.PhizMarkers;
import gov.hhs.onc.phiz.web.PhizHttpRequestMethods;
+import gov.hhs.onc.phiz.web.logging.HttpEvent;
+import gov.hhs.onc.phiz.web.logging.HttpRequestEvent;
+import gov.hhs.onc.phiz.web.logging.HttpResponseEvent;
+import gov.hhs.onc.phiz.web.logging.impl.HttpRequestEventImpl;
+import gov.hhs.onc.phiz.web.logging.impl.HttpResponseEventImpl;
+import gov.hhs.onc.phiz.web.ws.PhizWsMessageContextProperties;
+import gov.hhs.onc.phiz.web.ws.PhizWsMessageDirection;
import
gov.hhs.onc.phiz.web.ws.interceptor.impl.AbstractPhizSoapInterceptor;
import gov.hhs.onc.phiz.web.ws.utils.PhizWsUtils;
import gov.hhs.onc.phiz.xml.utils.PhizXmlUtils;
+import gov.hhs.onc.phiz.xml.utils.PhizXmlUtils.HideContentDomStreamFilter;
+import
gov.hhs.onc.phiz.xml.utils.PhizXmlUtils.IgnoreWhitespaceStreamFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.BiConsumer;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
+import org.apache.commons.lang3.StringUtils;
import org.apache.cxf.Bus;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.feature.AbstractFeature;
+import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.interceptor.InterceptorProvider;
import org.apache.cxf.interceptor.StaxOutInterceptor;
@@ -25,23 +52,122 @@
import org.apache.cxf.phase.Phase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.util.xml.DomUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
public class PhizLoggingFeature extends AbstractFeature {
- private abstract class AbstractPhizLoggingInterceptor extends
AbstractPhizSoapInterceptor {
- protected AbstractPhizLoggingInterceptor(String phase) {
+ private static abstract class AbstractWsMessageEvent {
+ protected int eventId;
+ protected String endpointAddr;
+ protected Map<String, Object> soapFault;
+ protected Map<String, Object> soapHeaders;
+ protected String payload;
+
+ protected AbstractWsMessageEvent(String endpointAddr, int eventId)
{
+ this.endpointAddr = endpointAddr;
+ this.eventId = eventId;
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s message (eventId=%d, endpointAddr=%s,
soapHeaders=%s, soapFault=%s):\n%s",
+
StringUtils.capitalize(this.getDirection().name().toLowerCase()),
this.eventId, this.endpointAddr, this.soapHeaders, this.soapFault,
+ this.payload);
+ }
+
+ @JsonProperty
+ public String getEndpointAddress() {
+ return this.endpointAddr;
+ }
+
+ @JsonProperty
+ public int getEventId() {
+ return this.eventId;
+ }
+
+ public abstract PhizWsMessageDirection getDirection();
+
+ @JsonProperty
+ public String getPayload() {
+ return this.payload;
+ }
+
+ public void setPayload(String payload) {
+ this.payload = payload;
+ }
+
+ @JsonProperty
+ public Map<String, Object> getSoapFault() {
+ return this.soapFault;
+ }
+
+ public void setSoapFault(Map<String, Object> soapFault) {
+ this.soapFault = soapFault;
+ }
+
+ @JsonProperty
+ public Map<String, Object> getSoapHeaders() {
+ return this.soapHeaders;
+ }
+
+ public void setSoapHeaders(Map<String, Object> soapHeaders) {
+ this.soapHeaders = soapHeaders;
+ }
+ }
+
+ @MarkerFieldName("wsRequest")
+ private static class WsRequestMessageEvent extends
AbstractWsMessageEvent {
+ public WsRequestMessageEvent(String endpointAddr, int eventId) {
+ super(endpointAddr, eventId);
+ }
+
+ @Override
+ public PhizWsMessageDirection getDirection() {
+ return PhizWsMessageDirection.INBOUND;
+ }
+ }
+
+ @MarkerFieldName("wsResponse")
+ private static class WsResponseMessageEvent extends
AbstractWsMessageEvent {
+ public WsResponseMessageEvent(String endpointAddr, int eventId) {
+ super(endpointAddr, eventId);
+ }
+
+ @Override
+ public PhizWsMessageDirection getDirection() {
+ return PhizWsMessageDirection.OUTBOUND;
+ }
+ }
+
+ private abstract class AbstractPhizLoggingInterceptor<T, U extends
HttpEvent<T>, V extends AbstractWsMessageEvent> extends
AbstractPhizSoapInterceptor {
+ protected Function<Message, T> httpEventDescSupplier;
+ protected Function<T, U> httpEventSupplier;
+ protected BiFunction<String, Integer, V> wsMsgEventSupplier;
+
+ protected AbstractPhizLoggingInterceptor(String phase,
Function<Message, T> httpEventDescSupplier, Function<T, U>
httpEventSupplier,
+ BiFunction<String, Integer, V> wsMsgEventSupplier) {
super(phase);
+
+ this.httpEventDescSupplier = httpEventDescSupplier;
+ this.httpEventSupplier = httpEventSupplier;
+ this.wsMsgEventSupplier = wsMsgEventSupplier;
}
@Override
public void handleMessage(SoapMessage msg) throws Fault {
Exchange msgExchange = msg.getExchange();
- if (!msgExchange.containsKey(LOG_MSG_ID_MSG_PROP_NAME)) {
- msgExchange.put(LOG_MSG_ID_MSG_PROP_NAME,
LOG_MSG_ID.incrementAndGet());
+ if (!msgExchange.containsKey(WS_MSG_EVENT_ID_PROP_NAME)) {
+ msgExchange.put(WS_MSG_EVENT_ID_PROP_NAME,
WS_MSG_EVENT_ID.incrementAndGet());
}
try {
- this.handleMessageInternal(msg, ((int)
msgExchange.get(LOG_MSG_ID_MSG_PROP_NAME)), new StringBuilder());
+ this.handleMessageInternal(
+ msg,
+
this.httpEventSupplier.apply(this.httpEventDescSupplier.apply(msg)),
+
this.wsMsgEventSupplier.apply(msg.getExchange().getEndpoint().getEndpointInfo().getAddress(),
+ ((int)
msgExchange.get(WS_MSG_EVENT_ID_PROP_NAME))));
} catch (Fault e) {
throw e;
} catch (Exception e) {
@@ -49,17 +175,74 @@
}
}
- protected abstract void handleMessageInternal(SoapMessage msg, int
logMsgId, StringBuilder msgBuilder) throws Exception;
+ protected abstract void handleMessageInternal(SoapMessage msg, U
httpEvent, V wsMsgEvent) throws Exception;
+
+ protected void populateSoapFault(V wsMsgEvent, Element
msgPayloadDocElem) {
+ Element msgSoapFaultElem =
+
DOMUtils.getFirstChildWithName(DOMUtils.getFirstChildWithName(msgPayloadDocElem,
SOAP12Constants.QNAME_SOAP_BODY),
+ SOAP12Constants.QNAME_SOAP_FAULT);
+
+ if (msgSoapFaultElem != null) {
+ Map<String, Object> msgSoapFaultContentMap = new
TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+
+
Optional.ofNullable(DOMUtils.getFirstChildWithName(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_CODE)).ifPresent(
+ (msgSoapFaultCodeElem) ->
msgSoapFaultContentMap.put(SOAP12Constants.QNAME_FAULT_CODE.getLocalPart(),
+
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultCodeElem,
SOAP12Constants.QNAME_FAULT_VALUE))));
+
+ Optional.ofNullable(
+ DOMUtils.findAllElementsByTagNameNS(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_SUBCODE.getNamespaceURI(),
+
SOAP12Constants.QNAME_FAULT_SUBCODE.getLocalPart())).ifPresent(
+ (msgSoapFaultSubcodeElems) -> {
+ if (!msgSoapFaultSubcodeElems.isEmpty()) {
+ msgSoapFaultContentMap.put(
+
SOAP12Constants.QNAME_FAULT_SUBCODE.getLocalPart(),
+ msgSoapFaultSubcodeElems
+ .stream()
+ .map(
+ (msgSoapFaultSubcodeElem) ->
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultSubcodeElem,
+
SOAP12Constants.QNAME_FAULT_VALUE))).collect(Collectors.toList()));
+ }
+ });
+
+
Optional.ofNullable(DOMUtils.getFirstChildWithName(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_REASON)).ifPresent(
+ (msgSoapFaultReasonElem) ->
msgSoapFaultContentMap.put(SOAP12Constants.QNAME_FAULT_REASON.getLocalPart(),
+
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultReasonElem,
SOAP12Constants.QNAME_FAULT_REASON_TEXT))));
+
+
Optional.ofNullable(DOMUtils.getFirstChildWithName(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_DETAIL)).ifPresent(
+ (msgSoapFaultDetailElem) -> {
+ List<Element> msgSoapFaultDetailChildElems =
DomUtils.getChildElements(msgSoapFaultDetailElem);
+
+ if (!msgSoapFaultDetailChildElems.isEmpty()) {
+ msgSoapFaultContentMap.put(
+
SOAP12Constants.QNAME_FAULT_DETAIL.getLocalPart(),
+ PhizXmlUtils.mapTreeContent(() -> new
TreeMap<>(String.CASE_INSENSITIVE_ORDER),
+
msgSoapFaultDetailChildElems.toArray(new
Element[msgSoapFaultDetailChildElems.size()])));
+ }
+ });
+
+ wsMsgEvent.setSoapFault(msgSoapFaultContentMap);
+ }
+ }
+
+ protected void populateSoapHeaders(V wsMsgEvent, Element
msgPayloadDocElem) {
+ Element[] msgSoapHeaderElems =
+ DOMUtils.findAllElementsByTagNameNS(msgPayloadDocElem,
SOAP12Constants.URI_ENVELOPE,
SOAP12Constants.QNAME_SOAP_HEADER.getLocalPart()).stream()
+ .flatMap((msgSoapHeaderContainerElem) ->
DomUtils.getChildElements(msgSoapHeaderContainerElem).stream()).toArray(Element[]::new);
+
+ if (msgSoapHeaderElems.length > 0) {
+ wsMsgEvent.setSoapHeaders(PhizXmlUtils.mapTreeContent(()
-> new TreeMap<>(String.CASE_INSENSITIVE_ORDER), msgSoapHeaderElems));
+ }
+ }
}
- private class PhizLoggingInInterceptor extends
AbstractPhizLoggingInterceptor {
+ private class PhizLoggingInInterceptor extends
AbstractPhizLoggingInterceptor<HttpServletRequest, HttpRequestEvent,
WsRequestMessageEvent> {
public PhizLoggingInInterceptor() {
- super(Phase.RECEIVE);
+ super(Phase.RECEIVE, PhizWsUtils::getHttpServletRequest,
HttpRequestEventImpl::new, WsRequestMessageEvent::new);
}
@Override
public void handleMessage(SoapMessage msg) throws Fault {
- if (!Objects.equals(msg.get(Message.HTTP_REQUEST_METHOD),
PhizHttpRequestMethods.POST) || msg.containsKey(LOG_MSG_ID_MSG_PROP_NAME)) {
+ if (!Objects.equals(msg.get(Message.HTTP_REQUEST_METHOD),
PhizHttpRequestMethods.POST) || msg.containsKey(WS_MSG_EVENT_ID_PROP_NAME))
{
return;
}
@@ -67,44 +250,49 @@
}
@Override
- protected void handleMessageInternal(SoapMessage msg, int
logMsgId, StringBuilder msgBuilder) throws Exception {
- msg.put(LOG_MSG_ID_MSG_PROP_NAME, logMsgId);
+ protected void handleMessageInternal(SoapMessage msg,
HttpRequestEvent httpEvent, WsRequestMessageEvent wsMsgEvent) throws
Exception {
+ msg.put(WS_MSG_EVENT_ID_PROP_NAME, wsMsgEvent.getEventId());
- String msgReqUrl = ((String) msg.get(Message.REQUEST_URL));
- msg.getExchange().put(Message.REQUEST_URL, msgReqUrl);
+ try (InputStream msgPayloadInStream =
PhizWsUtils.getCachedInputStream(msg)) {
+ Document msgPayloadDoc =
PhizXmlUtils.read(msgPayloadInStream,
IgnoreWhitespaceStreamFilter.INSTANCE);
+ Element msgPayloadDocElem =
msgPayloadDoc.getDocumentElement();
- msgBuilder.append("Inbound message (logId=");
- msgBuilder.append(logMsgId);
- msgBuilder.append(", addr=");
- msgBuilder.append(msgReqUrl);
- msgBuilder.append(", headers=");
- msgBuilder.append(msg.get(Message.PROTOCOL_HEADERS));
- msgBuilder.append("):\n");
+ this.populateSoapHeaders(wsMsgEvent, msgPayloadDocElem);
+ this.populateSoapFault(wsMsgEvent, msgPayloadDocElem);
- PhizLoggingFeature.this.logMessage(msgBuilder,
PhizWsUtils.getCachedInputStream(msg));
+ PhizLoggingFeature.this.logMessage(msg, httpEvent,
wsMsgEvent, msgPayloadDoc);
+ }
}
}
private class PhizLoggingOutCallback implements
CachedOutputStreamCallback {
private SoapMessage msg;
- private StringBuilder msgBuilder;
+ private HttpResponseEvent httpEvent;
+ private WsResponseMessageEvent wsMsgEvent;
+ private BiConsumer<WsResponseMessageEvent, Element>
populateSoapHeadersConsumer;
+ private BiConsumer<WsResponseMessageEvent, Element>
populateSoapFaultsConsumer;
- public PhizLoggingOutCallback(SoapMessage msg, StringBuilder
msgBuilder) {
+ public PhizLoggingOutCallback(SoapMessage msg, HttpResponseEvent
httpEvent, WsResponseMessageEvent wsMsgEvent,
+ BiConsumer<WsResponseMessageEvent, Element>
populateSoapHeadersConsumer, BiConsumer<WsResponseMessageEvent, Element>
populateSoapFaultsConsumer) {
this.msg = msg;
- this.msgBuilder = msgBuilder;
+ this.httpEvent = httpEvent;
+ this.wsMsgEvent = wsMsgEvent;
+ this.populateSoapHeadersConsumer = populateSoapHeadersConsumer;
+ this.populateSoapFaultsConsumer = populateSoapFaultsConsumer;
}
@Override
public void onClose(CachedOutputStream msgPayloadOutStream) {
- this.msgBuilder.append(", headers=");
- this.msgBuilder.append(this.msg.get(Message.PROTOCOL_HEADERS));
- this.msgBuilder.append(", status=");
- this.msgBuilder.append(this.msg.get(Message.RESPONSE_CODE));
- this.msgBuilder.append("):\n");
-
try (InputStream msgPayloadInStream =
msgPayloadOutStream.getInputStream()) {
- PhizLoggingFeature.this.logMessage(this.msgBuilder,
msgPayloadInStream);
- } catch (IOException | XMLStreamException ignored) {
+ Document msgPayloadDoc =
PhizXmlUtils.read(msgPayloadInStream,
IgnoreWhitespaceStreamFilter.INSTANCE);
+ Element msgPayloadDocElem =
msgPayloadDoc.getDocumentElement();
+
+ this.populateSoapHeadersConsumer.accept(this.wsMsgEvent,
msgPayloadDocElem);
+ this.populateSoapFaultsConsumer.accept(this.wsMsgEvent,
msgPayloadDocElem);
+
+ PhizLoggingFeature.this.logMessage(this.msg,
this.httpEvent, this.wsMsgEvent, msgPayloadDoc);
+ } catch (IOException | XMLStreamException e) {
+ throw new Fault(e);
}
}
@@ -113,29 +301,24 @@
}
}
- private class PhizLoggingOutInterceptor extends
AbstractPhizLoggingInterceptor {
+ private class PhizLoggingOutInterceptor extends
AbstractPhizLoggingInterceptor<HttpServletResponse, HttpResponseEvent,
WsResponseMessageEvent> {
@SuppressWarnings({ CompilerWarnings.UNCHECKED })
public PhizLoggingOutInterceptor() {
- super(Phase.PRE_STREAM);
+ super(Phase.PRE_STREAM, PhizWsUtils::getHttpServletResponse,
HttpResponseEventImpl::new, WsResponseMessageEvent::new);
this.setBeforeClasses(StaxOutInterceptor.class);
}
@Override
- protected void handleMessageInternal(SoapMessage msg, int
logMsgId, StringBuilder msgBuilder) throws Exception {
- msgBuilder.append("Outbound message (logId=");
- msgBuilder.append(logMsgId);
- msgBuilder.append(", addr=");
- msgBuilder.append(msg.getExchange().get(Message.REQUEST_URL));
-
+ protected void handleMessageInternal(SoapMessage msg,
HttpResponseEvent httpEvent, WsResponseMessageEvent wsMsgEvent) throws
Exception {
CacheAndWriteOutputStream msgPayloadOutStream = new
CacheAndWriteOutputStream(msg.getContent(OutputStream.class));
- msgPayloadOutStream.registerCallback(new
PhizLoggingOutCallback(msg, msgBuilder));
+ msgPayloadOutStream.registerCallback(new
PhizLoggingOutCallback(msg, httpEvent, wsMsgEvent,
this::populateSoapHeaders, this::populateSoapFault));
msg.setContent(OutputStream.class, msgPayloadOutStream);
}
}
- private final static String LOG_MSG_ID_MSG_PROP_NAME = "
log.msg.id";
- private final static AtomicInteger LOG_MSG_ID = new AtomicInteger();
+ private final static String WS_MSG_EVENT_ID_PROP_NAME = "wsMsgEventId";
+ private final static AtomicInteger WS_MSG_EVENT_ID = new
AtomicInteger();
private final static Logger LOGGER =
LoggerFactory.getLogger(PhizLoggingFeature.class);
@@ -152,10 +335,15 @@
interceptorProv.getOutFaultInterceptors().add(loggingOutInterceptor);
}
- private void logMessage(StringBuilder msgBuilder, InputStream
msgPayloadInStream) throws XMLStreamException {
-
msgBuilder.append(PhizXmlUtils.toFormattedString(msgPayloadInStream,
this.indentSize));
+ @SuppressWarnings({ CompilerWarnings.UNCHECKED })
+ private void logMessage(SoapMessage msg, HttpEvent<?> httpEvent,
AbstractWsMessageEvent wsMsgEvent, Document msgPayloadDoc) throws
XMLStreamException {
+
wsMsgEvent.setPayload((msg.getContextualPropertyKeys().contains(PhizWsMessageContextProperties.LOG_MSG_PAYLOAD_HIDE_CONTENT_ELEM_QNAMES) ?
PhizXmlUtils
+ .toString(msgPayloadDoc, this.indentSize,
+ new HideContentDomStreamFilter(
+ ((Set<QName>)
msg.getContextualProperty(PhizWsMessageContextProperties.LOG_MSG_PAYLOAD_HIDE_CONTENT_ELEM_QNAMES)))) :
PhizXmlUtils
+ .toString(msgPayloadDoc, this.indentSize)));
- LOGGER.info(msgBuilder.toString());
+ LOGGER.info(PhizMarkers.append(httpEvent, wsMsgEvent),
wsMsgEvent.toString());
}
public int getIndentSize() {
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/FaultRootCauseStackTraceInterceptor.java
Sun Jan 25 19:49:30 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/FaultRootCauseStackTraceInterceptor.java
Mon Jan 26 17:11:24 2015 UTC
@@ -1,7 +1,7 @@
package gov.hhs.onc.phiz.web.ws.interceptor.impl;
import com.github.sebhoss.warnings.CompilerWarnings;
-import gov.hhs.onc.phiz.web.ws.PhizMessageContextProperties;
+import gov.hhs.onc.phiz.web.ws.PhizWsMessageContextProperties;
import gov.hhs.onc.phiz.ws.PhizWsQnames;
import gov.hhs.onc.phiz.xml.utils.PhizXmlQnameUtils;
import org.apache.commons.lang3.StringUtils;
@@ -30,7 +30,7 @@
Fault fault = ((Fault) msg.getContent(Exception.class));
Throwable faultCause;
- if (!MessageUtils.getContextualBoolean(msg,
PhizMessageContextProperties.FAULT_ROOT_STACK_TRACE_ENABLED, false)
+ if (!MessageUtils.getContextualBoolean(msg,
PhizWsMessageContextProperties.FAULT_ROOT_STACK_TRACE_ENABLED, false)
|| ((faultCause = fault.getCause()) == null)) {
return;
}
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/IisHubDevActionInterceptor.java
Sun Jan 25 19:49:30 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/IisHubDevActionInterceptor.java
Mon Jan 26 17:11:24 2015 UTC
@@ -20,6 +20,7 @@
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.logging.FaultListener;
+import org.apache.cxf.logging.NoOpFaultListener;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
import org.apache.cxf.transport.http.Headers;
@@ -28,14 +29,7 @@
@Component("interceptorIisHubDevAction")
public class IisHubDevActionInterceptor extends
AbstractPhizSoapInterceptor {
- private static class IisHubDevFaultListener implements FaultListener {
- public final static IisHubDevFaultListener INSTANCE = new
IisHubDevFaultListener();
-
- @Override
- public boolean faultOccurred(Exception exception, String desc,
Message msg) {
- return false;
- }
- }
+ private final static FaultListener NO_OP_FAULT_LISTENER_INSTANCE = new
NoOpFaultListener();
@Value("${
phiz.dest.iis.dev.id}")
private String iisDevDestId;
@@ -88,7 +82,7 @@
}
if (devActionValueFaultCause != null) {
-
msg.setContextualProperty(FaultListener.class.getName(),
IisHubDevFaultListener.INSTANCE);
+
msg.setContextualProperty(FaultListener.class.getName(),
NO_OP_FAULT_LISTENER_INSTANCE);
throw SoapFault.createFault(new
Fault(devActionValueFaultCause), msg.getVersion());
}
=======================================
---
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws.xml
Sun Jan 25 19:49:30 2015 UTC
+++
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws.xml
Mon Jan 26 17:11:24 2015 UTC
@@ -42,6 +42,8 @@
<beans:bean id="bus" class="org.apache.cxf.Bus" abstract="true"
destroy-method="shutdown">
<beans:property name="features">
<beans:list>
+ <beans:bean
class="gov.hhs.onc.phiz.web.ws.feature.impl.PhizLoggingFeature"
parent="feature"
+ p:indentSize="4"/>
<beans:bean
class="org.apache.cxf.feature.validation.SchemaValidationFeature"
parent="feature">
<beans:constructor-arg name="provider">
<beans:bean parent="schemaValidationTypeProvConst"
@@ -120,15 +122,9 @@
=====================================================================================================-->
<!--suppress DuplicatedBeanNamesInspection -->
<beans:bean id="busPhiz" parent="busSpring" primary="true">
- <beans:property name="features">
- <beans:list merge="true">
- <beans:bean
class="gov.hhs.onc.phiz.web.ws.feature.impl.PhizLoggingFeature"
parent="feature"
- p:indentSize="4"/>
- </beans:list>
- </beans:property>
<beans:property name="properties">
<beans:map>
- <beans:entry key="#{
T(gov.hhs.onc.phiz.web.ws.PhizMessageContextProperties).FAULT_ROOT_STACK_TRACE_ENABLED
}" value="true"/>
+ <beans:entry key="#{
T(gov.hhs.onc.phiz.web.ws.PhizWsMessageContextProperties).FAULT_ROOT_STACK_TRACE_ENABLED
}" value="true"/>
</beans:map>
</beans:property>
</beans:bean>
@@ -142,6 +138,18 @@
= BUS
=====================================================================================================-->
<!--suppress DuplicatedBeanNamesInspection -->
- <beans:bean id="busPhiz" parent="busSpring" primary="true"/>
+ <beans:bean id="busPhiz" parent="busSpring" primary="true">
+ <beans:property name="properties">
+ <beans:map>
+ <beans:entry key="#{
T(gov.hhs.onc.phiz.web.ws.PhizWsMessageContextProperties).LOG_MSG_PAYLOAD_HIDE_CONTENT_ELEM_QNAMES
}">
+ <beans:set>
+ <beans:value>#{
T(gov.hhs.onc.phiz.ws.PhizWsQnames).USERNAME }</beans:value>
+ <beans:value>#{
T(gov.hhs.onc.phiz.ws.PhizWsQnames).PASSWORD }</beans:value>
+ <beans:value>#{
T(gov.hhs.onc.phiz.ws.PhizWsQnames).HL7_MSG }</beans:value>
+ </beans:set>
+ </beans:entry>
+ </beans:map>
+ </beans:property>
+ </beans:bean>
</beans:beans>
</beans:beans>
==============================================================================
Revision: b786abb235b6
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Thu Jan 29 00:44:10 2015 UTC
Log: - Further supports PHIZ-28.
- Supports PHIZ-30.
- Implemented initial Dropwizard Metrics based metrics reporting (to
Logstash).
https://code.google.com/p/phiz/source/detail?r=b786abb235b6
Added:
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logstash/MarkerObjectFieldName.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logstash/impl/PhizLogstashJsonFactoryDecorator.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logstash/impl/PhizLogstashMarkers.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/metrics/impl/LogstashReporter.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/metrics/impl/PhizMetricRegistryFactoryBean.java
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-logstash.xml
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-metrics.xml
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging.xml
Deleted:
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/MarkerFieldName.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/PhizJsonFactoryDecorator.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/PhizMarkers.java
Modified:
/phiz-core/pom.xml
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/RootCauseThrowableProxyConverter.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/utils/PhizStringUtils.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/xml/utils/PhizXmlUtils.java
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
/phiz-core/src/main/resources/META-INF/phiz/phiz.properties
/phiz-core/src/main/resources/META-INF/spring.factories
/phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties
/phiz-parent/pom.xml
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpRequestEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpResponseEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/AbstractHttpEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpResponseEventImpl.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsUtils.java
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logstash/MarkerObjectFieldName.java
Thu Jan 29 00:44:10 2015 UTC
@@ -0,0 +1,17 @@
+package gov.hhs.onc.phiz.logging.logstash;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import org.apache.commons.lang3.StringUtils;
+
+@Documented
+@Inherited
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.TYPE })
+public @interface MarkerObjectFieldName {
+ String value() default StringUtils.EMPTY;
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logstash/impl/PhizLogstashJsonFactoryDecorator.java
Thu Jan 29 00:44:10 2015 UTC
@@ -0,0 +1,136 @@
+package gov.hhs.onc.phiz.logging.logstash.impl;
+
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.json.HealthCheckModule;
+import com.codahale.metrics.json.MetricsModule;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.Version;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.MapperFeature;
+import com.fasterxml.jackson.databind.MappingJsonFactory;
+import com.fasterxml.jackson.databind.Module;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.PropertyNamingStrategy;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.module.SimpleSerializers;
+import com.fasterxml.jackson.databind.ser.std.StdSerializer;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+import net.logstash.logback.decorate.JsonFactoryDecorator;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+@Component("jsonFactoryDecoratorLogstash")
+public class PhizLogstashJsonFactoryDecorator implements
JsonFactoryDecorator {
+ private static class PhizMetricsModule extends Module {
+ public final static String MODULE_NAME = "phiz-metrics";
+ public final static Version MODULE_VERSION = new Version(1, 0, 0,
StringUtils.EMPTY, "gov.hhs.onc.phiz", MODULE_NAME);
+
+ public final static PhizMetricsModule INSTANCE = new
PhizMetricsModule();
+
+ @Override
+ public void setupModule(SetupContext setupContext) {
+ setupContext.addSerializers(new
SimpleSerializers(Arrays.<JsonSerializer<?>>
asList(PhizMetricRegistrySerializer.INSTANCE)));
+ }
+
+ @Override
+ public String getModuleName() {
+ return MODULE_NAME;
+ }
+
+ @Override
+ public Version version() {
+ return MODULE_VERSION;
+ }
+ }
+
+ private static class PhizMetricRegistrySerializer extends
StdSerializer<MetricRegistry> {
+ public final static PhizMetricRegistrySerializer INSTANCE = new
PhizMetricRegistrySerializer();
+
+ private final static String METRIC_KEY_DELIM = ".";
+
+ private final static String VERSION_FIELD_NAME = "version";
+ private final static String GAUGES_FIELD_NAME = "gauges";
+ private final static String COUNTERS_FIELD_NAME = "counters";
+ private final static String HISTOGRAMS_FIELD_NAME = "histograms";
+ private final static String METERS_FIELD_NAME = "meters";
+ private final static String TIMERS_FIELD_NAME = "timers";
+
+ private final static long serialVersionUID = 0L;
+
+ public PhizMetricRegistrySerializer() {
+ super(MetricRegistry.class);
+ }
+
+ @Override
+ public void serialize(MetricRegistry metricRegistry, JsonGenerator
jsonGen, SerializerProvider serializerProv) throws IOException {
+ jsonGen.writeStartObject();
+ jsonGen.writeStringField(VERSION_FIELD_NAME,
PhizMetricsModule.MODULE_VERSION.toString());
+
+ serializeMetrics(jsonGen, GAUGES_FIELD_NAME,
metricRegistry.getGauges());
+ serializeMetrics(jsonGen, COUNTERS_FIELD_NAME,
metricRegistry.getCounters());
+ serializeMetrics(jsonGen, HISTOGRAMS_FIELD_NAME,
metricRegistry.getHistograms());
+ serializeMetrics(jsonGen, METERS_FIELD_NAME,
metricRegistry.getMeters());
+ serializeMetrics(jsonGen, TIMERS_FIELD_NAME,
metricRegistry.getTimers());
+
+ jsonGen.writeEndObject();
+ }
+
+ private static void serializeMetrics(JsonGenerator jsonGen, String
metricFieldName, Map<String, ?> metricMap) throws IOException {
+
jsonGen.writeObjectFieldStart(PhizLogstashMarkers.buildFieldName(metricFieldName));
+
+ if (!metricMap.isEmpty()) {
+ Map<String, List<String>> metricKeyMap =
+
metricMap.keySet().stream().sorted(String.CASE_INSENSITIVE_ORDER)
+ .collect(Collectors.groupingBy((metricKey) ->
StringUtils.split(metricKey, METRIC_KEY_DELIM, 2)[0]));
+
+ List<String> metricKeys;
+ String metricFieldKey;
+ Object metricFieldValue;
+
+ for (String metricKeyPrefix : metricKeyMap.keySet()) {
+ if (((metricKeys =
metricKeyMap.get(metricKeyPrefix)).size() == 1)
+ && !StringUtils.contains((metricFieldKey =
metricKeys.get(0)), METRIC_KEY_DELIM)) {
+
jsonGen.writeObjectField(PhizLogstashMarkers.buildFieldName(metricKeyPrefix),
+ (((metricFieldValue =
metricMap.get(metricFieldKey)) instanceof Gauge<?>)
+ ? ((Gauge<?>)
metricFieldValue).getValue() : metricFieldValue));
+ } else {
+ serializeMetrics(
+ jsonGen,
+ metricKeyPrefix,
+ metricKeys
+ .stream()
+ .sorted(String.CASE_INSENSITIVE_ORDER)
+ .collect(
+ Collectors.toMap((String metricKey) ->
StringUtils.removeStartIgnoreCase(metricKey, (metricKeyPrefix +
METRIC_KEY_DELIM)),
+ metricMap::get)));
+ }
+ }
+ }
+
+ jsonGen.writeEndObject();
+ }
+ }
+
+ @Override
+ public MappingJsonFactory decorate(MappingJsonFactory jsonFactory) {
+ ObjectMapper objMapper = jsonFactory.getCodec();
+
+ objMapper.disable(MapperFeature.AUTO_DETECT_CREATORS);
+ objMapper.disable(MapperFeature.AUTO_DETECT_FIELDS);
+ objMapper.disable(MapperFeature.AUTO_DETECT_GETTERS);
+ objMapper.disable(MapperFeature.AUTO_DETECT_IS_GETTERS);
+ objMapper.disable(MapperFeature.AUTO_DETECT_SETTERS);
+
+
objMapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
+
+ objMapper.registerModules(new MetricsModule(TimeUnit.SECONDS,
TimeUnit.SECONDS, true), new HealthCheckModule(),
PhizMetricsModule.INSTANCE);
+
+ return jsonFactory;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logstash/impl/PhizLogstashMarkers.java
Thu Jan 29 00:44:10 2015 UTC
@@ -0,0 +1,52 @@
+package gov.hhs.onc.phiz.logging.logstash.impl;
+
+import gov.hhs.onc.phiz.logging.logstash.MarkerObjectFieldName;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import net.logstash.logback.marker.Markers;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+import org.springframework.core.annotation.AnnotationUtils;
+
+public final class PhizLogstashMarkers {
+ public final static String MARKER_FIELD_NAME_DELIM = "_";
+
+ private PhizLogstashMarkers() {
+ }
+
+ public static Marker append(Object ... markerObjs) {
+ Marker marker = null, nextMarker;
+
+ for (Object markerObj : markerObjs) {
+ if (markerObj instanceof Marker) {
+ nextMarker = ((Marker) markerObj);
+ } else if (markerObj instanceof String) {
+ nextMarker = MarkerFactory.getMarker(((String) markerObj));
+ } else {
+ nextMarker = Markers.append(buildFieldName(markerObj),
markerObj);
+ }
+
+ if (marker != null) {
+ marker.add(nextMarker);
+ } else {
+ marker = nextMarker;
+ }
+ }
+
+ return marker;
+ }
+
+ public static String buildFieldName(Object markerObj) {
+ Class<?> markerObjClass = markerObj.getClass();
+ MarkerObjectFieldName markerObjFieldNameAnno =
AnnotationUtils.findAnnotation(markerObjClass, MarkerObjectFieldName.class);
+ String markerFieldName = ((markerObjFieldNameAnno != null) ?
markerObjFieldNameAnno.value() : null);
+
+ return buildFieldName((!StringUtils.isEmpty(markerFieldName) ?
markerFieldName : markerObjClass.getSimpleName()));
+ }
+
+ public static String buildFieldName(String markerFieldName) {
+ // noinspection ConstantConditions
+ return
StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(markerFieldName),
MARKER_FIELD_NAME_DELIM).toLowerCase();
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/metrics/impl/LogstashReporter.java
Thu Jan 29 00:44:10 2015 UTC
@@ -0,0 +1,93 @@
+package gov.hhs.onc.phiz.logging.metrics.impl;
+
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Histogram;
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.MetricFilter;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.ScheduledReporter;
+import com.codahale.metrics.Timer;
+import com.github.sebhoss.warnings.CompilerWarnings;
+import gov.hhs.onc.phiz.logging.logstash.impl.PhizLogstashMarkers;
+import java.util.SortedMap;
+import java.util.concurrent.TimeUnit;
+import net.logstash.logback.marker.Markers;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.SmartLifecycle;
+
+public class LogstashReporter extends ScheduledReporter implements
SmartLifecycle {
+ private final static String METRICS_MARKER_NAME = "metrics";
+ private final static String METRICS_MARKER_FIELD_NAME = "metrics";
+
+ private final static Logger LOGGER =
LoggerFactory.getLogger(LogstashReporter.class);
+
+ private MetricRegistry metricRegistry;
+ private long period;
+ private boolean running;
+
+ public LogstashReporter(MetricRegistry metricRegistry) {
+ super(metricRegistry, "reporterLogstash", MetricFilter.ALL,
TimeUnit.SECONDS, TimeUnit.SECONDS);
+
+ this.metricRegistry = metricRegistry;
+ }
+
+ @Override
+ @SuppressWarnings({ CompilerWarnings.RAWTYPES })
+ public void report(SortedMap<String, Gauge> gauges, SortedMap<String,
Counter> counters, SortedMap<String, Histogram> histograms,
+ SortedMap<String, Meter> meters, SortedMap<String, Timer> timers) {
+ LOGGER.info(
+ PhizLogstashMarkers.append(METRICS_MARKER_NAME,
Markers.append(METRICS_MARKER_FIELD_NAME, this.metricRegistry)),
+ String.format("Metrics (numGauges=%d, numCounters=%d,
numHistograms=%d, numMeters=%d, numTimers=%d).", gauges.size(),
counters.size(),
+ histograms.size(), meters.size(), timers.size()));
+ }
+
+ @Override
+ public void stop(Runnable callback) {
+ this.stop();
+
+ callback.run();
+ }
+
+ @Override
+ public void stop() {
+ if (this.isRunning()) {
+ super.stop();
+
+ this.running = false;
+ }
+ }
+
+ @Override
+ public void start() {
+ if (!this.isRunning()) {
+ this.start(this.period, TimeUnit.SECONDS);
+
+ this.running = true;
+ }
+ }
+
+ @Override
+ public boolean isRunning() {
+ return this.running;
+ }
+
+ @Override
+ public boolean isAutoStartup() {
+ return true;
+ }
+
+ @Override
+ public int getPhase() {
+ return 0;
+ }
+
+ public long getPeriod() {
+ return this.period;
+ }
+
+ public void setPeriod(long period) {
+ this.period = period;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/metrics/impl/PhizMetricRegistryFactoryBean.java
Thu Jan 29 00:44:10 2015 UTC
@@ -0,0 +1,23 @@
+package gov.hhs.onc.phiz.logging.metrics.impl;
+
+import com.codahale.metrics.Metric;
+import com.codahale.metrics.MetricRegistry;
+import gov.hhs.onc.phiz.beans.factory.impl.AbstractPhizFactoryBean;
+import java.util.Map;
+
+public class PhizMetricRegistryFactoryBean extends
AbstractPhizFactoryBean<MetricRegistry> {
+ private MetricRegistry metricRegistry = new MetricRegistry();
+
+ public PhizMetricRegistryFactoryBean() {
+ super(MetricRegistry.class);
+ }
+
+ @Override
+ public MetricRegistry getObject() throws Exception {
+ return this.metricRegistry;
+ }
+
+ public void setMetrics(Map<String, Metric> metrics) {
+ this.metricRegistry.registerAll(() -> metrics);
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-logstash.xml
Thu Jan 29 00:44:10 2015 UTC
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans:beans
+ xmlns:aop="
http://www.springframework.org/schema/aop"
+ xmlns:beans="
http://www.springframework.org/schema/beans"
+ xmlns:c="
http://www.springframework.org/schema/c"
+ xmlns:context="
http://www.springframework.org/schema/context"
+ xmlns:lang="
http://www.springframework.org/schema/lang"
+ xmlns:p="
http://www.springframework.org/schema/p"
+ xmlns:task="
http://www.springframework.org/schema/task"
+ xmlns:util="
http://www.springframework.org/schema/util"
+ xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
+
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
+
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
+
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang.xsd
+
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
+
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
+
+
<!--====================================================================================================
+ = ENCODERS
+
=====================================================================================================-->
+ <beans:bean id="encoderLogstash"
class="net.logstash.logback.encoder.LogstashEncoder" parent="encoder"
abstract="true"
+ p:includeContext="false"
+ p:includeMdc="false"
+ p:jsonFactoryDecorator-ref="jsonFactoryDecoratorLogstash"
+ p:throwableConverter-ref="throwableProxyConvRootCause"/>
+
+ <beans:bean id="encoderLogstashTcp"
class="net.logstash.logback.encoder.LogstashTcpEncoder"
parent="encoderLogstash" abstract="true"
+ p:encoding="#{ charsetUtf8.name() }"
+ p:newLine="#{ T(org.apache.commons.lang3.StringUtils).LF }"/>
+
+
<!--====================================================================================================
+ = APPENDERS
+
=====================================================================================================-->
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean id="appenderLogstashTcp"
class="net.logstash.logback.appender.LogstashTcpSocketAppender"
parent="appender" init-method="start"
+ destroy-method="stop"
+ p:includeCallerData="true"
+ p:name="logstash"
+ p:port="${phiz.logging.logstash.port}"
+ p:remoteHost="${phiz.logging.logstash.host}">
+ <beans:property name="encoder">
+ <beans:bean parent="encoderLogstashTcp" init-method="start"
destroy-method="stop"/>
+ </beans:property>
+ </beans:bean>
+</beans:beans>
=======================================
--- /dev/null
+++
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-metrics.xml
Thu Jan 29 00:44:10 2015 UTC
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans:beans
+ xmlns:aop="
http://www.springframework.org/schema/aop"
+ xmlns:beans="
http://www.springframework.org/schema/beans"
+ xmlns:c="
http://www.springframework.org/schema/c"
+ xmlns:context="
http://www.springframework.org/schema/context"
+ xmlns:lang="
http://www.springframework.org/schema/lang"
+ xmlns:p="
http://www.springframework.org/schema/p"
+ xmlns:task="
http://www.springframework.org/schema/task"
+ xmlns:util="
http://www.springframework.org/schema/util"
+ xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
+
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
+
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
+
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang.xsd
+
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
+
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
+
+
<!--====================================================================================================
+ = METRICS
+
=====================================================================================================-->
+ <beans:bean id="metric" class="com.codahale.metrics.Metric"
abstract="true"/>
+
+ <beans:bean id="metricSet" class="com.codahale.metrics.MetricSet"
parent="metric" abstract="true"/>
+
+
<!--====================================================================================================
+ = GAUGES
+
=====================================================================================================-->
+ <beans:bean id="gauge" class="com.codahale.metrics.Gauge"
parent="metric" abstract="true"/>
+
+ <beans:bean id="gaugeSet" parent="metricSet" abstract="true"/>
+
+
<!--====================================================================================================
+ = METRIC REGISTRIES
+
=====================================================================================================-->
+ <beans:bean id="metricRegistry"
class="com.codahale.metrics.MetricRegistry" abstract="true"/>
+
+ <beans:bean id="metricRegistryBase"
class="gov.hhs.onc.phiz.logging.metrics.impl.PhizMetricRegistryFactoryBean"
parent="metricRegistry">
+ <beans:property name="metrics">
+ <beans:map>
+ <beans:entry key="bufferPool">
+ <beans:bean
class="com.codahale.metrics.jvm.BufferPoolMetricSet" parent="metricSet"
+ c:mBeanServer="#{
T(java.lang.management.ManagementFactory).platformMBeanServer }"/>
+ </beans:entry>
+ <beans:entry key="cachedThreadStates">
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean
class="com.codahale.metrics.jvm.CachedThreadStatesGaugeSet"
parent="gaugeSet"
+
c:interval="${phiz.logging.metrics.metric.cached.thread.states.interval}"
+ c:unit="#{
T(java.util.concurrent.TimeUnit).SECONDS }"/>
+ </beans:entry>
+ <beans:entry key="classLoading">
+ <beans:bean
class="com.codahale.metrics.jvm.ClassLoadingGaugeSet" parent="gaugeSet"/>
+ </beans:entry>
+ <beans:entry key="fileDescRatio">
+ <beans:bean
class="com.codahale.metrics.jvm.FileDescriptorRatioGauge" parent="gauge"/>
+ </beans:entry>
+ <beans:entry key="garbageColl">
+ <beans:bean
class="com.codahale.metrics.jvm.GarbageCollectorMetricSet"
parent="metricSet"/>
+ </beans:entry>
+ <beans:entry key="jvmAttr">
+ <beans:bean
class="com.codahale.metrics.JvmAttributeGaugeSet" parent="metricSet"/>
+ </beans:entry>
+ <beans:entry key="memUsage">
+ <beans:bean
class="com.codahale.metrics.jvm.MemoryUsageGaugeSet" parent="gaugeSet"/>
+ </beans:entry>
+ <beans:entry key="threadStates">
+ <beans:bean
class="com.codahale.metrics.jvm.ThreadStatesGaugeSet" parent="gaugeSet"/>
+ </beans:entry>
+ </beans:map>
+ </beans:property>
+ </beans:bean>
+
+
<!--====================================================================================================
+ = REPORTERS
+
=====================================================================================================-->
+ <beans:bean id="reporter" class="com.codahale.metrics.Reporter"
abstract="true"/>
+
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean id="reporterLogstash"
class="gov.hhs.onc.phiz.logging.metrics.impl.LogstashReporter"
parent="reporter" depends-on="appenderLogstashTcp"
+ c:metricRegistry-ref="metricRegistryBase"
+ p:period="${phiz.logging.metrics.reporter.logstash.interval}"/>
+</beans:beans>
=======================================
--- /dev/null
+++
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging.xml
Thu Jan 29 00:44:10 2015 UTC
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans:beans
+ xmlns:aop="
http://www.springframework.org/schema/aop"
+ xmlns:beans="
http://www.springframework.org/schema/beans"
+ xmlns:c="
http://www.springframework.org/schema/c"
+ xmlns:context="
http://www.springframework.org/schema/context"
+ xmlns:lang="
http://www.springframework.org/schema/lang"
+ xmlns:p="
http://www.springframework.org/schema/p"
+ xmlns:task="
http://www.springframework.org/schema/task"
+ xmlns:util="
http://www.springframework.org/schema/util"
+ xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
+
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
+
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
+
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang.xsd
+
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
+
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
+
+
<!--====================================================================================================
+ = ENCODERS
+
=====================================================================================================-->
+ <beans:bean id="contextAware"
class="ch.qos.logback.core.spi.ContextAware" abstract="true"
+ p:context="#{
T(ch.qos.logback.classic.util.ContextSelectorStaticBinder).singleton.contextSelector.loggerContext
}"/>
+
+
<!--====================================================================================================
+ = ENCODERS
+
=====================================================================================================-->
+ <beans:bean id="encoder" class="ch.qos.logback.core.encoder.Encoder"
parent="contextAware" abstract="true"/>
+
+
<!--====================================================================================================
+ = APPENDERS
+
=====================================================================================================-->
+ <beans:bean id="appender" class="ch.qos.logback.core.Appender"
parent="contextAware" abstract="true"/>
+</beans:beans>
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/logging/MarkerFieldName.java
Mon Jan 26 17:11:24 2015 UTC
+++ /dev/null
@@ -1,17 +0,0 @@
-package gov.hhs.onc.phiz.logging;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import org.apache.commons.lang3.StringUtils;
-
-@Documented
-@Inherited
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ ElementType.TYPE })
-public @interface MarkerFieldName {
- String value() default StringUtils.EMPTY;
-}
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/PhizJsonFactoryDecorator.java
Mon Jan 26 17:11:24 2015 UTC
+++ /dev/null
@@ -1,24 +0,0 @@
-package gov.hhs.onc.phiz.logging.impl;
-
-import com.fasterxml.jackson.databind.MapperFeature;
-import com.fasterxml.jackson.databind.MappingJsonFactory;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.PropertyNamingStrategy;
-import net.logstash.logback.decorate.JsonFactoryDecorator;
-
-public class PhizJsonFactoryDecorator implements JsonFactoryDecorator {
- @Override
- public MappingJsonFactory decorate(MappingJsonFactory jsonFactory) {
- ObjectMapper objMapper = jsonFactory.getCodec();
-
- objMapper.disable(MapperFeature.AUTO_DETECT_CREATORS);
- objMapper.disable(MapperFeature.AUTO_DETECT_FIELDS);
- objMapper.disable(MapperFeature.AUTO_DETECT_GETTERS);
- objMapper.disable(MapperFeature.AUTO_DETECT_IS_GETTERS);
- objMapper.disable(MapperFeature.AUTO_DETECT_SETTERS);
-
-
objMapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
-
- return jsonFactory;
- }
-}
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/PhizMarkers.java
Mon Jan 26 17:11:24 2015 UTC
+++ /dev/null
@@ -1,37 +0,0 @@
-package gov.hhs.onc.phiz.logging.impl;
-
-import gov.hhs.onc.phiz.logging.MarkerFieldName;
-import net.logstash.logback.marker.Markers;
-import net.logstash.logback.marker.ObjectAppendingMarker;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.core.annotation.AnnotationUtils;
-
-public final class PhizMarkers {
- public final static String MARKER_FIELD_NAME_DELIM = "_";
-
- private PhizMarkers() {
- }
-
- public static ObjectAppendingMarker append(Object ... markerObjs) {
- ObjectAppendingMarker marker = null, nextMarker;
-
- for (Object markerObj : markerObjs) {
- nextMarker = Markers.append(buildFieldName(markerObj),
markerObj);
-
- marker = ((marker != null) ? marker.and(nextMarker) :
nextMarker);
- }
-
- return marker;
- }
-
- public static String buildFieldName(Object markerObj) {
- Class<?> markerObjClass = markerObj.getClass();
- MarkerFieldName markerFieldNameAnno =
AnnotationUtils.findAnnotation(markerObjClass, MarkerFieldName.class);
- String markerFieldName = ((markerFieldNameAnno != null) ?
markerFieldNameAnno.value() : null);
-
- // noinspection ConstantConditions
- return StringUtils.join(
-
StringUtils.splitByCharacterTypeCamelCase((!StringUtils.isEmpty(markerFieldName) ?
markerFieldName : markerObjClass.getSimpleName())),
- MARKER_FIELD_NAME_DELIM).toLowerCase();
- }
-}
=======================================
--- /phiz-core/pom.xml Mon Jan 26 17:11:24 2015 UTC
+++ /phiz-core/pom.xml Thu Jan 29 00:44:10 2015 UTC
@@ -85,6 +85,10 @@
<artifactId>c3p0</artifactId>
</dependency>
<dependency>
+ <groupId>com.ryantenney.metrics</groupId>
+ <artifactId>metrics-spring</artifactId>
+ </dependency>
+ <dependency>
<groupId>
com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
</dependency>
@@ -93,6 +97,26 @@
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-annotation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-healthchecks</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-json</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-jvm</artifactId>
+ </dependency>
+ <dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
</dependency>
@@ -181,6 +205,10 @@
<artifactId>hibernate-ehcache</artifactId>
</dependency>
<dependency>
+ <groupId>org.logback-extensions</groupId>
+ <artifactId>logback-ext-spring</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
@@ -245,6 +273,10 @@
<artifactId>spring-rabbit</artifactId>
</dependency>
<dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-actuator</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/RootCauseThrowableProxyConverter.java
Mon Jan 26 17:11:24 2015 UTC
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/RootCauseThrowableProxyConverter.java
Thu Jan 29 00:44:10 2015 UTC
@@ -6,7 +6,9 @@
import ch.qos.logback.core.CoreConstants;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.springframework.stereotype.Component;
+@Component("throwableProxyConvRootCause")
public class RootCauseThrowableProxyConverter extends
ExtendedThrowableProxyConverter {
public String throwableProxyToString(IThrowableProxy throwableProxy) {
String[] rootCauseStackTraceArr =
ExceptionUtils.getRootCauseStackTrace(((ThrowableProxy)
throwableProxy).getThrowable());
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/utils/PhizStringUtils.java
Thu Jan 22 06:01:46 2015 UTC
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/utils/PhizStringUtils.java
Thu Jan 29 00:44:10 2015 UTC
@@ -3,7 +3,6 @@
import javax.annotation.Nullable;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.util.StringUtils;
public final class PhizStringUtils {
public final static String TOKEN_DELIMS = ",; \t\n";
@@ -16,7 +15,7 @@
}
public static String[] tokenize(@Nullable String str, @Nullable String
defaultStr) {
- return
ObjectUtils.defaultIfNull(StringUtils.tokenizeToStringArray(ObjectUtils.defaultIfNull(str,
defaultStr), TOKEN_DELIMS),
+ return
ObjectUtils.defaultIfNull(org.springframework.util.StringUtils.tokenizeToStringArray(ObjectUtils.defaultIfNull(str,
defaultStr), TOKEN_DELIMS),
ArrayUtils.EMPTY_STRING_ARRAY);
}
}
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/xml/utils/PhizXmlUtils.java
Mon Jan 26 17:11:24 2015 UTC
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/xml/utils/PhizXmlUtils.java
Thu Jan 29 00:44:10 2015 UTC
@@ -191,6 +191,10 @@
public static String findElementContent(Element parentElem, String
elemNsUri, String elemLocalName) {
return DOMUtils.getContent(findElement(parentElem, elemNsUri,
elemLocalName));
}
+
+ public static List<Element> findElements(Element parentElem, QName
elemQname) {
+ return DOMUtils.findAllElementsByTagNameNS(parentElem,
elemQname.getNamespaceURI(), elemQname.getLocalPart());
+ }
@Nullable
public static Element findElement(Element parentElem, QName elemQname)
{
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
Mon Jan 26 17:11:24 2015 UTC
+++
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
Thu Jan 29 00:44:10 2015 UTC
@@ -78,16 +78,8 @@
<!--====================================================================================================
= APPENDERS: LOGSTASH
=====================================================================================================-->
- <appender name="logstash"
class="net.logstash.logback.appender.LogstashTcpSocketAppender">
- <encoder class="net.logstash.logback.encoder.LogstashEncoder">
- <includeCallerInfo>true</includeCallerInfo>
- <includeContext>false</includeContext>
- <includeMdc>false</includeMdc>
- <jsonFactoryDecorator
class="gov.hhs.onc.phiz.logging.impl.PhizJsonFactoryDecorator"/>
- <throwableConverter
class="gov.hhs.onc.phiz.logging.impl.RootCauseThrowableProxyConverter"/>
- </encoder>
- <port>4560</port>
- <remoteHost>127.0.0.1</remoteHost>
+ <appender name="logstash"
class="ch.qos.logback.ext.spring.DelegatingLogbackAppender">
+ <beanName>appenderLogstashTcp</beanName>
</appender>
<!--====================================================================================================
@@ -99,6 +91,10 @@
<appender-ref ref="logstash"/>
</logger>
+ <logger name="gov.hhs.onc.phiz.logging.metrics.impl.LogstashReporter"
level="all" additivity="false">
+ <appender-ref ref="logstash"/>
+ </logger>
+
<!--====================================================================================================
= LOGGERS: ROCKFRAMEWORK
=====================================================================================================-->
@@ -108,6 +104,15 @@
<appender-ref ref="logstash"/>
</logger>
+
<!--====================================================================================================
+ = LOGGERS: METRICS
+
=====================================================================================================-->
+ <logger name="com.codahale.metrics" level="info" additivity="false">
+ <appender-ref ref="console"/>
+ <appender-ref ref="file"/>
+ <appender-ref ref="logstash"/>
+ </logger>
+
<!--====================================================================================================
= LOGGERS: EVIWARE
=====================================================================================================-->
=======================================
--- /phiz-core/src/main/resources/META-INF/phiz/phiz.properties Tue Jan 20
22:42:18 2015 UTC
+++ /phiz-core/src/main/resources/META-INF/phiz/phiz.properties Thu Jan 29
00:44:10 2015 UTC
@@ -74,6 +74,18 @@
#================================================================================
phiz.dest.iis.dev.id=dev
phiz.dest.iis.dev.uri=${phiz.ws.iis.dev.path}
+
+#================================================================================
+# LOGGING LOGSTASH
+#================================================================================
+phiz.logging.logstash.host=127.0.0.1
+phiz.logging.logstash.port=#{
T(net.logstash.logback.appender.AbstractLogstashTcpSocketAppender).DEFAULT_PORT
}
+
+#================================================================================
+# LOGGING METRICS
+#================================================================================
+phiz.logging.metrics.metric.cached.thread.states.interval=15
+phiz.logging.metrics.reporter.logstash.interval=30
#================================================================================
# RABBITMQ
=======================================
--- /phiz-core/src/main/resources/META-INF/spring.factories Wed Dec 3
17:31:58 2014 UTC
+++ /phiz-core/src/main/resources/META-INF/spring.factories Thu Jan 29
00:44:10 2015 UTC
@@ -1,3 +1,6 @@
org.springframework.boot.SpringApplicationRunListener=\
gov.hhs.onc.phiz.context.impl.CommandLineApplicationRunListener,\
gov.hhs.onc.phiz.context.impl.ProfilesApplicationRunListener
+
+org.springframework.context.ApplicationListener=\
+ ch.qos.logback.ext.spring.ApplicationContextHolder
=======================================
--- /phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties Tue
Jan 20 22:42:18 2015 UTC
+++ /phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties Thu
Jan 29 00:44:10 2015 UTC
@@ -41,6 +41,17 @@
phiz.data.db.user.admin.pass=adminpass
phiz.data.db.user.hub.name=${
phiz.data.db.user.admin.name}
phiz.data.db.user.hub.pass=${phiz.data.db.user.admin.pass}
+
+#================================================================================
+# LOGGING LOGSTASH
+#================================================================================
+#phiz.logging.logstash.port=14560
+
+#================================================================================
+# LOGGING METRICS
+#================================================================================
+phiz.logging.metrics.metric.cached.thread.states.interval=1
+phiz.logging.metrics.reporter.logstash.interval=1
#================================================================================
# RABBITMQ
=======================================
--- /phiz-parent/pom.xml Mon Jan 26 17:11:24 2015 UTC
+++ /phiz-parent/pom.xml Thu Jan 29 00:44:10 2015 UTC
@@ -171,6 +171,45 @@
<version>0.9.5</version>
</dependency>
<dependency>
+ <groupId>com.ryantenney.metrics</groupId>
+ <artifactId>metrics-spring</artifactId>
+ <version>3.0.4</version>
+ <exclusions>
+ <exclusion>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-annotation</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-core</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-ganglia</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-graphite</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-healthchecks</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-jvm</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.codahale.metrics</groupId>
+ <artifactId>metrics-servlets</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javax.servlet</groupId>
+ <artifactId>javax.servlet-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
<groupId>
com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.8</version>
@@ -223,6 +262,31 @@
<version>2.4</version>
</dependency>
<dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-annotation</artifactId>
+ <version>3.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-core</artifactId>
+ <version>3.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-healthchecks</artifactId>
+ <version>3.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-json</artifactId>
+ <version>3.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-jvm</artifactId>
+ <version>3.1.0</version>
+ </dependency>
+ <dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
@@ -375,6 +439,11 @@
<version>0.9.1</version>
</dependency>
<dependency>
+ <groupId>org.logback-extensions</groupId>
+ <artifactId>logback-ext-spring</artifactId>
+ <version>0.1.2</version>
+ </dependency>
+ <dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.3-1102-jdbc41</version>
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpRequestEvent.java
Mon Jan 26 17:11:24 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpRequestEvent.java
Thu Jan 29 00:44:10 2015 UTC
@@ -1,10 +1,10 @@
package gov.hhs.onc.phiz.web.logging;
import com.fasterxml.jackson.annotation.JsonProperty;
-import gov.hhs.onc.phiz.logging.MarkerFieldName;
+import gov.hhs.onc.phiz.logging.logstash.MarkerObjectFieldName;
import javax.servlet.http.HttpServletRequest;
-@MarkerFieldName("httpRequest")
+@MarkerObjectFieldName("httpRequest")
public interface HttpRequestEvent extends HttpEvent<HttpServletRequest> {
@JsonProperty
public String getAuthType();
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpResponseEvent.java
Mon Jan 26 17:11:24 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpResponseEvent.java
Thu Jan 29 00:44:10 2015 UTC
@@ -1,11 +1,14 @@
package gov.hhs.onc.phiz.web.logging;
import com.fasterxml.jackson.annotation.JsonProperty;
-import gov.hhs.onc.phiz.logging.MarkerFieldName;
+import gov.hhs.onc.phiz.logging.logstash.MarkerObjectFieldName;
import javax.servlet.http.HttpServletResponse;
-@MarkerFieldName("httpResponse")
+@MarkerObjectFieldName("httpResponse")
public interface HttpResponseEvent extends HttpEvent<HttpServletResponse> {
@JsonProperty
public int getStatus();
+
+ @JsonProperty
+ public String getStatusMessage();
}
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/AbstractHttpEvent.java
Mon Jan 26 17:11:24 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/AbstractHttpEvent.java
Thu Jan 29 00:44:10 2015 UTC
@@ -17,7 +17,7 @@
public Map<String, List<String>> getHeaderMap() {
Map<String, List<String>> headers = new
TreeMap<>(String.CASE_INSENSITIVE_ORDER);
- this.getHeaderNames().stream().forEach((headerName) ->
headers.put(headerName, new ArrayList<>(this.getHeaders(headerName))));
+ this.getHeaderNames().stream().forEach((headerName) ->
headers.put(headerName.toLowerCase(), new
ArrayList<>(this.getHeaders(headerName))));
return headers;
}
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpResponseEventImpl.java
Mon Jan 26 17:11:24 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpResponseEventImpl.java
Thu Jan 29 00:44:10 2015 UTC
@@ -6,6 +6,7 @@
import java.util.Set;
import java.util.TreeSet;
import javax.servlet.http.HttpServletResponse;
+import org.apache.tomcat.util.http.HttpMessages;
public class HttpResponseEventImpl extends
AbstractHttpEvent<HttpServletResponse> implements HttpResponseEvent {
public HttpResponseEventImpl(HttpServletResponse desc) {
@@ -34,4 +35,9 @@
public int getStatus() {
return this.desc.getStatus();
}
+
+ @Override
+ public String getStatusMessage() {
+ return
HttpMessages.getInstance(this.desc.getLocale()).getMessage(this.getStatus());
+ }
}
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
Mon Jan 26 17:11:24 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
Thu Jan 29 00:44:10 2015 UTC
@@ -3,8 +3,8 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.github.sebhoss.warnings.CompilerWarnings;
import com.sun.xml.ws.encoding.soap.SOAP12Constants;
-import gov.hhs.onc.phiz.logging.MarkerFieldName;
-import gov.hhs.onc.phiz.logging.impl.PhizMarkers;
+import gov.hhs.onc.phiz.logging.logstash.MarkerObjectFieldName;
+import gov.hhs.onc.phiz.logging.logstash.impl.PhizLogstashMarkers;
import gov.hhs.onc.phiz.web.PhizHttpRequestMethods;
import gov.hhs.onc.phiz.web.logging.HttpEvent;
import gov.hhs.onc.phiz.web.logging.HttpRequestEvent;
@@ -116,7 +116,7 @@
}
}
- @MarkerFieldName("wsRequest")
+ @MarkerObjectFieldName("wsRequest")
private static class WsRequestMessageEvent extends
AbstractWsMessageEvent {
public WsRequestMessageEvent(String endpointAddr, int eventId) {
super(endpointAddr, eventId);
@@ -128,7 +128,7 @@
}
}
- @MarkerFieldName("wsResponse")
+ @MarkerObjectFieldName("wsResponse")
private static class WsResponseMessageEvent extends
AbstractWsMessageEvent {
public WsResponseMessageEvent(String endpointAddr, int eventId) {
super(endpointAddr, eventId);
@@ -167,7 +167,7 @@
msg,
this.httpEventSupplier.apply(this.httpEventDescSupplier.apply(msg)),
this.wsMsgEventSupplier.apply(msg.getExchange().getEndpoint().getEndpointInfo().getAddress(),
- ((int)
msgExchange.get(WS_MSG_EVENT_ID_PROP_NAME))));
+ PhizWsUtils.getProperty(msgExchange,
WS_MSG_EVENT_ID_PROP_NAME, Integer.class)));
} catch (Fault e) {
throw e;
} catch (Exception e) {
@@ -189,20 +189,17 @@
(msgSoapFaultCodeElem) ->
msgSoapFaultContentMap.put(SOAP12Constants.QNAME_FAULT_CODE.getLocalPart(),
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultCodeElem,
SOAP12Constants.QNAME_FAULT_VALUE))));
- Optional.ofNullable(
- DOMUtils.findAllElementsByTagNameNS(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_SUBCODE.getNamespaceURI(),
-
SOAP12Constants.QNAME_FAULT_SUBCODE.getLocalPart())).ifPresent(
- (msgSoapFaultSubcodeElems) -> {
- if (!msgSoapFaultSubcodeElems.isEmpty()) {
- msgSoapFaultContentMap.put(
-
SOAP12Constants.QNAME_FAULT_SUBCODE.getLocalPart(),
- msgSoapFaultSubcodeElems
- .stream()
- .map(
- (msgSoapFaultSubcodeElem) ->
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultSubcodeElem,
-
SOAP12Constants.QNAME_FAULT_VALUE))).collect(Collectors.toList()));
- }
- });
+ List<Element> msgSoapFaultSubcodeElems =
PhizXmlUtils.findElements(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_SUBCODE);
+
+ if (!msgSoapFaultSubcodeElems.isEmpty()) {
+ msgSoapFaultContentMap.put(
+ SOAP12Constants.QNAME_FAULT_SUBCODE.getLocalPart(),
+ msgSoapFaultSubcodeElems
+ .stream()
+ .map(
+ (msgSoapFaultSubcodeElem) ->
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultSubcodeElem,
+
SOAP12Constants.QNAME_FAULT_VALUE))).collect(Collectors.toList()));
+ }
Optional.ofNullable(DOMUtils.getFirstChildWithName(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_REASON)).ifPresent(
(msgSoapFaultReasonElem) ->
msgSoapFaultContentMap.put(SOAP12Constants.QNAME_FAULT_REASON.getLocalPart(),
@@ -226,7 +223,7 @@
protected void populateSoapHeaders(V wsMsgEvent, Element
msgPayloadDocElem) {
Element[] msgSoapHeaderElems =
- DOMUtils.findAllElementsByTagNameNS(msgPayloadDocElem,
SOAP12Constants.URI_ENVELOPE,
SOAP12Constants.QNAME_SOAP_HEADER.getLocalPart()).stream()
+ PhizXmlUtils.findElements(msgPayloadDocElem,
SOAP12Constants.QNAME_SOAP_HEADER).stream()
.flatMap((msgSoapHeaderContainerElem) ->
DomUtils.getChildElements(msgSoapHeaderContainerElem).stream()).toArray(Element[]::new);
if (msgSoapHeaderElems.length > 0) {
@@ -343,7 +340,7 @@
((Set<QName>)
msg.getContextualProperty(PhizWsMessageContextProperties.LOG_MSG_PAYLOAD_HIDE_CONTENT_ELEM_QNAMES)))) :
PhizXmlUtils
.toString(msgPayloadDoc, this.indentSize)));
- LOGGER.info(PhizMarkers.append(httpEvent, wsMsgEvent),
wsMsgEvent.toString());
+ LOGGER.info(PhizLogstashMarkers.append(httpEvent, wsMsgEvent),
wsMsgEvent.toString());
}
public int getIndentSize() {
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsUtils.java
Sun Jan 25 19:49:30 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsUtils.java
Thu Jan 29 00:44:10 2015 UTC
@@ -17,6 +17,7 @@
import org.apache.cxf.io.CachedOutputStream;
import org.apache.cxf.io.DelegatingInputStream;
import org.apache.cxf.jaxws.context.WrappedMessageContext;
+import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageContentsList;
import org.apache.cxf.transport.http.AbstractHTTPDestination;
@@ -71,6 +72,15 @@
return msgContents;
}
+
+ @Nullable
+ public static <T> T getContextualProperty(Message msg, String
propName, Class<T> propValueClass) {
+ return (hasContextualProperty(msg, propName) ?
propValueClass.cast(msg.getContextualProperty(propName)) : null);
+ }
+
+ public static boolean hasContextualProperty(Message msg, String
propName) {
+ return msg.getContextualPropertyKeys().contains(propName);
+ }
@Nullable
public static HttpServletResponse getHttpServletResponse(Message msg) {
@@ -91,6 +101,11 @@
public static HttpServletRequest getHttpServletRequest(MessageContext
msgContext) {
return getProperty(msgContext,
AbstractHTTPDestination.HTTP_REQUEST, HttpServletRequest.class);
}
+
+ @Nullable
+ public static <T> T getProperty(Exchange exchange, String propName,
Class<T> propValueClass) {
+ return getPropertyInternal(exchange, propName, propValueClass);
+ }
@Nullable
public static <T> T getProperty(Message msg, String propName, Class<T>
propValueClass) {
==============================================================================
Revision: 3e38665027e7
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Tue Feb 3 16:25:30 2015 UTC
Log: - Further supports PHIZ-28 and PHIZ-30.
- Refactored custom CXF logging feature to properly handle server/client
requests/responses (the message direction is flipped for clients).
- Implemented custom Tomcat request/response wrappers/facades in order to
expose implementation/protocol specific accessors (response content length,
etc).
- Switched to using asynchronous CXF client HTTP transport
(configuration/performance benefits for synchronous invocations).
https://code.google.com/p/phiz/source/detail?r=3e38665027e7
Added:
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/tomcat/impl/MetricsValve.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/tomcat/impl/SessionMetricsConfiguration.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizWsEndpointType.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/jaxws/impl/PhizJaxWsClientFactoryBean.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/WsMessageEvent.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/WsRequestMessageEvent.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/WsResponseMessageEvent.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/impl/AbstractWsMessageEvent.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/impl/WsRequestMessageEventImpl.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/impl/WsResponseMessageEventImpl.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/transport/impl/PhizAsyncHttpConduit.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/transport/impl/PhizAsyncHttpConduitFactory.java
Deleted:
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/metrics/impl/PhizMetricRegistryFactoryBean.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/PhizHttpRequestMethods.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/jaxws/impl/PhizJaxWsClientProxyFactoryBean.java
Modified:
/phiz-core/pom.xml
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logstash/impl/PhizLogstashMarkers.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/metrics/impl/LogstashReporter.java
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-logstash.xml
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-metrics.xml
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz.xml
/phiz-parent/pom.xml
/phiz-web-core/pom.xml
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpRequestEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpResponseEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/AbstractHttpEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpRequestEventImpl.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpResponseEventImpl.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/tomcat/impl/PhizTomcatEmbeddedServletContainerFactory.java
/phiz-web-core/src/main/resources/META-INF/phiz/phiz-web.properties
/phiz-web-core/src/main/resources/META-INF/phiz/spring/spring-phiz-web-tomcat.xml
/phiz-web-parent/pom.xml
/phiz-web-ws/pom.xml
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/iis/hub/impl/IisHubServiceImpl.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/AbstractPhizSoapInterceptor.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/IisHubDevActionInterceptor.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsUtils.java
/phiz-web-ws/src/main/resources/META-INF/phiz/phiz-web-ws.properties
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-client.xml
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-server.xml
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws.xml
=======================================
--- /dev/null
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/tomcat/impl/MetricsValve.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,36 @@
+package gov.hhs.onc.phiz.web.tomcat.impl;
+
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.Timer;
+import com.ryantenney.metrics.annotation.Metric;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+import javax.servlet.ServletException;
+import org.apache.catalina.connector.Request;
+import org.apache.catalina.connector.Response;
+import org.apache.catalina.valves.ValveBase;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+@Component("valveMetrics")
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class MetricsValve extends ValveBase {
+ @Metric(name = "http.requests.active", absolute = true)
+ private Counter activeReqsCounter = new Counter();
+
+ @Metric(name = "http.requests.elapsed.time", absolute = true)
+ private Timer reqsElapsedTimeTimer = new Timer();
+
+ @Override
+ public void invoke(Request req, Response resp) throws IOException,
ServletException {
+ this.activeReqsCounter.inc();
+
+ try {
+ this.getNext().invoke(req, resp);
+ } finally {
+ this.activeReqsCounter.dec();
+
this.reqsElapsedTimeTimer.update((resp.getCoyoteResponse().getCommitTime()
- req.getCoyoteRequest().getStartTime()), TimeUnit.MILLISECONDS);
+ }
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/tomcat/impl/SessionMetricsConfiguration.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,73 @@
+package gov.hhs.onc.phiz.web.tomcat.impl;
+
+import com.codahale.metrics.annotation.Gauge;
+import java.util.stream.Stream;
+import org.apache.catalina.Context;
+import org.apache.catalina.session.ManagerBase;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import
org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer;
+import org.springframework.context.annotation.Configuration;
+
+@ConditionalOnBean({ TomcatEmbeddedServletContainer.class })
+@Configuration("sessionMetricsConfiguration")
+public class SessionMetricsConfiguration implements InitializingBean {
+ @Autowired
+ @SuppressWarnings({ "SpringJavaAutowiringInspection" })
+ private TomcatEmbeddedServletContainer embeddedServletContainer;
+
+ private ManagerBase sessionManager;
+
+ @Gauge(name = "http.sessions.active", absolute = true)
+ public int getActiveSessions() {
+ return this.sessionManager.getActiveSessions();
+ }
+
+ @Gauge(name = "http.sessions.active.max", absolute = true)
+ public int getMaxActiveSessions() {
+ return this.sessionManager.getMaxActiveSessions();
+ }
+
+ @Gauge(name = "http.sessions.expired", absolute = true)
+ public long getExpiredSessions() {
+ return this.sessionManager.getExpiredSessions();
+ }
+
+ @Gauge(name = "http.sessions.rejected", absolute = true)
+ public int getRejectedSessions() {
+ return this.sessionManager.getRejectedSessions();
+ }
+
+ @Gauge(name = "http.sessions.alive.time.mean", absolute = true)
+ public int getSessionAverageAliveTime() {
+ return this.sessionManager.getSessionAverageAliveTime();
+ }
+
+ @Gauge(name = "http.sessions.alive.time.max", absolute = true)
+ public int getSessionMaxAliveTime() {
+ return this.sessionManager.getSessionMaxAliveTime();
+ }
+
+ @Gauge(name = "http.sessions.create.rate", absolute = true)
+ public int getSessionCreateRate() {
+ return this.sessionManager.getSessionCreateRate();
+ }
+
+ @Gauge(name = "http.sessions.expire.rate", absolute = true)
+ public int getSessionExpireRate() {
+ return this.sessionManager.getSessionExpireRate();
+ }
+
+ @Gauge(name = "http.sessions.total", absolute = true)
+ public long getTotalSessions() {
+ return this.sessionManager.getSessionCounter();
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ this.sessionManager =
+ ((ManagerBase) ((Context)
Stream.of(this.embeddedServletContainer.getTomcat().getHost().findChildren())
+ .filter(container -> (container instanceof
Context)).findFirst().get()).getManager());
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizWsEndpointType.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,5 @@
+package
gov.hhs.onc.phiz.web.ws;
+
+public enum PhizWsEndpointType {
+ SERVER, CLIENT
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/jaxws/impl/PhizJaxWsClientFactoryBean.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,67 @@
+package gov.hhs.onc.phiz.web.ws.jaxws.impl;
+
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.frontend.ClientProxy;
+import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.SmartFactoryBean;
+
+public class PhizJaxWsClientFactoryBean extends JaxWsProxyFactoryBean
implements DisposableBean, SmartFactoryBean<Client> {
+ private ClientProxy clientProxy;
+
+ public PhizJaxWsClientFactoryBean() {
+ super();
+ }
+
+ public PhizJaxWsClientFactoryBean(String addr) {
+ super();
+
+ this.setAddress(addr);
+ }
+
+ @Override
+ public void destroy() throws Exception {
+ if (this.clientProxy != null) {
+ this.clientProxy.close();
+
+ this.clientProxy = null;
+ }
+ }
+
+ @Override
+ public Client getObject() throws Exception {
+ return ((Client) this.create());
+ }
+
+ @Override
+ public Object create() {
+ this.configured = true;
+
+ return super.create();
+ }
+
+ @Override
+ protected ClientProxy clientClientProxy(Client client) {
+ return (this.clientProxy = super.clientClientProxy(client));
+ }
+
+ @Override
+ public boolean isEagerInit() {
+ return false;
+ }
+
+ @Override
+ public Class<?> getObjectType() {
+ return Client.class;
+ }
+
+ @Override
+ public boolean isPrototype() {
+ return true;
+ }
+
+ @Override
+ public boolean isSingleton() {
+ return false;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/WsMessageEvent.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,48 @@
+package gov.hhs.onc.phiz.web.ws.logging;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import gov.hhs.onc.phiz.web.ws.PhizWsEndpointType;
+import gov.hhs.onc.phiz.web.ws.PhizWsMessageDirection;
+import java.util.Map;
+import org.slf4j.Logger;
+
+public interface WsMessageEvent {
+ @JsonProperty
+ public PhizWsMessageDirection getDirection();
+
+ public void setDirection(PhizWsMessageDirection direction);
+
+ @JsonProperty
+ public String getEndpointAddress();
+
+ public void setEndpointAddress(String endpointAddr);
+
+ @JsonProperty
+ public PhizWsEndpointType getEndpointType();
+
+ public void setEndpointType(PhizWsEndpointType endpointType);
+
+ @JsonProperty
+ public int getEventId();
+
+ public void setEventId(int eventId);
+
+ public Logger getLogger();
+
+ public void setLogger(Logger logger);
+
+ @JsonProperty
+ public String getPayload();
+
+ public void setPayload(String payload);
+
+ @JsonProperty
+ public Map<String, Object> getSoapFault();
+
+ public void setSoapFault(Map<String, Object> soapFault);
+
+ @JsonProperty
+ public Map<String, Object> getSoapHeaders();
+
+ public void setSoapHeaders(Map<String, Object> soapHeaders);
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/WsRequestMessageEvent.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,7 @@
+package gov.hhs.onc.phiz.web.ws.logging;
+
+import gov.hhs.onc.phiz.logging.logstash.MarkerObjectFieldName;
+
+@MarkerObjectFieldName("wsRequestMessage")
+public interface WsRequestMessageEvent extends WsMessageEvent {
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/WsResponseMessageEvent.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,7 @@
+package gov.hhs.onc.phiz.web.ws.logging;
+
+import gov.hhs.onc.phiz.logging.logstash.MarkerObjectFieldName;
+
+@MarkerObjectFieldName("wsResponseMessage")
+public interface WsResponseMessageEvent extends WsMessageEvent {
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/impl/AbstractWsMessageEvent.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,98 @@
+package gov.hhs.onc.phiz.web.ws.logging.impl;
+
+import gov.hhs.onc.phiz.web.ws.PhizWsMessageDirection;
+import gov.hhs.onc.phiz.web.ws.PhizWsEndpointType;
+import gov.hhs.onc.phiz.web.ws.logging.WsMessageEvent;
+import java.util.Map;
+import org.slf4j.Logger;
+
+public abstract class AbstractWsMessageEvent implements WsMessageEvent {
+ protected PhizWsMessageDirection direction;
+ protected String endpointAddr;
+ protected PhizWsEndpointType endpointType;
+ protected int eventId;
+ protected Logger logger;
+ protected Map<String, Object> soapFault;
+ protected Map<String, Object> soapHeaders;
+ protected String payload;
+
+ @Override
+ public PhizWsMessageDirection getDirection() {
+ return this.direction;
+ }
+
+ @Override
+ public void setDirection(PhizWsMessageDirection direction) {
+ this.direction = direction;
+ }
+
+ @Override
+ public String getEndpointAddress() {
+ return this.endpointAddr;
+ }
+
+ @Override
+ public void setEndpointAddress(String endpointAddr) {
+ this.endpointAddr = endpointAddr;
+ }
+
+ @Override
+ public PhizWsEndpointType getEndpointType() {
+ return this.endpointType;
+ }
+
+ @Override
+ public void setEndpointType(PhizWsEndpointType endpointType) {
+ this.endpointType = endpointType;
+ }
+
+ @Override
+ public int getEventId() {
+ return this.eventId;
+ }
+
+ @Override
+ public void setEventId(int eventId) {
+ this.eventId = eventId;
+ }
+
+ @Override
+ public Logger getLogger() {
+ return this.logger;
+ }
+
+ @Override
+ public void setLogger(Logger logger) {
+ this.logger = logger;
+ }
+
+ @Override
+ public String getPayload() {
+ return this.payload;
+ }
+
+ @Override
+ public void setPayload(String payload) {
+ this.payload = payload;
+ }
+
+ @Override
+ public Map<String, Object> getSoapFault() {
+ return this.soapFault;
+ }
+
+ @Override
+ public void setSoapFault(Map<String, Object> soapFault) {
+ this.soapFault = soapFault;
+ }
+
+ @Override
+ public Map<String, Object> getSoapHeaders() {
+ return this.soapHeaders;
+ }
+
+ @Override
+ public void setSoapHeaders(Map<String, Object> soapHeaders) {
+ this.soapHeaders = soapHeaders;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/impl/WsRequestMessageEventImpl.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,11 @@
+package gov.hhs.onc.phiz.web.ws.logging.impl;
+
+import gov.hhs.onc.phiz.web.ws.logging.WsRequestMessageEvent;
+
+public class WsRequestMessageEventImpl extends AbstractWsMessageEvent
implements WsRequestMessageEvent {
+ @Override
+ public String toString() {
+ return String.format("Web service (endpointAddr=%s) %s request
(direction=%s, id=%d, soapHeaders=%s, soapFault=%s):\n%s",
this.endpointAddr,
+
this.endpointType.name().toLowerCase(),
this.direction.name().toLowerCase(), this.eventId, this.soapHeaders,
this.soapFault, this.payload);
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/logging/impl/WsResponseMessageEventImpl.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,11 @@
+package gov.hhs.onc.phiz.web.ws.logging.impl;
+
+import gov.hhs.onc.phiz.web.ws.logging.WsResponseMessageEvent;
+
+public class WsResponseMessageEventImpl extends AbstractWsMessageEvent
implements WsResponseMessageEvent {
+ @Override
+ public String toString() {
+ return String.format("Web service (endpointAddr=%s) %s response
(direction=%s, id=%d, soapHeaders=%s, soapFault=%s):\n%s",
this.endpointAddr,
+
this.endpointType.name().toLowerCase(),
this.direction.name().toLowerCase(), this.eventId, this.soapHeaders,
this.soapFault, this.payload);
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/transport/impl/PhizAsyncHttpConduit.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,19 @@
+package gov.hhs.onc.phiz.web.ws.transport.impl;
+
+import java.io.IOException;
+import javax.annotation.Nullable;
+import org.apache.cxf.Bus;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+
+public class PhizAsyncHttpConduit extends AsyncHTTPConduit {
+ public PhizAsyncHttpConduit(Bus bus, PhizAsyncHttpConduitFactory
conduitFactory) throws IOException {
+ this(bus, new EndpointInfo(), null, conduitFactory);
+ }
+
+ public PhizAsyncHttpConduit(Bus bus, EndpointInfo endpointInfo,
@Nullable EndpointReferenceType endpointRef, PhizAsyncHttpConduitFactory
conduitFactory)
+ throws IOException {
+ super(bus, endpointInfo, endpointRef, conduitFactory);
+ }
+}
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/transport/impl/PhizAsyncHttpConduitFactory.java
Tue Feb 3 16:25:30 2015 UTC
@@ -0,0 +1,46 @@
+package gov.hhs.onc.phiz.web.ws.transport.impl;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import javax.annotation.Nullable;
+import org.apache.cxf.Bus;
+import org.apache.cxf.extension.BusExtension;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.http.HTTPConduit;
+import org.apache.cxf.transport.http.HTTPConduitFactory;
+import org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduitFactory;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.springframework.beans.factory.InitializingBean;
+
+public class PhizAsyncHttpConduitFactory extends AsyncHTTPConduitFactory
implements BusExtension, InitializingBean {
+ private Map<String, Object> props = new HashMap<>();
+
+ public PhizAsyncHttpConduitFactory(Bus bus) {
+ super(bus);
+ }
+
+ @Nullable
+ @Override
+ public HTTPConduit createConduit(Bus bus, EndpointInfo endpointInfo,
@Nullable EndpointReferenceType endpointRef) throws IOException {
+ return (!this.isShutdown() ? new PhizAsyncHttpConduit(bus,
endpointInfo, endpointRef, this) : null);
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ this.update(this.props);
+ }
+
+ public Map<String, Object> getProperties() {
+ return this.props;
+ }
+
+ public void setProperties(Map<String, Object> props) {
+ this.props.putAll(props);
+ }
+
+ @Override
+ public Class<?> getRegistrationType() {
+ return HTTPConduitFactory.class;
+ }
+}
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/metrics/impl/PhizMetricRegistryFactoryBean.java
Thu Jan 29 00:44:10 2015 UTC
+++ /dev/null
@@ -1,23 +0,0 @@
-package gov.hhs.onc.phiz.logging.metrics.impl;
-
-import com.codahale.metrics.Metric;
-import com.codahale.metrics.MetricRegistry;
-import gov.hhs.onc.phiz.beans.factory.impl.AbstractPhizFactoryBean;
-import java.util.Map;
-
-public class PhizMetricRegistryFactoryBean extends
AbstractPhizFactoryBean<MetricRegistry> {
- private MetricRegistry metricRegistry = new MetricRegistry();
-
- public PhizMetricRegistryFactoryBean() {
- super(MetricRegistry.class);
- }
-
- @Override
- public MetricRegistry getObject() throws Exception {
- return this.metricRegistry;
- }
-
- public void setMetrics(Map<String, Metric> metrics) {
- this.metricRegistry.registerAll(() -> metrics);
- }
-}
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/PhizHttpRequestMethods.java
Sun Jan 25 19:49:30 2015 UTC
+++ /dev/null
@@ -1,9 +0,0 @@
-package gov.hhs.onc.phiz.web;
-
-public final class PhizHttpRequestMethods {
- public final static String GET = "GET";
- public final static String POST = "POST";
-
- private PhizHttpRequestMethods() {
- }
-}
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/jaxws/impl/PhizJaxWsClientProxyFactoryBean.java
Fri Jan 9 08:17:07 2015 UTC
+++ /dev/null
@@ -1,73 +0,0 @@
-package gov.hhs.onc.phiz.web.ws.jaxws.impl;
-
-import java.util.List;
-import java.util.Map;
-import org.apache.cxf.Bus;
-import org.apache.cxf.frontend.ClientProxy;
-import org.apache.cxf.interceptor.Fault;
-import
org.apache.cxf.jaxws.spring.JaxWsProxyFactoryBeanDefinitionParser.JAXWSSpringClientProxyFactoryBean;
-import org.apache.cxf.message.Message;
-import org.apache.cxf.phase.AbstractPhaseInterceptor;
-import org.apache.cxf.phase.Phase;
-import org.apache.cxf.transport.http.Headers;
-import org.apache.cxf.ws.addressing.AddressingProperties;
-import org.apache.cxf.ws.addressing.JAXWSAConstants;
-import org.springframework.beans.factory.SmartFactoryBean;
-
-public class PhizJaxWsClientProxyFactoryBean extends
JAXWSSpringClientProxyFactoryBean implements SmartFactoryBean<Object> {
- private static class SetRequestProtocolHeadersInterceptor extends
AbstractPhaseInterceptor<Message> {
- private Map<String, List<String>> reqProtocolHeaders;
-
- public SetRequestProtocolHeadersInterceptor(Map<String,
List<String>> reqProtocolHeaders) {
- super(Phase.PRE_STREAM);
-
- this.reqProtocolHeaders = reqProtocolHeaders;
- }
-
- @Override
- public void handleMessage(Message reqMsg) throws Fault {
-
Headers.getSetProtocolHeaders(reqMsg).putAll(this.reqProtocolHeaders);
- }
- }
-
- private AddressingProperties reqAddrProps;
-
- public PhizJaxWsClientProxyFactoryBean() {
- super();
- }
-
- public PhizJaxWsClientProxyFactoryBean(Bus bus, String addr,
Map<String, List<String>> reqProtocolHeaders, AddressingProperties
reqAddrProps) {
- super();
-
- this.setBus(bus);
- this.setAddress(addr);
-
- this.reqAddrProps = reqAddrProps;
-
- this.getOutInterceptors().add(new
SetRequestProtocolHeadersInterceptor(reqProtocolHeaders));
- }
-
- @Override
- public Object create() {
- Object clientObj = super.create();
-
-
ClientProxy.getClient(clientObj).getRequestContext().put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES,
this.reqAddrProps);
-
- return clientObj;
- }
-
- @Override
- public boolean isEagerInit() {
- return false;
- }
-
- @Override
- public boolean isPrototype() {
- return true;
- }
-
- @Override
- public boolean isSingleton() {
- return false;
- }
-}
=======================================
--- /phiz-core/pom.xml Thu Jan 29 00:44:10 2015 UTC
+++ /phiz-core/pom.xml Tue Feb 3 16:25:30 2015 UTC
@@ -161,6 +161,10 @@
<artifactId>cxf-rt-transports-http</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-transports-http-hc</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-addr</artifactId>
</dependency>
@@ -169,6 +173,22 @@
<artifactId>cxf-rt-ws-policy</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpasyncclient</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore-nio</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logstash/impl/PhizLogstashMarkers.java
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logstash/impl/PhizLogstashMarkers.java
Tue Feb 3 16:25:30 2015 UTC
@@ -1,8 +1,6 @@
package gov.hhs.onc.phiz.logging.logstash.impl;
import gov.hhs.onc.phiz.logging.logstash.MarkerObjectFieldName;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
import net.logstash.logback.marker.Markers;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Marker;
@@ -11,6 +9,7 @@
public final class PhizLogstashMarkers {
public final static String MARKER_FIELD_NAME_DELIM = "_";
+ public final static String MARKER_FIELD_NAME_LITERAL_DELIMS = "-" +
MARKER_FIELD_NAME_DELIM;
private PhizLogstashMarkers() {
}
@@ -47,6 +46,7 @@
public static String buildFieldName(String markerFieldName) {
// noinspection ConstantConditions
- return
StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(markerFieldName),
MARKER_FIELD_NAME_DELIM).toLowerCase();
+ return (StringUtils.containsAny(markerFieldName,
MARKER_FIELD_NAME_LITERAL_DELIMS) ? markerFieldName : StringUtils.join(
+ StringUtils.splitByCharacterTypeCamelCase(markerFieldName),
MARKER_FIELD_NAME_DELIM)).toLowerCase();
}
}
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/metrics/impl/LogstashReporter.java
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/metrics/impl/LogstashReporter.java
Tue Feb 3 16:25:30 2015 UTC
@@ -18,8 +18,7 @@
import org.springframework.context.SmartLifecycle;
public class LogstashReporter extends ScheduledReporter implements
SmartLifecycle {
- private final static String METRICS_MARKER_NAME = "metrics";
- private final static String METRICS_MARKER_FIELD_NAME = "metrics";
+ private final static String METRICS_NAME = "metrics";
private final static Logger LOGGER =
LoggerFactory.getLogger(LogstashReporter.class);
@@ -38,7 +37,7 @@
public void report(SortedMap<String, Gauge> gauges, SortedMap<String,
Counter> counters, SortedMap<String, Histogram> histograms,
SortedMap<String, Meter> meters, SortedMap<String, Timer> timers) {
LOGGER.info(
- PhizLogstashMarkers.append(METRICS_MARKER_NAME,
Markers.append(METRICS_MARKER_FIELD_NAME, this.metricRegistry)),
+ PhizLogstashMarkers.append(METRICS_NAME,
Markers.append(METRICS_NAME, this.metricRegistry)),
String.format("Metrics (numGauges=%d, numCounters=%d,
numHistograms=%d, numMeters=%d, numTimers=%d).", gauges.size(),
counters.size(),
histograms.size(), meters.size(), timers.size()));
}
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
Tue Feb 3 16:25:30 2015 UTC
@@ -140,13 +140,7 @@
<appender-ref ref="logstash"/>
</logger>
- <logger name="org.apache.cxf.transport.http" level="info"
additivity="false">
- <appender-ref ref="console"/>
- <appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
- </logger>
-
- <logger name="org.apache.cxf.transport.https" level="info"
additivity="false">
+ <logger
name="org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor"
level="warn" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
<appender-ref ref="logstash"/>
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-logstash.xml
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-logstash.xml
Tue Feb 3 16:25:30 2015 UTC
@@ -28,6 +28,7 @@
<beans:bean id="encoderLogstashTcp"
class="net.logstash.logback.encoder.LogstashTcpEncoder"
parent="encoderLogstash" abstract="true"
p:encoding="#{ charsetUtf8.name() }"
+ p:includeCallerInfo="true"
p:newLine="#{ T(org.apache.commons.lang3.StringUtils).LF }"/>
<!--====================================================================================================
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-metrics.xml
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-metrics.xml
Tue Feb 3 16:25:30 2015 UTC
@@ -5,11 +5,13 @@
xmlns:c="
http://www.springframework.org/schema/c"
xmlns:context="
http://www.springframework.org/schema/context"
xmlns:lang="
http://www.springframework.org/schema/lang"
+ xmlns:metrics="
http://www.ryantenney.com/schema/metrics"
xmlns:p="
http://www.springframework.org/schema/p"
xmlns:task="
http://www.springframework.org/schema/task"
xmlns:util="
http://www.springframework.org/schema/util"
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
+
http://www.ryantenney.com/schema/metrics
http://www.ryantenney.com/schema/metrics/metrics-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
@@ -34,43 +36,75 @@
<!--====================================================================================================
= METRIC REGISTRIES
=====================================================================================================-->
- <beans:bean id="metricRegistry"
class="com.codahale.metrics.MetricRegistry" abstract="true"/>
+ <beans:bean id="metricRegistry"
class="com.codahale.metrics.MetricRegistry"/>
- <beans:bean id="metricRegistryBase"
class="gov.hhs.onc.phiz.logging.metrics.impl.PhizMetricRegistryFactoryBean"
parent="metricRegistry">
- <beans:property name="metrics">
- <beans:map>
- <beans:entry key="bufferPool">
- <beans:bean
class="com.codahale.metrics.jvm.BufferPoolMetricSet" parent="metricSet"
- c:mBeanServer="#{
T(java.lang.management.ManagementFactory).platformMBeanServer }"/>
- </beans:entry>
- <beans:entry key="cachedThreadStates">
- <!--suppress SpringPlaceholdersInspection -->
- <beans:bean
class="com.codahale.metrics.jvm.CachedThreadStatesGaugeSet"
parent="gaugeSet"
-
c:interval="${phiz.logging.metrics.metric.cached.thread.states.interval}"
- c:unit="#{
T(java.util.concurrent.TimeUnit).SECONDS }"/>
- </beans:entry>
- <beans:entry key="classLoading">
- <beans:bean
class="com.codahale.metrics.jvm.ClassLoadingGaugeSet" parent="gaugeSet"/>
- </beans:entry>
- <beans:entry key="fileDescRatio">
- <beans:bean
class="com.codahale.metrics.jvm.FileDescriptorRatioGauge" parent="gauge"/>
- </beans:entry>
- <beans:entry key="garbageColl">
- <beans:bean
class="com.codahale.metrics.jvm.GarbageCollectorMetricSet"
parent="metricSet"/>
- </beans:entry>
- <beans:entry key="jvmAttr">
- <beans:bean
class="com.codahale.metrics.JvmAttributeGaugeSet" parent="metricSet"/>
- </beans:entry>
- <beans:entry key="memUsage">
- <beans:bean
class="com.codahale.metrics.jvm.MemoryUsageGaugeSet" parent="gaugeSet"/>
- </beans:entry>
- <beans:entry key="threadStates">
- <beans:bean
class="com.codahale.metrics.jvm.ThreadStatesGaugeSet" parent="gaugeSet"/>
- </beans:entry>
- </beans:map>
- </beans:property>
+
<!--====================================================================================================
+ = METRIC REGISTERERS
+
=====================================================================================================-->
+ <beans:bean id="metricRegisterer"
class="com.ryantenney.metrics.spring.config.RegisterMetricBeanDefinitionParser$MetricRegisterer"
abstract="true">
+ <beans:constructor-arg name="metricRegistry" ref="metricRegistry"/>
</beans:bean>
+ <beans:bean id="metricRegistererBufferPool" parent="metricRegisterer"
+ c:name="bufferPool">
+ <beans:constructor-arg name="metric">
+ <beans:bean
class="com.codahale.metrics.jvm.BufferPoolMetricSet" parent="metricSet"
+ c:mBeanServer="#{
T(java.lang.management.ManagementFactory).platformMBeanServer }"/>
+ </beans:constructor-arg>
+ </beans:bean>
+
+ <beans:bean id="metricRegistererCachedThreadStates"
parent="metricRegisterer"
+ c:name="cachedThreadStates">
+ <beans:constructor-arg name="metric">
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean
class="com.codahale.metrics.jvm.CachedThreadStatesGaugeSet"
parent="gaugeSet"
+
c:interval="${phiz.logging.metrics.metric.cached.thread.states.interval}"
+ c:unit="#{ T(java.util.concurrent.TimeUnit).SECONDS }"/>
+ </beans:constructor-arg>
+ </beans:bean>
+
+ <beans:bean id="metricRegistererClassLoading" parent="metricRegisterer"
+ c:name="classLoading">
+ <beans:constructor-arg name="metric">
+ <beans:bean
class="com.codahale.metrics.jvm.ClassLoadingGaugeSet" parent="gaugeSet"/>
+ </beans:constructor-arg>
+ </beans:bean>
+
+ <beans:bean id="metricRegistererFileDescRatio"
parent="metricRegisterer"
+ c:name="fileDescRatio">
+ <beans:constructor-arg name="metric">
+ <beans:bean
class="com.codahale.metrics.jvm.FileDescriptorRatioGauge" parent="gauge"/>
+ </beans:constructor-arg>
+ </beans:bean>
+
+ <beans:bean id="metricRegistererGarbageColl" parent="metricRegisterer"
+ c:name="garbageColl">
+ <beans:constructor-arg name="metric">
+ <beans:bean
class="com.codahale.metrics.jvm.GarbageCollectorMetricSet"
parent="metricSet"/>
+ </beans:constructor-arg>
+ </beans:bean>
+
+ <beans:bean id="metricRegistererJvmAttr" parent="metricRegisterer"
+ c:name="jvmAttr">
+ <beans:constructor-arg name="metric">
+ <beans:bean class="com.codahale.metrics.JvmAttributeGaugeSet"
parent="metricSet"/>
+ </beans:constructor-arg>
+ </beans:bean>
+
+ <beans:bean id="metricRegistererMemUsage" parent="metricRegisterer"
+ c:name="memUsage">
+ <beans:constructor-arg name="metric">
+ <beans:bean
class="com.codahale.metrics.jvm.MemoryUsageGaugeSet" parent="gaugeSet"/>
+ </beans:constructor-arg>
+ </beans:bean>
+
+ <beans:bean id="metricRegistererThreadStates" parent="metricRegisterer"
+ c:name="threadStates">
+ <beans:constructor-arg name="metric">
+ <beans:bean
class="com.codahale.metrics.jvm.ThreadStatesGaugeSet" parent="gaugeSet"/>
+ </beans:constructor-arg>
+ </beans:bean>
+
<!--====================================================================================================
= REPORTERS
=====================================================================================================-->
@@ -78,6 +112,11 @@
<!--suppress SpringPlaceholdersInspection -->
<beans:bean id="reporterLogstash"
class="gov.hhs.onc.phiz.logging.metrics.impl.LogstashReporter"
parent="reporter" depends-on="appenderLogstashTcp"
- c:metricRegistry-ref="metricRegistryBase"
+ c:metricRegistry-ref="metricRegistry"
p:period="${phiz.logging.metrics.reporter.logstash.interval}"/>
+
+
<!--====================================================================================================
+ = CONTEXT
+
=====================================================================================================-->
+ <metrics:annotation-driven expose-proxy="true"
metric-registry="metricRegistry" proxy-target-class="true"/>
</beans:beans>
=======================================
--- /phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz.xml Fri
Jan 9 01:16:51 2015 UTC
+++ /phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz.xml Tue
Feb 3 16:25:30 2015 UTC
@@ -26,6 +26,7 @@
= CONTEXT
=====================================================================================================-->
<context:component-scan base-package="gov.hhs.onc.phiz"/>
+
<context:spring-configured/>
<!--====================================================================================================
=======================================
--- /phiz-parent/pom.xml Thu Jan 29 00:44:10 2015 UTC
+++ /phiz-parent/pom.xml Tue Feb 3 16:25:30 2015 UTC
@@ -358,6 +358,11 @@
<version>3.0.3</version>
</dependency>
<dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-transports-http-hc</artifactId>
+ <version>3.0.3</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-addr</artifactId>
<version>3.0.3</version>
@@ -368,6 +373,38 @@
<version>3.0.3</version>
</dependency>
<dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpasyncclient</artifactId>
+ <version>4.0.2</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ <version>4.3.6</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore</artifactId>
+ <version>4.4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore-nio</artifactId>
+ <version>4.4</version>
+ </dependency>
+ <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.4</version>
=======================================
--- /phiz-web-core/pom.xml Mon Jan 26 17:11:24 2015 UTC
+++ /phiz-web-core/pom.xml Tue Feb 3 16:25:30 2015 UTC
@@ -60,6 +60,14 @@
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-servlet</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-servlets</artifactId>
+ </dependency>
+ <dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
</dependency>
@@ -188,21 +196,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpcore</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpcore-nio</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>test</scope>
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpEvent.java
Mon Jan 26 17:11:24 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpEvent.java
Tue Feb 3 16:25:30 2015 UTC
@@ -1,20 +1,22 @@
package gov.hhs.onc.phiz.web.logging;
import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import javax.annotation.Nullable;
+import org.springframework.http.HttpHeaders;
-public interface HttpEvent<T> {
- @JsonProperty("headers")
- public Map<String, List<String>> getHeaderMap();
-
- public Set<String> getHeaderNames();
+public interface HttpEvent {
+ @JsonProperty
+ @Nullable
+ public Long getContentLength();
- public List<String> getHeaders(String headerName);
+ public void setContentLength(@Nullable Long contentLen);
@JsonProperty
+ @Nullable
public String getContentType();
- public T getDescriptor();
+ public void setContentType(@Nullable String contentType);
+
+ @JsonProperty
+ public HttpHeaders getHeaders();
}
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpRequestEvent.java
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpRequestEvent.java
Tue Feb 3 16:25:30 2015 UTC
@@ -2,58 +2,102 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import gov.hhs.onc.phiz.logging.logstash.MarkerObjectFieldName;
-import javax.servlet.http.HttpServletRequest;
+import javax.annotation.Nullable;
+import org.springframework.http.HttpMethod;
@MarkerObjectFieldName("httpRequest")
-public interface HttpRequestEvent extends HttpEvent<HttpServletRequest> {
+public interface HttpRequestEvent extends HttpEvent {
@JsonProperty
+ @Nullable
public String getAuthType();
- @JsonProperty
- public long getContentLength();
+ public void setAuthType(@Nullable String authType);
@JsonProperty
+ @Nullable
public String getContextPath();
+ public void setContextPath(@Nullable String contextPath);
+
@JsonProperty
+ @Nullable
public String getLocalName();
+ public void setLocalName(@Nullable String localName);
+
@JsonProperty
- public int getLocalPort();
+ @Nullable
+ public Integer getLocalPort();
+
+ public void setLocalPort(@Nullable Integer localPort);
@JsonProperty
- public String getMethod();
+ public HttpMethod getMethod();
+
+ public void setMethod(HttpMethod method);
@JsonProperty
public String getPathInfo();
+ public void setPathInfo(String pathInfo);
+
@JsonProperty
public String getProtocol();
+ public void setProtocol(String protocol);
+
@JsonProperty
public String getQueryString();
+ public void setQueryString(String queryStr);
+
@JsonProperty
+ @Nullable
public String getRemoteAddr();
+ public void setRemoteAddr(@Nullable String remoteAddr);
+
+ @JsonProperty
+ public String getRemoteHost();
+
+ public void setRemoteHost(String remoteHost);
+
@JsonProperty
- public int getRemotePort();
+ public Integer getRemotePort();
+
+ public void setRemotePort(Integer remotePort);
@JsonProperty
public String getScheme();
+ public void setScheme(String scheme);
+
@JsonProperty
+ @Nullable
public String getServerName();
+ public void setServerName(@Nullable String serverName);
+
@JsonProperty
- public int getServerPort();
+ @Nullable
+ public Integer getServerPort();
+
+ public void setServerPort(@Nullable Integer serverPort);
@JsonProperty
+ @Nullable
public String getServletPath();
+ public void setServletPath(@Nullable String servletPath);
+
@JsonProperty
public String getUrl();
+ public void setUrl(String url);
+
@JsonProperty
+ @Nullable
public String getUserPrincipal();
+
+ public void setUserPrincipal(@Nullable String userPrincipal);
}
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpResponseEvent.java
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpResponseEvent.java
Tue Feb 3 16:25:30 2015 UTC
@@ -2,13 +2,12 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import gov.hhs.onc.phiz.logging.logstash.MarkerObjectFieldName;
-import javax.servlet.http.HttpServletResponse;
+import org.springframework.http.HttpStatus;
@MarkerObjectFieldName("httpResponse")
-public interface HttpResponseEvent extends HttpEvent<HttpServletResponse> {
+public interface HttpResponseEvent extends HttpEvent {
@JsonProperty
- public int getStatus();
-
- @JsonProperty
- public String getStatusMessage();
+ public HttpStatus getStatus();
+
+ public void setStatus(HttpStatus status);
}
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/AbstractHttpEvent.java
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/AbstractHttpEvent.java
Tue Feb 3 16:25:30 2015 UTC
@@ -1,29 +1,36 @@
package gov.hhs.onc.phiz.web.logging.impl;
import gov.hhs.onc.phiz.web.logging.HttpEvent;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
+import javax.annotation.Nullable;
+import org.springframework.http.HttpHeaders;
-public abstract class AbstractHttpEvent<T> implements HttpEvent<T> {
- protected T desc;
+public abstract class AbstractHttpEvent implements HttpEvent {
+ protected Long contentLen;
+ protected String contentType;
+ protected HttpHeaders headers = new HttpHeaders();
- protected AbstractHttpEvent(T desc) {
- this.desc = desc;
+ @Nullable
+ public Long getContentLength() {
+ return this.contentLen;
+ }
+
+ public void setContentLength(@Nullable Long contentLen) {
+ this.contentLen = contentLen;
}
+ @Nullable
@Override
- public Map<String, List<String>> getHeaderMap() {
- Map<String, List<String>> headers = new
TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-
- this.getHeaderNames().stream().forEach((headerName) ->
headers.put(headerName.toLowerCase(), new
ArrayList<>(this.getHeaders(headerName))));
+ public String getContentType() {
+ return this.contentType;
+ }
- return headers;
+ @Override
+ public void setContentType(@Nullable String contentType) {
+ this.contentType = contentType;
}
@Override
- public T getDescriptor() {
- return this.desc;
+ public HttpHeaders getHeaders() {
+ return this.headers;
}
}
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpRequestEventImpl.java
Mon Jan 26 17:11:24 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpRequestEventImpl.java
Tue Feb 3 16:25:30 2015 UTC
@@ -1,118 +1,204 @@
package gov.hhs.onc.phiz.web.logging.impl;
import gov.hhs.onc.phiz.web.logging.HttpRequestEvent;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import java.util.TreeSet;
-import javax.servlet.http.HttpServletRequest;
-import org.apache.commons.collections4.EnumerationUtils;
+import javax.annotation.Nullable;
+import org.springframework.http.HttpMethod;
-public class HttpRequestEventImpl extends
AbstractHttpEvent<HttpServletRequest> implements HttpRequestEvent {
- public HttpRequestEventImpl(HttpServletRequest desc) {
- super(desc);
+public class HttpRequestEventImpl extends AbstractHttpEvent implements
HttpRequestEvent {
+ private String authType;
+ private String contextPath;
+ private String localName;
+ private Integer localPort;
+ private HttpMethod method;
+ private String pathInfo;
+ private String protocol;
+ private String queryString;
+ private String remoteAddr;
+ private String remoteHost;
+ private Integer remotePort;
+ private String scheme;
+ private String serverName;
+ private Integer serverPort;
+ private String servletPath;
+ private String url;
+ private String userPrincipal;
+
+ @Nullable
+ @Override
+ public String getAuthType() {
+ return this.authType;
}
@Override
- public Set<String> getHeaderNames() {
- Set<String> headerNames = new
TreeSet<>(String.CASE_INSENSITIVE_ORDER);
-
headerNames.addAll(EnumerationUtils.toList(this.desc.getHeaderNames()));
-
- return headerNames;
+ public void setAuthType(@Nullable String authType) {
+ this.authType = authType;
}
+ @Nullable
@Override
- public List<String> getHeaders(String headerName) {
- return EnumerationUtils.toList(this.desc.getHeaders(headerName));
+ public String getContextPath() {
+ return this.contextPath;
}
@Override
- public String getAuthType() {
- return this.desc.getAuthType();
+ public void setContextPath(@Nullable String contextPath) {
+ this.contextPath = contextPath;
}
+ @Nullable
@Override
- public long getContentLength() {
- return this.desc.getContentLengthLong();
+ public String getLocalName() {
+ return this.localName;
}
@Override
- public String getContentType() {
- return this.desc.getContentType();
+ public void setLocalName(@Nullable String localName) {
+ this.localName = localName;
}
+ @Nullable
@Override
- public String getContextPath() {
- return this.desc.getContextPath();
+ public Integer getLocalPort() {
+ return this.localPort;
}
@Override
- public String getLocalName() {
- return this.desc.getLocalName();
+ public void setLocalPort(@Nullable Integer localPort) {
+ this.localPort = localPort;
}
@Override
- public int getLocalPort() {
- return this.desc.getLocalPort();
+ public HttpMethod getMethod() {
+ return this.method;
}
@Override
- public String getMethod() {
- return this.desc.getMethod();
+ public void setMethod(HttpMethod method) {
+ this.method = method;
}
@Override
public String getPathInfo() {
- return this.desc.getPathInfo();
+ return this.pathInfo;
+ }
+
+ @Override
+ public void setPathInfo(String pathInfo) {
+ this.pathInfo = pathInfo;
}
@Override
public String getProtocol() {
- return this.desc.getProtocol();
+ return this.protocol;
+ }
+
+ @Override
+ public void setProtocol(String protocol) {
+ this.protocol = protocol;
}
@Override
public String getQueryString() {
- return this.desc.getQueryString();
+ return this.queryString;
+ }
+
+ @Override
+ public void setQueryString(String queryString) {
+ this.queryString = queryString;
}
+ @Nullable
@Override
public String getRemoteAddr() {
- return this.desc.getRemoteAddr();
+ return this.remoteAddr;
+ }
+
+ @Override
+ public void setRemoteAddr(@Nullable String remoteAddr) {
+ this.remoteAddr = remoteAddr;
+ }
+
+ @Override
+ public String getRemoteHost() {
+ return this.remoteHost;
+ }
+
+ @Override
+ public void setRemoteHost(String remoteHost) {
+ this.remoteHost = remoteHost;
+ }
+
+ @Override
+ public Integer getRemotePort() {
+ return this.remotePort;
}
@Override
- public int getRemotePort() {
- return this.desc.getRemotePort();
+ public void setRemotePort(Integer remotePort) {
+ this.remotePort = remotePort;
}
@Override
public String getScheme() {
- return this.desc.getScheme();
+ return this.scheme;
+ }
+
+ @Override
+ public void setScheme(String scheme) {
+ this.scheme = scheme;
}
+ @Nullable
@Override
public String getServerName() {
- return this.desc.getServerName();
+ return this.serverName;
+ }
+
+ @Override
+ public void setServerName(@Nullable String serverName) {
+ this.serverName = serverName;
+ }
+
+ @Nullable
+ @Override
+ public Integer getServerPort() {
+ return this.serverPort;
}
@Override
- public int getServerPort() {
- return this.desc.getServerPort();
+ public void setServerPort(@Nullable Integer serverPort) {
+ this.serverPort = serverPort;
}
+ @Nullable
@Override
public String getServletPath() {
- return this.desc.getServletPath();
+ return this.servletPath;
+ }
+
+ @Override
+ public void setServletPath(@Nullable String servletPath) {
+ this.servletPath = servletPath;
}
@Override
public String getUrl() {
- return this.desc.getRequestURL().toString();
+ return this.url;
+ }
+
+ @Override
+ public void setUrl(String url) {
+ this.url = url;
}
+ @Nullable
@Override
public String getUserPrincipal() {
- return Objects.toString(this.desc.getUserPrincipal(), null);
+ return this.userPrincipal;
+ }
+
+ @Override
+ public void setUserPrincipal(@Nullable String userPrincipal) {
+ this.userPrincipal = userPrincipal;
}
}
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpResponseEventImpl.java
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpResponseEventImpl.java
Tue Feb 3 16:25:30 2015 UTC
@@ -1,43 +1,18 @@
package gov.hhs.onc.phiz.web.logging.impl;
import gov.hhs.onc.phiz.web.logging.HttpResponseEvent;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.tomcat.util.http.HttpMessages;
+import org.springframework.http.HttpStatus;
-public class HttpResponseEventImpl extends
AbstractHttpEvent<HttpServletResponse> implements HttpResponseEvent {
- public HttpResponseEventImpl(HttpServletResponse desc) {
- super(desc);
- }
+public class HttpResponseEventImpl extends AbstractHttpEvent implements
HttpResponseEvent {
+ private HttpStatus status;
@Override
- public Set<String> getHeaderNames() {
- Set<String> headerNames = new
TreeSet<>(String.CASE_INSENSITIVE_ORDER);
- headerNames.addAll(this.desc.getHeaderNames());
-
- return headerNames;
+ public HttpStatus getStatus() {
+ return this.status;
}
@Override
- public List<String> getHeaders(String headerName) {
- return new ArrayList<>(this.desc.getHeaders(headerName));
- }
-
- @Override
- public String getContentType() {
- return this.desc.getContentType();
- }
-
- @Override
- public int getStatus() {
- return this.desc.getStatus();
- }
-
- @Override
- public String getStatusMessage() {
- return
HttpMessages.getInstance(this.desc.getLocale()).getMessage(this.getStatus());
+ public void setStatus(HttpStatus status) {
+ this.status = status;
}
}
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/tomcat/impl/PhizTomcatEmbeddedServletContainerFactory.java
Thu Jan 22 06:01:46 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/tomcat/impl/PhizTomcatEmbeddedServletContainerFactory.java
Tue Feb 3 16:25:30 2015 UTC
@@ -1,32 +1,137 @@
package gov.hhs.onc.phiz.web.tomcat.impl;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Set;
+import java.util.stream.Collectors;
import javax.servlet.SessionTrackingMode;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.Context;
+import org.apache.catalina.Host;
+import org.apache.catalina.Service;
+import org.apache.catalina.Valve;
import org.apache.catalina.connector.Connector;
+import org.apache.catalina.connector.Request;
+import org.apache.catalina.connector.RequestFacade;
+import org.apache.catalina.connector.Response;
+import org.apache.catalina.connector.ResponseFacade;
+import org.apache.catalina.startup.Tomcat;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.coyote.http11.AbstractHttp11JsseProtocol;
import org.apache.coyote.http11.Http11NioProtocol;
import org.apache.tomcat.util.descriptor.web.LoginConfig;
import org.apache.tomcat.util.net.SSLImplementation;
import org.springframework.beans.BeanUtils;
+import org.springframework.boot.context.embedded.EmbeddedServletContainer;
import org.springframework.boot.context.embedded.ServletContextInitializer;
import org.springframework.boot.context.embedded.Ssl;
import
org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
+import org.springframework.core.annotation.AnnotationAwareOrderComparator;
public class PhizTomcatEmbeddedServletContainerFactory extends
TomcatEmbeddedServletContainerFactory {
+ public static class PhizRequestFacade extends RequestFacade {
+ private PhizRequest req;
+
+ public PhizRequestFacade(PhizRequest req) {
+ super(req);
+
+ this.req = req;
+ }
+
+ public PhizRequest getRequest() {
+ return this.req;
+ }
+ }
+
+ public static class PhizRequest extends Request {
+ @Override
+ public HttpServletRequest getRequest() {
+ return ((this.facade != null) ? this.facade : (this.facade =
new PhizRequestFacade(this)));
+ }
+ }
+
+ public static class PhizResponseFacade extends ResponseFacade {
+ private PhizResponse resp;
+
+ public PhizResponseFacade(PhizResponse resp) {
+ super(resp);
+
+ this.resp = resp;
+ }
+
+ public PhizResponse getResponse() {
+ return this.resp;
+ }
+ }
+
+ public static class PhizResponse extends Response {
+ @Override
+ public HttpServletResponse getResponse() {
+ return ((this.facade != null) ? this.facade : (this.facade =
new PhizResponseFacade(this)));
+ }
+ }
+
+ public static class PhizConnector extends Connector {
+ public PhizConnector() {
+ super(Http11NioProtocol.class.getName());
+ }
+
+ @Override
+ public Response createResponse() {
+ PhizResponse resp = new PhizResponse();
+ resp.setConnector(this);
+
+ return resp;
+ }
+
+ @Override
+ public Request createRequest() {
+ PhizRequest req = new PhizRequest();
+ req.setConnector(this);
+
+ return req;
+ }
+ }
+
private final static Ssl SSL_PLACEHOLDER_INSTANCE = new Ssl();
+ private File baseDir;
private int connTimeout;
private int maxConns;
private int maxConnThreads;
private LoginConfig loginConfig;
private PhizSessionConfig sessionConfig;
private Class<? extends SSLImplementation> sslImplClass;
+ private Tomcat tomcat;
+ private PhizConnector conn;
{
this.setSsl(SSL_PLACEHOLDER_INSTANCE);
}
+
+ @Override
+ public EmbeddedServletContainer
getEmbeddedServletContainer(ServletContextInitializer ...
servletContextInits) {
+ (this.tomcat = new
Tomcat()).setBaseDir(this.baseDir.getAbsolutePath());
+
+ Service service = this.tomcat.getService();
+ service.addConnector((this.conn = new PhizConnector()));
+
+ this.customizeConnector(this.conn);
+ this.tomcat.setConnector(this.conn);
+
+ Host host = this.tomcat.getHost();
+ host.setAutoDeploy(false);
+
+ this.tomcat.getEngine().setBackgroundProcessorDelay(-1);
+
+
this.getAdditionalTomcatConnectors().forEach(service::addConnector);
+
+ this.prepareContext(host, servletContextInits);
+
+ return this.getTomcatEmbeddedServletContainer(this.tomcat);
+ }
@Override
protected void customizeConnector(Connector conn) {
@@ -64,6 +169,15 @@
effectiveSessionTrackingModes.addAll(this.sessionConfig.getTrackingModes());
})));
}
+
+ public File getBaseDirectory() {
+ return this.baseDir;
+ }
+
+ @Override
+ public void setBaseDirectory(File baseDir) {
+ super.setBaseDirectory((this.baseDir = baseDir));
+ }
public int getConnectionTimeout() {
return this.connTimeout;
@@ -72,6 +186,16 @@
public void setConnectionTimeout(int connTimeout) {
this.connTimeout = connTimeout;
}
+
+ public PhizConnector getConnector() {
+ return this.conn;
+ }
+
+ @Override
+ public void setContextValves(Collection<? extends Valve>
contextValves) {
+ super.setContextValves(((contextValves.size() > 1) ?
contextValves.stream().sorted(AnnotationAwareOrderComparator.INSTANCE)
+ .collect(Collectors.toCollection(ArrayList<Valve>::new)) :
contextValves));
+ }
public LoginConfig getLoginConfig() {
return this.loginConfig;
@@ -117,4 +241,8 @@
public void setSslImplementationClass(Class<? extends
SSLImplementation> sslImplClass) {
this.sslImplClass = sslImplClass;
}
+
+ public Tomcat getTomcat() {
+ return this.tomcat;
+ }
}
=======================================
--- /phiz-web-core/src/main/resources/META-INF/phiz/phiz-web.properties Fri
Jan 9 01:16:51 2015 UTC
+++ /phiz-web-core/src/main/resources/META-INF/phiz/phiz-web.properties Tue
Feb 3 16:25:30 2015 UTC
@@ -8,9 +8,9 @@
#================================================================================
# TOMCAT CONNECTIONS
#================================================================================
-phiz.tomcat.conn.max=15000
+phiz.tomcat.conn.max=20000
phiz.tomcat.conn.thread.max=512
-phiz.tomcat.conn.timeout=#{
T(org.apache.commons.lang3.time.DateUtils).MILLIS_PER_SECOND * 15 }
+phiz.tomcat.conn.timeout=#{ 15 *
T(org.apache.commons.lang3.time.DateUtils).MILLIS_PER_SECOND }
#================================================================================
# TOMCAT SESSION
=======================================
---
/phiz-web-core/src/main/resources/META-INF/phiz/spring/spring-phiz-web-tomcat.xml
Fri Jan 9 08:17:07 2015 UTC
+++
/phiz-web-core/src/main/resources/META-INF/phiz/spring/spring-phiz-web-tomcat.xml
Tue Feb 3 16:25:30 2015 UTC
@@ -132,6 +132,11 @@
<beans:bean
class="org.apache.catalina.core.JreMemoryLeakPreventionListener"
parent="lifecycleListener"/>
<beans:bean
class="org.apache.catalina.core.ThreadLocalLeakPreventionListener"
parent="lifecycleListener"/>
</beans:list>
+ </beans:property>
+ <beans:property name="contextValves">
+ <beans:list>
+ <beans:ref bean="valveMetrics"/>
+ </beans:list>
</beans:property>
<beans:property name="loginConfig">
<!--suppress SpringPlaceholdersInspection -->
=======================================
--- /phiz-web-parent/pom.xml Mon Jan 26 17:11:24 2015 UTC
+++ /phiz-web-parent/pom.xml Tue Feb 3 16:25:30 2015 UTC
@@ -106,6 +106,16 @@
<version>3.3</version>
</dependency>
<dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-servlet</artifactId>
+ <version>3.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>io.dropwizard.metrics</groupId>
+ <artifactId>metrics-servlets</artifactId>
+ <version>3.1.0</version>
+ </dependency>
+ <dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
@@ -274,24 +284,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>4.3.6</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpcore</artifactId>
- <version>4.4</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpcore-nio</artifactId>
- <version>4.4</version>
- <scope>test</scope>
- </dependency>
- <dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.9</version>
=======================================
--- /phiz-web-ws/pom.xml Sun Jan 25 19:49:30 2015 UTC
+++ /phiz-web-ws/pom.xml Tue Feb 3 16:25:30 2015 UTC
@@ -120,6 +120,10 @@
<artifactId>cxf-rt-transports-http</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-transports-http-hc</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-addr</artifactId>
</dependency>
@@ -128,6 +132,22 @@
<artifactId>cxf-rt-ws-policy</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpasyncclient</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore-nio</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<scope>provided</scope>
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
Tue Feb 3 16:25:30 2015 UTC
@@ -1,19 +1,26 @@
package gov.hhs.onc.phiz.web.ws.feature.impl;
-import com.fasterxml.jackson.annotation.JsonProperty;
import com.github.sebhoss.warnings.CompilerWarnings;
import com.sun.xml.ws.encoding.soap.SOAP12Constants;
-import gov.hhs.onc.phiz.logging.logstash.MarkerObjectFieldName;
import gov.hhs.onc.phiz.logging.logstash.impl.PhizLogstashMarkers;
-import gov.hhs.onc.phiz.web.PhizHttpRequestMethods;
import gov.hhs.onc.phiz.web.logging.HttpEvent;
import gov.hhs.onc.phiz.web.logging.HttpRequestEvent;
import gov.hhs.onc.phiz.web.logging.HttpResponseEvent;
import gov.hhs.onc.phiz.web.logging.impl.HttpRequestEventImpl;
import gov.hhs.onc.phiz.web.logging.impl.HttpResponseEventImpl;
+import
gov.hhs.onc.phiz.web.tomcat.impl.PhizTomcatEmbeddedServletContainerFactory.PhizRequest;
+import
gov.hhs.onc.phiz.web.tomcat.impl.PhizTomcatEmbeddedServletContainerFactory.PhizRequestFacade;
+import
gov.hhs.onc.phiz.web.tomcat.impl.PhizTomcatEmbeddedServletContainerFactory.PhizResponse;
+import
gov.hhs.onc.phiz.web.tomcat.impl.PhizTomcatEmbeddedServletContainerFactory.PhizResponseFacade;
+import gov.hhs.onc.phiz.web.ws.PhizWsEndpointType;
import gov.hhs.onc.phiz.web.ws.PhizWsMessageContextProperties;
import gov.hhs.onc.phiz.web.ws.PhizWsMessageDirection;
import
gov.hhs.onc.phiz.web.ws.interceptor.impl.AbstractPhizSoapInterceptor;
+import gov.hhs.onc.phiz.web.ws.logging.WsMessageEvent;
+import gov.hhs.onc.phiz.web.ws.logging.WsRequestMessageEvent;
+import gov.hhs.onc.phiz.web.ws.logging.WsResponseMessageEvent;
+import gov.hhs.onc.phiz.web.ws.logging.impl.WsRequestMessageEventImpl;
+import gov.hhs.onc.phiz.web.ws.logging.impl.WsResponseMessageEventImpl;
import gov.hhs.onc.phiz.web.ws.utils.PhizWsUtils;
import gov.hhs.onc.phiz.xml.utils.PhizXmlUtils;
import gov.hhs.onc.phiz.xml.utils.PhizXmlUtils.HideContentDomStreamFilter;
@@ -21,6 +28,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -29,20 +37,18 @@
import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiConsumer;
-import java.util.function.BiFunction;
-import java.util.function.Function;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.collections4.EnumerationUtils;
import org.apache.cxf.Bus;
import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.endpoint.Server;
import org.apache.cxf.feature.AbstractFeature;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.Fault;
-import org.apache.cxf.interceptor.InterceptorProvider;
import org.apache.cxf.interceptor.StaxOutInterceptor;
import org.apache.cxf.io.CacheAndWriteOutputStream;
import org.apache.cxf.io.CachedOutputStream;
@@ -50,242 +56,210 @@
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.Service;
+import org.apache.cxf.transport.http.AbstractHTTPDestination;
+import org.apache.cxf.transport.http.Headers;
+import org.apache.cxf.ws.policy.PolicyConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class PhizLoggingFeature extends AbstractFeature {
- private static abstract class AbstractWsMessageEvent {
- protected int eventId;
- protected String endpointAddr;
- protected Map<String, Object> soapFault;
- protected Map<String, Object> soapHeaders;
- protected String payload;
+ private abstract class AbstractPhizLoggingInterceptor<T extends
HttpEvent, U extends WsMessageEvent> extends AbstractPhizSoapInterceptor {
+ protected Logger logger;
+ protected Supplier<T> httpEventSupplier;
+ protected Supplier<U> wsMsgEventSupplier;
- protected AbstractWsMessageEvent(String endpointAddr, int eventId)
{
- this.endpointAddr = endpointAddr;
- this.eventId = eventId;
+ protected AbstractPhizLoggingInterceptor(String phase, Logger
logger, Supplier<T> httpEventSupplier, Supplier<U> wsMsgEventSupplier) {
+ super(phase);
+
+ this.logger = logger;
+ this.httpEventSupplier = httpEventSupplier;
+ this.wsMsgEventSupplier = wsMsgEventSupplier;
}
@Override
- public String toString() {
- return String.format("%s message (eventId=%d, endpointAddr=%s,
soapHeaders=%s, soapFault=%s):\n%s",
-
StringUtils.capitalize(this.getDirection().name().toLowerCase()),
this.eventId, this.endpointAddr, this.soapHeaders, this.soapFault,
- this.payload);
- }
+ public void handleMessage(SoapMessage msg) throws Fault {
+ if (msg.containsKey(WS_MSG_EVENT_ID_PROP_NAME)) {
+ return;
+ }
- @JsonProperty
- public String getEndpointAddress() {
- return this.endpointAddr;
- }
+ Exchange msgExchange = msg.getExchange();
- @JsonProperty
- public int getEventId() {
- return this.eventId;
- }
+ if (!msgExchange.containsKey(WS_MSG_EVENT_ID_PROP_NAME)) {
+ msgExchange.put(WS_MSG_EVENT_ID_PROP_NAME,
WS_MSG_EVENT_ID.incrementAndGet());
+ }
- public abstract PhizWsMessageDirection getDirection();
+ // noinspection ConstantConditions
+ int wsMsgEventId = PhizWsUtils.getProperty(msg.getExchange(),
WS_MSG_EVENT_ID_PROP_NAME, Integer.class);
+ msg.put(WS_MSG_EVENT_ID_PROP_NAME, wsMsgEventId);
- @JsonProperty
- public String getPayload() {
- return this.payload;
+ try {
+ this.handleMessageInternal(msg, this.createHttpEvent(msg),
this.createWsMessageEvent(msg, wsMsgEventId));
+ } catch (Fault e) {
+ throw e;
+ } catch (Exception e) {
+ throw new Fault(e);
+ }
}
- public void setPayload(String payload) {
- this.payload = payload;
- }
+ protected abstract void handleMessageInternal(SoapMessage msg, T
httpEvent, U wsMsgEvent) throws Exception;
- @JsonProperty
- public Map<String, Object> getSoapFault() {
- return this.soapFault;
- }
+ protected U createWsMessageEvent(SoapMessage msg, int
wsMsgEventId) {
+ U wsMsgEvent = this.wsMsgEventSupplier.get();
+
wsMsgEvent.setEndpointAddress(msg.getExchange().getEndpoint().getEndpointInfo().getAddress());
+ wsMsgEvent.setEventId(wsMsgEventId);
+ wsMsgEvent.setLogger(this.logger);
- public void setSoapFault(Map<String, Object> soapFault) {
- this.soapFault = soapFault;
+ return wsMsgEvent;
}
- @JsonProperty
- public Map<String, Object> getSoapHeaders() {
- return this.soapHeaders;
- }
-
- public void setSoapHeaders(Map<String, Object> soapHeaders) {
- this.soapHeaders = soapHeaders;
+ protected T createHttpEvent(SoapMessage msg) {
+ return this.httpEventSupplier.get();
}
}
- @MarkerObjectFieldName("wsRequest")
- private static class WsRequestMessageEvent extends
AbstractWsMessageEvent {
- public WsRequestMessageEvent(String endpointAddr, int eventId) {
- super(endpointAddr, eventId);
+ private abstract class AbstractPhizLoggingInInterceptor<T extends
HttpEvent, U extends WsMessageEvent> extends
AbstractPhizLoggingInterceptor<T, U> {
+ @SuppressWarnings({ CompilerWarnings.UNCHECKED })
+ protected AbstractPhizLoggingInInterceptor(Logger logger,
Supplier<T> httpEventSupplier, Supplier<U> wsMsgEventSupplier) {
+ super(Phase.RECEIVE, logger, httpEventSupplier,
wsMsgEventSupplier);
+
+ this.setBefore(PolicyConstants.POLICY_IN_INTERCEPTOR_ID);
}
@Override
- public PhizWsMessageDirection getDirection() {
- return PhizWsMessageDirection.INBOUND;
- }
- }
+ protected void handleMessageInternal(SoapMessage msg, T httpEvent,
U wsMsgEvent) throws Exception {
+ try (InputStream msgPayloadInStream =
PhizWsUtils.getCachedInputStream(msg)) {
+ Document msgPayloadDoc =
PhizXmlUtils.read(msgPayloadInStream,
IgnoreWhitespaceStreamFilter.INSTANCE);
+ Element msgPayloadDocElem =
msgPayloadDoc.getDocumentElement();
- @MarkerObjectFieldName("wsResponse")
- private static class WsResponseMessageEvent extends
AbstractWsMessageEvent {
- public WsResponseMessageEvent(String endpointAddr, int eventId) {
- super(endpointAddr, eventId);
+ PhizLoggingFeature.populateSoapHeaders(wsMsgEvent,
msgPayloadDocElem);
+ PhizLoggingFeature.populateSoapFault(wsMsgEvent,
msgPayloadDocElem);
+
+ PhizLoggingFeature.this.logMessage(msg, httpEvent,
wsMsgEvent, msgPayloadDoc);
+ }
}
@Override
- public PhizWsMessageDirection getDirection() {
- return PhizWsMessageDirection.OUTBOUND;
+ protected U createWsMessageEvent(SoapMessage msg, int
wsMsgEventId) {
+ U wsMsgEvent = super.createWsMessageEvent(msg, wsMsgEventId);
+ wsMsgEvent.setDirection(PhizWsMessageDirection.INBOUND);
+
+ return wsMsgEvent;
}
}
- private abstract class AbstractPhizLoggingInterceptor<T, U extends
HttpEvent<T>, V extends AbstractWsMessageEvent> extends
AbstractPhizSoapInterceptor {
- protected Function<Message, T> httpEventDescSupplier;
- protected Function<T, U> httpEventSupplier;
- protected BiFunction<String, Integer, V> wsMsgEventSupplier;
-
- protected AbstractPhizLoggingInterceptor(String phase,
Function<Message, T> httpEventDescSupplier, Function<T, U>
httpEventSupplier,
- BiFunction<String, Integer, V> wsMsgEventSupplier) {
- super(phase);
-
- this.httpEventDescSupplier = httpEventDescSupplier;
- this.httpEventSupplier = httpEventSupplier;
- this.wsMsgEventSupplier = wsMsgEventSupplier;
+ private class PhizServerLoggingInInterceptor extends
AbstractPhizLoggingInInterceptor<HttpRequestEvent, WsRequestMessageEvent> {
+ public PhizServerLoggingInInterceptor(Logger logger) {
+ super(logger, HttpRequestEventImpl::new,
WsRequestMessageEventImpl::new);
}
@Override
public void handleMessage(SoapMessage msg) throws Fault {
- Exchange msgExchange = msg.getExchange();
-
- if (!msgExchange.containsKey(WS_MSG_EVENT_ID_PROP_NAME)) {
- msgExchange.put(WS_MSG_EVENT_ID_PROP_NAME,
WS_MSG_EVENT_ID.incrementAndGet());
+ if (!Objects.equals(msg.get(Message.HTTP_REQUEST_METHOD),
HttpMethod.POST.name())) {
+ return;
}
- try {
- this.handleMessageInternal(
- msg,
-
this.httpEventSupplier.apply(this.httpEventDescSupplier.apply(msg)),
-
this.wsMsgEventSupplier.apply(msg.getExchange().getEndpoint().getEndpointInfo().getAddress(),
- PhizWsUtils.getProperty(msgExchange,
WS_MSG_EVENT_ID_PROP_NAME, Integer.class)));
- } catch (Fault e) {
- throw e;
- } catch (Exception e) {
- throw new Fault(e);
- }
+ super.handleMessage(msg);
}
- protected abstract void handleMessageInternal(SoapMessage msg, U
httpEvent, V wsMsgEvent) throws Exception;
+ @Override
+ protected WsRequestMessageEvent createWsMessageEvent(SoapMessage
msg, int wsMsgEventId) {
+ WsRequestMessageEvent wsMsgEvent =
super.createWsMessageEvent(msg, wsMsgEventId);
+ wsMsgEvent.setEndpointType(PhizWsEndpointType.SERVER);
- protected void populateSoapFault(V wsMsgEvent, Element
msgPayloadDocElem) {
- Element msgSoapFaultElem =
-
DOMUtils.getFirstChildWithName(DOMUtils.getFirstChildWithName(msgPayloadDocElem,
SOAP12Constants.QNAME_SOAP_BODY),
- SOAP12Constants.QNAME_SOAP_FAULT);
+ return wsMsgEvent;
+ }
- if (msgSoapFaultElem != null) {
- Map<String, Object> msgSoapFaultContentMap = new
TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+ @Override
+ protected HttpRequestEvent createHttpEvent(SoapMessage msg) {
+ // noinspection ConstantConditions
+ PhizRequest httpServletReq = PhizWsUtils.getProperty(msg,
AbstractHTTPDestination.HTTP_REQUEST, PhizRequestFacade.class).getRequest();
-
Optional.ofNullable(DOMUtils.getFirstChildWithName(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_CODE)).ifPresent(
- (msgSoapFaultCodeElem) ->
msgSoapFaultContentMap.put(SOAP12Constants.QNAME_FAULT_CODE.getLocalPart(),
-
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultCodeElem,
SOAP12Constants.QNAME_FAULT_VALUE))));
+ HttpRequestEvent httpEvent = super.createHttpEvent(msg);
+ // noinspection ConstantConditions
+ httpEvent.setAuthType(httpServletReq.getAuthType());
+
httpEvent.setContentLength(httpServletReq.getContentLengthLong());
+ httpEvent.setContentType(httpServletReq.getContentType());
+ httpEvent.setContextPath(httpServletReq.getContextPath());
+ httpEvent.setLocalName(httpServletReq.getLocalName());
+ httpEvent.setLocalPort(httpServletReq.getLocalPort());
+ httpEvent.setMethod(HttpMethod.POST);
+ httpEvent.setPathInfo(httpServletReq.getPathInfo());
+ httpEvent.setProtocol(httpServletReq.getProtocol());
+ httpEvent.setQueryString(httpServletReq.getQueryString());
+ httpEvent.setRemoteAddr(httpServletReq.getRemoteAddr());
+ httpEvent.setRemoteHost(httpServletReq.getRemoteHost());
+ httpEvent.setRemotePort(httpServletReq.getRemotePort());
+ httpEvent.setScheme(httpServletReq.getScheme());
+ httpEvent.setServerName(httpServletReq.getServerName());
+ httpEvent.setServerPort(httpServletReq.getServerPort());
+ httpEvent.setServletPath(httpServletReq.getServletPath());
+ httpEvent.setUrl(httpServletReq.getRequestURL().toString());
+
httpEvent.setUserPrincipal(Objects.toString(httpServletReq.getUserPrincipal(),
null));
- List<Element> msgSoapFaultSubcodeElems =
PhizXmlUtils.findElements(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_SUBCODE);
+ HttpHeaders httpHeaders = httpEvent.getHeaders();
- if (!msgSoapFaultSubcodeElems.isEmpty()) {
- msgSoapFaultContentMap.put(
- SOAP12Constants.QNAME_FAULT_SUBCODE.getLocalPart(),
- msgSoapFaultSubcodeElems
- .stream()
- .map(
- (msgSoapFaultSubcodeElem) ->
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultSubcodeElem,
-
SOAP12Constants.QNAME_FAULT_VALUE))).collect(Collectors.toList()));
- }
+
EnumerationUtils.toList(httpServletReq.getHeaderNames()).stream()
+ .forEach(httpHeaderName -> httpHeaders.put(httpHeaderName,
EnumerationUtils.toList(httpServletReq.getHeaders(httpHeaderName))));
-
Optional.ofNullable(DOMUtils.getFirstChildWithName(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_REASON)).ifPresent(
- (msgSoapFaultReasonElem) ->
msgSoapFaultContentMap.put(SOAP12Constants.QNAME_FAULT_REASON.getLocalPart(),
-
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultReasonElem,
SOAP12Constants.QNAME_FAULT_REASON_TEXT))));
-
-
Optional.ofNullable(DOMUtils.getFirstChildWithName(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_DETAIL)).ifPresent(
- (msgSoapFaultDetailElem) -> {
- List<Element> msgSoapFaultDetailChildElems =
DomUtils.getChildElements(msgSoapFaultDetailElem);
-
- if (!msgSoapFaultDetailChildElems.isEmpty()) {
- msgSoapFaultContentMap.put(
-
SOAP12Constants.QNAME_FAULT_DETAIL.getLocalPart(),
- PhizXmlUtils.mapTreeContent(() -> new
TreeMap<>(String.CASE_INSENSITIVE_ORDER),
-
msgSoapFaultDetailChildElems.toArray(new
Element[msgSoapFaultDetailChildElems.size()])));
- }
- });
-
- wsMsgEvent.setSoapFault(msgSoapFaultContentMap);
- }
- }
-
- protected void populateSoapHeaders(V wsMsgEvent, Element
msgPayloadDocElem) {
- Element[] msgSoapHeaderElems =
- PhizXmlUtils.findElements(msgPayloadDocElem,
SOAP12Constants.QNAME_SOAP_HEADER).stream()
- .flatMap((msgSoapHeaderContainerElem) ->
DomUtils.getChildElements(msgSoapHeaderContainerElem).stream()).toArray(Element[]::new);
-
- if (msgSoapHeaderElems.length > 0) {
- wsMsgEvent.setSoapHeaders(PhizXmlUtils.mapTreeContent(()
-> new TreeMap<>(String.CASE_INSENSITIVE_ORDER), msgSoapHeaderElems));
- }
+ return httpEvent;
}
}
- private class PhizLoggingInInterceptor extends
AbstractPhizLoggingInterceptor<HttpServletRequest, HttpRequestEvent,
WsRequestMessageEvent> {
- public PhizLoggingInInterceptor() {
- super(Phase.RECEIVE, PhizWsUtils::getHttpServletRequest,
HttpRequestEventImpl::new, WsRequestMessageEvent::new);
+ private class PhizClientLoggingInInterceptor extends
AbstractPhizLoggingInInterceptor<HttpResponseEvent, WsResponseMessageEvent>
{
+ public PhizClientLoggingInInterceptor(Logger logger) {
+ super(logger, HttpResponseEventImpl::new,
WsResponseMessageEventImpl::new);
}
@Override
- public void handleMessage(SoapMessage msg) throws Fault {
- if (!Objects.equals(msg.get(Message.HTTP_REQUEST_METHOD),
PhizHttpRequestMethods.POST) || msg.containsKey(WS_MSG_EVENT_ID_PROP_NAME))
{
- return;
- }
+ protected WsResponseMessageEvent createWsMessageEvent(SoapMessage
msg, int wsMsgEventId) {
+ WsResponseMessageEvent wsMsgEvent =
super.createWsMessageEvent(msg, wsMsgEventId);
+ wsMsgEvent.setEndpointType(PhizWsEndpointType.CLIENT);
- super.handleMessage(msg);
+ return wsMsgEvent;
}
@Override
- protected void handleMessageInternal(SoapMessage msg,
HttpRequestEvent httpEvent, WsRequestMessageEvent wsMsgEvent) throws
Exception {
- msg.put(WS_MSG_EVENT_ID_PROP_NAME, wsMsgEvent.getEventId());
-
- try (InputStream msgPayloadInStream =
PhizWsUtils.getCachedInputStream(msg)) {
- Document msgPayloadDoc =
PhizXmlUtils.read(msgPayloadInStream,
IgnoreWhitespaceStreamFilter.INSTANCE);
- Element msgPayloadDocElem =
msgPayloadDoc.getDocumentElement();
-
- this.populateSoapHeaders(wsMsgEvent, msgPayloadDocElem);
- this.populateSoapFault(wsMsgEvent, msgPayloadDocElem);
+ protected HttpResponseEvent createHttpEvent(SoapMessage msg) {
+ HttpResponseEvent httpEvent = super.createHttpEvent(msg);
+ httpEvent.setContentType(PhizWsUtils.getProperty(msg,
Message.CONTENT_TYPE));
+
httpEvent.getHeaders().putAll(Headers.getSetProtocolHeaders(msg));
+ // noinspection ConstantConditions
+
httpEvent.setStatus(HttpStatus.valueOf(PhizWsUtils.getProperty(msg,
Message.RESPONSE_CODE, Integer.class)));
- PhizLoggingFeature.this.logMessage(msg, httpEvent,
wsMsgEvent, msgPayloadDoc);
- }
+ return httpEvent;
}
}
- private class PhizLoggingOutCallback implements
CachedOutputStreamCallback {
+ private class PhizLoggingOutCallback<T extends HttpEvent, U extends
WsMessageEvent> implements CachedOutputStreamCallback {
private SoapMessage msg;
- private HttpResponseEvent httpEvent;
- private WsResponseMessageEvent wsMsgEvent;
- private BiConsumer<WsResponseMessageEvent, Element>
populateSoapHeadersConsumer;
- private BiConsumer<WsResponseMessageEvent, Element>
populateSoapFaultsConsumer;
+ private T httpEvent;
+ private U wsMsgEvent;
+ private BiConsumer<SoapMessage, T> httpEventPopulator;
- public PhizLoggingOutCallback(SoapMessage msg, HttpResponseEvent
httpEvent, WsResponseMessageEvent wsMsgEvent,
- BiConsumer<WsResponseMessageEvent, Element>
populateSoapHeadersConsumer, BiConsumer<WsResponseMessageEvent, Element>
populateSoapFaultsConsumer) {
+ public PhizLoggingOutCallback(SoapMessage msg, T httpEvent, U
wsMsgEvent, BiConsumer<SoapMessage, T> httpEventPopulator) {
this.msg = msg;
this.httpEvent = httpEvent;
this.wsMsgEvent = wsMsgEvent;
- this.populateSoapHeadersConsumer = populateSoapHeadersConsumer;
- this.populateSoapFaultsConsumer = populateSoapFaultsConsumer;
+ this.httpEventPopulator = httpEventPopulator;
}
@Override
public void onClose(CachedOutputStream msgPayloadOutStream) {
+ this.httpEventPopulator.accept(this.msg, this.httpEvent);
+
try (InputStream msgPayloadInStream =
msgPayloadOutStream.getInputStream()) {
Document msgPayloadDoc =
PhizXmlUtils.read(msgPayloadInStream,
IgnoreWhitespaceStreamFilter.INSTANCE);
Element msgPayloadDocElem =
msgPayloadDoc.getDocumentElement();
- this.populateSoapHeadersConsumer.accept(this.wsMsgEvent,
msgPayloadDocElem);
- this.populateSoapFaultsConsumer.accept(this.wsMsgEvent,
msgPayloadDocElem);
+ PhizLoggingFeature.populateSoapHeaders(this.wsMsgEvent,
msgPayloadDocElem);
+ PhizLoggingFeature.populateSoapFault(this.wsMsgEvent,
msgPayloadDocElem);
PhizLoggingFeature.this.logMessage(this.msg,
this.httpEvent, this.wsMsgEvent, msgPayloadDoc);
} catch (IOException | XMLStreamException e) {
@@ -298,49 +272,208 @@
}
}
- private class PhizLoggingOutInterceptor extends
AbstractPhizLoggingInterceptor<HttpServletResponse, HttpResponseEvent,
WsResponseMessageEvent> {
+ private abstract class AbstractPhizLoggingOutInterceptor<T extends
HttpEvent, U extends WsMessageEvent> extends
AbstractPhizLoggingInterceptor<T, U> {
@SuppressWarnings({ CompilerWarnings.UNCHECKED })
- public PhizLoggingOutInterceptor() {
- super(Phase.PRE_STREAM, PhizWsUtils::getHttpServletResponse,
HttpResponseEventImpl::new, WsResponseMessageEvent::new);
+ protected AbstractPhizLoggingOutInterceptor(Logger logger,
Supplier<T> httpEventSupplier, Supplier<U> wsMsgEventSupplier) {
+ super(Phase.PRE_STREAM, logger, httpEventSupplier,
wsMsgEventSupplier);
this.setBeforeClasses(StaxOutInterceptor.class);
}
+
+ protected abstract PhizLoggingOutCallback<T, U>
createCallback(SoapMessage msg, T httpEvent, U wsMsgEvent);
+
+ @Override
+ protected U createWsMessageEvent(SoapMessage msg, int
wsMsgEventId) {
+ U wsMsgEvent = super.createWsMessageEvent(msg, wsMsgEventId);
+ wsMsgEvent.setDirection(PhizWsMessageDirection.OUTBOUND);
+
+ return wsMsgEvent;
+ }
+ }
+
+ private class PhizServerLoggingOutInterceptor extends
AbstractPhizLoggingOutInterceptor<HttpResponseEvent,
WsResponseMessageEvent> {
+ public PhizServerLoggingOutInterceptor(Logger logger) {
+ super(logger, HttpResponseEventImpl::new,
WsResponseMessageEventImpl::new);
+ }
@Override
protected void handleMessageInternal(SoapMessage msg,
HttpResponseEvent httpEvent, WsResponseMessageEvent wsMsgEvent) throws
Exception {
CacheAndWriteOutputStream msgPayloadOutStream = new
CacheAndWriteOutputStream(msg.getContent(OutputStream.class));
- msgPayloadOutStream.registerCallback(new
PhizLoggingOutCallback(msg, httpEvent, wsMsgEvent,
this::populateSoapHeaders, this::populateSoapFault));
+ msgPayloadOutStream.registerCallback(this.createCallback(msg,
httpEvent, wsMsgEvent));
+ msg.setContent(OutputStream.class, msgPayloadOutStream);
+ }
+
+ @Override
+ protected PhizLoggingOutCallback<HttpResponseEvent,
WsResponseMessageEvent> createCallback(SoapMessage msg, HttpResponseEvent
httpEvent,
+ WsResponseMessageEvent wsMsgEvent) {
+ // noinspection ConstantConditions
+ PhizResponse httpServletResp = PhizWsUtils.getProperty(msg,
AbstractHTTPDestination.HTTP_RESPONSE,
PhizResponseFacade.class).getResponse();
+
+ return new PhizLoggingOutCallback<>(msg, httpEvent,
wsMsgEvent, (callbackMsg, callbackHttpEvent) -> {
+ // noinspection ConstantConditions
+
httpEvent.setContentLength(httpServletResp.getCoyoteResponse().getContentLengthLong());
+ // noinspection ConstantConditions
+ httpEvent.setContentType(httpServletResp.getContentType());
+ // noinspection ConstantConditions
+
httpEvent.setStatus(HttpStatus.valueOf(httpServletResp.getStatus()));
+
+ HttpHeaders httpHeaders = httpEvent.getHeaders();
+
+ httpServletResp.getHeaderNames().stream()
+ .forEach(httpHeaderName ->
httpHeaders.put(httpHeaderName, new
ArrayList<>(httpServletResp.getHeaders(httpHeaderName))));
+ });
+ }
+
+ @Override
+ protected WsResponseMessageEvent createWsMessageEvent(SoapMessage
msg, int wsMsgEventId) {
+ WsResponseMessageEvent wsMsgEvent =
super.createWsMessageEvent(msg, wsMsgEventId);
+ wsMsgEvent.setEndpointType(PhizWsEndpointType.SERVER);
+
+ return wsMsgEvent;
+ }
+ }
+
+ private class PhizClientLoggingOutInterceptor extends
AbstractPhizLoggingOutInterceptor<HttpRequestEvent, WsRequestMessageEvent> {
+ public PhizClientLoggingOutInterceptor(Logger logger) {
+ super(logger, HttpRequestEventImpl::new,
WsRequestMessageEventImpl::new);
+ }
+
+ @Override
+ public void handleMessage(SoapMessage msg) throws Fault {
+ if (!Objects.equals(msg.get(Message.HTTP_REQUEST_METHOD),
HttpMethod.POST.name())) {
+ return;
+ }
+
+ super.handleMessage(msg);
+ }
+
+ @Override
+ protected void handleMessageInternal(SoapMessage msg,
HttpRequestEvent httpEvent, WsRequestMessageEvent wsMsgEvent) throws
Exception {
+ CacheAndWriteOutputStream msgPayloadOutStream = new
CacheAndWriteOutputStream(msg.getContent(OutputStream.class));
+ msgPayloadOutStream.registerCallback(this.createCallback(msg,
httpEvent, wsMsgEvent));
msg.setContent(OutputStream.class, msgPayloadOutStream);
}
+
+ @Override
+ protected PhizLoggingOutCallback<HttpRequestEvent,
WsRequestMessageEvent> createCallback(SoapMessage msg, HttpRequestEvent
httpEvent,
+ WsRequestMessageEvent wsMsgEvent) {
+ return new PhizLoggingOutCallback<>(msg, httpEvent,
wsMsgEvent, (callbackMsg, callbackHttpEvent) -> {
+ httpEvent.setContentType(PhizWsUtils.getProperty(msg,
Message.CONTENT_TYPE));
+
httpEvent.getHeaders().putAll(Headers.getSetProtocolHeaders(msg));
+
httpEvent.setMethod(HttpMethod.valueOf(PhizWsUtils.getProperty(msg,
Message.HTTP_REQUEST_METHOD)));
+ httpEvent.setPathInfo(PhizWsUtils.getProperty(msg,
Message.PATH_INFO));
+ httpEvent.setQueryString(PhizWsUtils.getProperty(msg,
Message.QUERY_STRING));
+ httpEvent.setUrl(PhizWsUtils.getProperty(msg,
Message.REQUEST_URL));
+ });
+ }
+
+ @Override
+ protected WsRequestMessageEvent createWsMessageEvent(SoapMessage
msg, int wsMsgEventId) {
+ WsRequestMessageEvent wsMsgEvent =
super.createWsMessageEvent(msg, wsMsgEventId);
+ wsMsgEvent.setEndpointType(PhizWsEndpointType.CLIENT);
+
+ return wsMsgEvent;
+ }
}
- private final static String WS_MSG_EVENT_ID_PROP_NAME = "wsMsgEventId";
+ public final static String WS_MSG_EVENT_ID_PROP_NAME = "wsMsgEventId";
+
private final static AtomicInteger WS_MSG_EVENT_ID = new
AtomicInteger();
- private final static Logger LOGGER =
LoggerFactory.getLogger(PhizLoggingFeature.class);
+ private final static Logger SERVER_LOGGER =
LoggerFactory.getLogger(Server.class);
+ private final static Logger CLIENT_LOGGER =
LoggerFactory.getLogger(Client.class);
private int indentSize;
+
+ @Override
+ public void initialize(Server server, Bus bus) {
+ Service service = server.getEndpoint().getService();
+
+ PhizServerLoggingInInterceptor loggingInInterceptor = new
PhizServerLoggingInInterceptor(SERVER_LOGGER);
+ service.getInInterceptors().add(loggingInInterceptor);
+ service.getInFaultInterceptors().add(loggingInInterceptor);
+
+ PhizServerLoggingOutInterceptor loggingOutInterceptor = new
PhizServerLoggingOutInterceptor(SERVER_LOGGER);
+ service.getOutInterceptors().add(loggingOutInterceptor);
+ service.getOutFaultInterceptors().add(loggingOutInterceptor);
+ }
@Override
- protected void initializeProvider(InterceptorProvider interceptorProv,
Bus bus) {
- PhizLoggingInInterceptor loggingInInterceptor = new
PhizLoggingInInterceptor();
- interceptorProv.getInInterceptors().add(loggingInInterceptor);
- interceptorProv.getInInterceptors().add(loggingInInterceptor);
+ public void initialize(Client client, Bus bus) {
+ PhizClientLoggingInInterceptor loggingInInterceptor = new
PhizClientLoggingInInterceptor(CLIENT_LOGGER);
+ client.getInInterceptors().add(loggingInInterceptor);
+ client.getInFaultInterceptors().add(loggingInInterceptor);
+
+ PhizClientLoggingOutInterceptor loggingOutInterceptor = new
PhizClientLoggingOutInterceptor(CLIENT_LOGGER);
+ client.getOutInterceptors().add(loggingOutInterceptor);
+ client.getOutFaultInterceptors().add(loggingOutInterceptor);
+ }
+
+ private static void populateSoapFault(WsMessageEvent wsMsgEvent,
Element msgPayloadDocElem) {
+ Element msgSoapFaultElem =
+ DOMUtils
+ .getFirstChildWithName(DOMUtils.getFirstChildWithName(msgPayloadDocElem,
SOAP12Constants.QNAME_SOAP_BODY),
SOAP12Constants.QNAME_SOAP_FAULT);
+
+ if (msgSoapFaultElem != null) {
+ Map<String, Object> msgSoapFaultContentMap = new
TreeMap<>(String.CASE_INSENSITIVE_ORDER);
+
+
Optional.ofNullable(DOMUtils.getFirstChildWithName(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_CODE)).ifPresent(
+ (msgSoapFaultCodeElem) ->
msgSoapFaultContentMap.put(SOAP12Constants.QNAME_FAULT_CODE.getLocalPart(),
+
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultCodeElem,
SOAP12Constants.QNAME_FAULT_VALUE))));
+
+ List<Element> msgSoapFaultSubcodeElems =
PhizXmlUtils.findElements(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_SUBCODE);
+
+ if (!msgSoapFaultSubcodeElems.isEmpty()) {
+ msgSoapFaultContentMap.put(
+ SOAP12Constants.QNAME_FAULT_SUBCODE.getLocalPart(),
+ msgSoapFaultSubcodeElems
+ .stream()
+ .map(
+ (msgSoapFaultSubcodeElem) ->
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultSubcodeElem,
+
SOAP12Constants.QNAME_FAULT_VALUE))).collect(Collectors.toList()));
+ }
+
+
Optional.ofNullable(DOMUtils.getFirstChildWithName(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_REASON)).ifPresent(
+ (msgSoapFaultReasonElem) ->
msgSoapFaultContentMap.put(SOAP12Constants.QNAME_FAULT_REASON.getLocalPart(),
+
DOMUtils.getContent(DOMUtils.getFirstChildWithName(msgSoapFaultReasonElem,
SOAP12Constants.QNAME_FAULT_REASON_TEXT))));
+
+
Optional.ofNullable(DOMUtils.getFirstChildWithName(msgSoapFaultElem,
SOAP12Constants.QNAME_FAULT_DETAIL)).ifPresent(
+ (msgSoapFaultDetailElem) -> {
+ List<Element> msgSoapFaultDetailChildElems =
DomUtils.getChildElements(msgSoapFaultDetailElem);
+
+ if (!msgSoapFaultDetailChildElems.isEmpty()) {
+ msgSoapFaultContentMap.put(
+
SOAP12Constants.QNAME_FAULT_DETAIL.getLocalPart(),
+ PhizXmlUtils.mapTreeContent(() -> new
TreeMap<>(String.CASE_INSENSITIVE_ORDER),
+ msgSoapFaultDetailChildElems.toArray(new
Element[msgSoapFaultDetailChildElems.size()])));
+ }
+ });
+
+ wsMsgEvent.setSoapFault(msgSoapFaultContentMap);
+ }
+ }
+
+ private static void populateSoapHeaders(WsMessageEvent wsMsgEvent,
Element msgPayloadDocElem) {
+ Element[] msgSoapHeaderElems =
+ PhizXmlUtils.findElements(msgPayloadDocElem,
SOAP12Constants.QNAME_SOAP_HEADER).stream()
+ .flatMap((msgSoapHeaderContainerElem) ->
DomUtils.getChildElements(msgSoapHeaderContainerElem).stream()).toArray(Element[]::new);
- PhizLoggingOutInterceptor loggingOutInterceptor = new
PhizLoggingOutInterceptor();
- interceptorProv.getOutInterceptors().add(loggingOutInterceptor);
-
interceptorProv.getOutFaultInterceptors().add(loggingOutInterceptor);
+ if (msgSoapHeaderElems.length > 0) {
+ wsMsgEvent.setSoapHeaders(PhizXmlUtils.mapTreeContent(() ->
new TreeMap<>(String.CASE_INSENSITIVE_ORDER), msgSoapHeaderElems));
+ }
}
@SuppressWarnings({ CompilerWarnings.UNCHECKED })
- private void logMessage(SoapMessage msg, HttpEvent<?> httpEvent,
AbstractWsMessageEvent wsMsgEvent, Document msgPayloadDoc) throws
XMLStreamException {
-
wsMsgEvent.setPayload((msg.getContextualPropertyKeys().contains(PhizWsMessageContextProperties.LOG_MSG_PAYLOAD_HIDE_CONTENT_ELEM_QNAMES) ?
PhizXmlUtils
+ private void logMessage(SoapMessage msg, HttpEvent httpEvent,
WsMessageEvent wsMsgEvent, Document msgPayloadDoc) throws
XMLStreamException {
+ msg.getContextualProperty(null);
+
+ wsMsgEvent.setPayload((PhizWsUtils.hasContextualProperty(msg,
PhizWsMessageContextProperties.LOG_MSG_PAYLOAD_HIDE_CONTENT_ELEM_QNAMES) ?
PhizXmlUtils
.toString(msgPayloadDoc, this.indentSize,
new HideContentDomStreamFilter(
((Set<QName>)
msg.getContextualProperty(PhizWsMessageContextProperties.LOG_MSG_PAYLOAD_HIDE_CONTENT_ELEM_QNAMES)))) :
PhizXmlUtils
.toString(msgPayloadDoc, this.indentSize)));
- LOGGER.info(PhizLogstashMarkers.append(httpEvent, wsMsgEvent),
wsMsgEvent.toString());
+ wsMsgEvent.getLogger().info(PhizLogstashMarkers.append(httpEvent,
wsMsgEvent), wsMsgEvent.toString());
}
public int getIndentSize() {
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/iis/hub/impl/IisHubServiceImpl.java
Fri Jan 9 08:17:07 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/iis/hub/impl/IisHubServiceImpl.java
Tue Feb 3 16:25:30 2015 UTC
@@ -3,12 +3,13 @@
import gov.hhs.onc.phiz.destination.PhizDestination;
import gov.hhs.onc.phiz.destination.PhizDestinationRegistry;
import gov.hhs.onc.phiz.web.ws.PhizWsHttpHeaders;
+import gov.hhs.onc.phiz.web.ws.feature.impl.PhizLoggingFeature;
import gov.hhs.onc.phiz.web.ws.iis.hub.IisHubService;
import gov.hhs.onc.phiz.web.ws.iis.impl.AbstractIisService;
import gov.hhs.onc.phiz.web.ws.utils.PhizWsUtils;
import gov.hhs.onc.phiz.ws.PhizWsAddressingActions;
import gov.hhs.onc.phiz.ws.PhizWsNames;
-import gov.hhs.onc.phiz.ws.iis.IisPortType;
+import gov.hhs.onc.phiz.ws.PhizWsQnames;
import gov.hhs.onc.phiz.ws.iis.MessageTooLargeFault;
import gov.hhs.onc.phiz.ws.iis.SecurityFault;
import gov.hhs.onc.phiz.ws.iis.SubmitSingleMessageRequestType;
@@ -20,26 +21,37 @@
import gov.hhs.onc.phiz.ws.iis.hub.IisHubPortType;
import gov.hhs.onc.phiz.ws.iis.hub.UnknownDestinationFault;
import gov.hhs.onc.phiz.ws.iis.hub.impl.DestinationConnectionFaultTypeImpl;
+import gov.hhs.onc.phiz.ws.iis.hub.impl.HubClientFaultTypeImpl;
import gov.hhs.onc.phiz.ws.iis.hub.impl.HubResponseHeaderTypeImpl;
import gov.hhs.onc.phiz.ws.iis.hub.impl.ObjectFactory;
import gov.hhs.onc.phiz.ws.iis.hub.impl.UnknownDestinationFaultTypeImpl;
import gov.hhs.onc.phiz.xml.PhizXmlNs;
+import java.net.SocketTimeoutException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
+import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.Holder;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.context.WrappedMessageContext;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.ExchangeImpl;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.apache.cxf.transport.http.Headers;
import org.apache.cxf.ws.addressing.AddressingProperties;
import org.apache.cxf.ws.addressing.ContextUtils;
+import org.apache.cxf.ws.addressing.JAXWSAConstants;
import org.apache.cxf.ws.addressing.Names;
import org.springframework.beans.factory.annotation.Autowired;
@@ -79,7 +91,7 @@
WrappedMessageContext reqMsgContext =
PhizWsUtils.getMessageContext(this.wsContext);
SoapMessage reqMsg = ((SoapMessage)
reqMsgContext.getWrappedMessage());
- HttpServletRequest servletReq =
PhizWsUtils.getHttpServletRequest(reqMsgContext);
+ HttpServletRequest servletReq =
PhizWsUtils.getProperty(reqMsgContext,
AbstractHTTPDestination.HTTP_REQUEST, HttpServletRequest.class);
URI destUri = dest.getUri();
String destUriStr = destUri.toString();
@@ -95,24 +107,45 @@
destUriStr), e);
}
}
+
+ Client client = ((Client)
this.appContext.getBean(this.clientBeanName, destUriStr));
+ Map<String, Object> clientReqContext = client.getRequestContext();
+
+ clientReqContext.put(
+ Message.PROTOCOL_HEADERS,
+ Headers
+ .getSetProtocolHeaders(reqMsg)
+ .entrySet()
+ .stream()
+ .filter(
+ ((Entry<String, List<String>> reqHttpHeaderEntry) ->
StringUtils.startsWithIgnoreCase(reqHttpHeaderEntry.getKey(),
+
PhizWsHttpHeaders.EXT_IIS_HUB_PREFIX))).collect(Collectors.toMap(Entry::getKey,
Entry::getValue)));
AddressingProperties clientReqAddrProps = new
AddressingProperties(Names.WSA_NAMESPACE_NAME);
clientReqAddrProps.setAction(ContextUtils.getAttributedURI(PhizWsAddressingActions.SUBMIT_SINGLE_MSG_REQ));
clientReqAddrProps.setMessageID(ContextUtils.retrieveMAPs(reqMsg,
false, false).getMessageID());
+ clientReqContext.put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES,
clientReqAddrProps);
- IisPortType clientPort =
- ((IisPortType) this.appContext.getBean(
- this.clientBeanName,
- this.bus,
- destUriStr,
- Headers
- .getSetProtocolHeaders(reqMsg)
- .entrySet()
- .stream()
- .filter(
- ((Entry<String, List<String>> reqHttpHeaderEntry)
-> StringUtils.startsWithIgnoreCase(reqHttpHeaderEntry.getKey(),
-
PhizWsHttpHeaders.EXT_IIS_HUB_PREFIX))).collect(Collectors.toMap(Entry::getKey,
Entry::getValue)), clientReqAddrProps));
+ Exchange clientExchange = new ExchangeImpl();
+ clientExchange.put(PhizLoggingFeature.WS_MSG_EVENT_ID_PROP_NAME,
reqMsg.getExchange().get(PhizLoggingFeature.WS_MSG_EVENT_ID_PROP_NAME));
- return new
ImmutablePair<>(clientPort.submitSingleMessage(reqParams), new
HubResponseHeaderTypeImpl(destId, destUriStr));
+ try {
+ return new ImmutablePair<>(((SubmitSingleMessageResponseType)
client.invoke(
+
client.getEndpoint().getBinding().getBindingInfo().getOperation(PhizWsQnames.SUBMIT_SINGLE_MSG_OP),
new Object[] { reqParams }, null,
+ clientExchange)[0]), new HubResponseHeaderTypeImpl(destId,
destUriStr));
+ } catch (DestinationConnectionFault | HubClientFault |
MessageTooLargeFault | SecurityFault | UnknownDestinationFault e) {
+ throw e;
+ } catch (Exception e) {
+ SocketTimeoutException clientReqTimeoutException =
+ ((SocketTimeoutException)
Stream.of(ExceptionUtils.getThrowables(e))
+ .filter(clientReqExceptionCause ->
(clientReqExceptionCause instanceof
SocketTimeoutException)).findFirst().orElse(null));
+
+ if (clientReqTimeoutException != null) {
+ throw new DestinationConnectionFault("Connection to IIS
destination web service timed out.", new
DestinationConnectionFaultTypeImpl(destId,
+ destUriStr), clientReqTimeoutException);
+ } else {
+ throw new HubClientFault("Unable to invoke IIS destination
web service.", new HubClientFaultTypeImpl(destId, destUriStr), e);
+ }
+ }
}
}
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/AbstractPhizSoapInterceptor.java
Sun Jan 25 19:49:30 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/AbstractPhizSoapInterceptor.java
Tue Feb 3 16:25:30 2015 UTC
@@ -1,9 +1,10 @@
package gov.hhs.onc.phiz.web.ws.interceptor.impl;
import com.github.sebhoss.warnings.CompilerWarnings;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
+import org.apache.commons.lang3.ClassUtils;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
@@ -16,27 +17,27 @@
@SuppressWarnings({ CompilerWarnings.UNCHECKED })
public void setAfterClasses(Class<? extends PhaseInterceptor<? extends
Message>> ... afterClasses) {
- this.setAfterClasses(Stream.of(afterClasses));
+ this.setAfterClasses(Arrays.asList(afterClasses));
}
public void setAfterClasses(Collection<Class<? extends
PhaseInterceptor<? extends Message>>> afterClasses) {
- this.setAfterClasses(afterClasses.stream());
+ this.setAfter(ClassUtils.convertClassesToClassNames(new
ArrayList<>(afterClasses)));
}
- public void setAfterClasses(Stream<Class<? extends PhaseInterceptor<?
extends Message>>> afterClasses) {
-
this.setAfter(afterClasses.map(Object::getClass).map(Class::getName).collect(Collectors.toList()));
+ public void setAfter(String ... afterStrs) {
+ this.setAfter(Arrays.asList(afterStrs));
}
@SuppressWarnings({ CompilerWarnings.UNCHECKED })
public void setBeforeClasses(Class<? extends PhaseInterceptor<?
extends Message>> ... beforeClasses) {
- this.setBeforeClasses(Stream.of(beforeClasses));
+ this.setBeforeClasses(Arrays.asList(beforeClasses));
}
public void setBeforeClasses(Collection<Class<? extends
PhaseInterceptor<? extends Message>>> beforeClasses) {
- this.setBeforeClasses(beforeClasses.stream());
+ this.setBefore(ClassUtils.convertClassesToClassNames(new
ArrayList<>(beforeClasses)));
}
- public void setBeforeClasses(Stream<Class<? extends PhaseInterceptor<?
extends Message>>> beforeClasses) {
-
this.setBefore(beforeClasses.map(Object::getClass).map(Class::getName).collect(Collectors.toList()));
+ public void setBefore(String ... beforeStrs) {
+ this.setBefore(Arrays.asList(beforeStrs));
}
}
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/IisHubDevActionInterceptor.java
Mon Jan 26 17:11:24 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/interceptor/impl/IisHubDevActionInterceptor.java
Tue Feb 3 16:25:30 2015 UTC
@@ -16,13 +16,14 @@
import java.math.BigInteger;
import java.util.Objects;
import java.util.Optional;
+import javax.servlet.http.HttpServletRequest;
import org.apache.cxf.binding.soap.SoapFault;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.logging.FaultListener;
import org.apache.cxf.logging.NoOpFaultListener;
-import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
+import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.apache.cxf.transport.http.Headers;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@@ -68,8 +69,8 @@
case
PhizWsHttpHeaders.EXT_IIS_HUB_DEV_ACTION_MSG_TOO_LARGE_FAULT_VALUE:
// noinspection ConstantConditions
devActionValueFaultCause =
- new MessageTooLargeFault(devActionFaultMsg,
new
MessageTooLargeFaultTypeImpl(BigInteger.valueOf(PhizWsUtils.getHttpServletRequest(
- msg).getContentLengthLong()),
BigInteger.valueOf(-1)));
+ new MessageTooLargeFault(devActionFaultMsg,
new
MessageTooLargeFaultTypeImpl(BigInteger.valueOf(PhizWsUtils.getProperty(msg,
+ AbstractHTTPDestination.HTTP_REQUEST,
HttpServletRequest.class).getContentLengthLong()), BigInteger.valueOf(0)));
break;
case
PhizWsHttpHeaders.EXT_IIS_HUB_DEV_ACTION_SEC_FAULT_VALUE:
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsUtils.java
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/utils/PhizWsUtils.java
Tue Feb 3 16:25:30 2015 UTC
@@ -5,22 +5,18 @@
import java.io.InputStream;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.function.Predicate;
import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.Holder;
import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.handler.MessageContext;
import org.apache.commons.io.IOUtils;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.io.CachedOutputStream;
import org.apache.cxf.io.DelegatingInputStream;
import org.apache.cxf.jaxws.context.WrappedMessageContext;
-import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageContentsList;
-import org.apache.cxf.transport.http.AbstractHTTPDestination;
public final class PhizWsUtils {
private PhizWsUtils() {
@@ -77,44 +73,24 @@
public static <T> T getContextualProperty(Message msg, String
propName, Class<T> propValueClass) {
return (hasContextualProperty(msg, propName) ?
propValueClass.cast(msg.getContextualProperty(propName)) : null);
}
-
- public static boolean hasContextualProperty(Message msg, String
propName) {
- return msg.getContextualPropertyKeys().contains(propName);
- }
@Nullable
- public static HttpServletResponse getHttpServletResponse(Message msg) {
- return getProperty(msg, AbstractHTTPDestination.HTTP_RESPONSE,
HttpServletResponse.class);
+ public static String getContextualProperty(Message msg, String
propName) {
+ return Objects.toString(msg.getContextualProperty(propName), null);
}
- @Nullable
- public static HttpServletResponse
getHttpServletResponse(MessageContext msgContext) {
- return getProperty(msgContext,
AbstractHTTPDestination.HTTP_RESPONSE, HttpServletResponse.class);
+ public static boolean hasContextualProperty(Message msg, String
propName) {
+ return msg.getContextualPropertyKeys().contains(propName);
}
@Nullable
- public static HttpServletRequest getHttpServletRequest(Message msg) {
- return getProperty(msg, AbstractHTTPDestination.HTTP_REQUEST,
HttpServletRequest.class);
+ public static <T> T getProperty(Map<String, Object> props, String
propName, Class<T> propValueClass) {
+ return propValueClass.cast(props.get(propName));
}
@Nullable
- public static HttpServletRequest getHttpServletRequest(MessageContext
msgContext) {
- return getProperty(msgContext,
AbstractHTTPDestination.HTTP_REQUEST, HttpServletRequest.class);
- }
-
- @Nullable
- public static <T> T getProperty(Exchange exchange, String propName,
Class<T> propValueClass) {
- return getPropertyInternal(exchange, propName, propValueClass);
- }
-
- @Nullable
- public static <T> T getProperty(Message msg, String propName, Class<T>
propValueClass) {
- return getPropertyInternal(msg, propName, propValueClass);
- }
-
- @Nullable
- public static <T> T getProperty(MessageContext msgContext, String
propName, Class<T> propValueClass) {
- return getPropertyInternal(msgContext, propName, propValueClass);
+ public static String getProperty(Map<String, Object> props, String
propName) {
+ return Objects.toString(props.get(propName), null);
}
public static SoapMessage getSoapMessage(WebServiceContext wsContext) {
@@ -128,9 +104,4 @@
public static WrappedMessageContext
getMessageContext(WebServiceContext wsContext) {
return ((WrappedMessageContext) wsContext.getMessageContext());
}
-
- @Nullable
- private static <T> T getPropertyInternal(Map<String, Object> props,
String propName, Class<T> propValueClass) {
- return propValueClass.cast(props.get(propName));
- }
}
=======================================
--- /phiz-web-ws/src/main/resources/META-INF/phiz/phiz-web-ws.properties
Fri Jan 9 08:17:07 2015 UTC
+++ /phiz-web-ws/src/main/resources/META-INF/phiz/phiz-web-ws.properties
Tue Feb 3 16:25:30 2015 UTC
@@ -1,5 +1,19 @@
#================================================================================
-# CRYPTOGRAPHY: WEB SERVICE CREDENTIALS
+# WEB SERVICE CLIENT
+#================================================================================
+phiz.ws.client.conn.timeout=#{ 15 *
T(org.apache.commons.lang3.time.DateUtils).MILLIS_PER_SECOND }
+phiz.ws.client.receive.timeout=#{ 15 *
T(org.apache.commons.lang3.time.DateUtils).MILLIS_PER_SECOND }
+
+#================================================================================
+# WEB SERVICE CLIENT: ASYNCHRONOUS
+#================================================================================
+phiz.ws.client.async.exec.timeout=#{ 15 *
T(org.apache.commons.lang3.time.DateUtils).MILLIS_PER_SECOND }
+phiz.ws.client.async.interest.op.queued=true
+phiz.ws.client.async.io.thread.count=-1
+phiz.ws.client.async.select.interval=500
+
+#================================================================================
+# WEB SERVICE CRYPTOGRAPHY: CREDENTIALS
#================================================================================
phiz.ws.crypto.cred.iis.hub.subject.cn=phiz_iis_hub
=======================================
---
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-client.xml
Fri Jan 9 01:16:51 2015 UTC
+++
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-client.xml
Tue Feb 3 16:25:30 2015 UTC
@@ -107,6 +107,39 @@
p:certAlias="${phiz.ws.crypto.client.store.key.entry.ssl.alias}"
p:SSLSocketFactory-ref="sslSocketFactoryWsClient"/>
+
<!--====================================================================================================
+ = CLIENT POLICIES
+
=====================================================================================================-->
+ <beans:bean id="clientPolicyHttp"
class="org.apache.cxf.transports.http.configuration.HTTPClientPolicy"
abstract="true"
+ p:allowChunking="false"
+ p:asyncExecuteTimeoutRejection="true"
+ p:cacheControl="no-cache, no-store, no-transform"/>
+
+
<!--====================================================================================================
+ = CONDUIT FACTORIES
+
=====================================================================================================-->
+ <beans:bean id="conduitFactoryHttp"
class="org.apache.cxf.transport.http.HTTPConduitFactory" abstract="true"/>
+
+ <beans:bean id="conduitFactoryHttpAsync"
class="gov.hhs.onc.phiz.web.ws.transport.impl.PhizAsyncHttpConduitFactory"
parent="conduitFactoryHttp"
+ destroy-method="shutdown"
+ c:bus-ref="busPhiz">
+ <beans:property name="properties">
+ <beans:map>
+ <beans:entry key="#{
T(org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit).USE_ASYNC }"
+ value="#{
T(org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduitFactory.UseAsyncPolicy).ALWAYS
}"/>
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:entry key="#{
T(org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduitFactory).INTEREST_OP_QUEUED
}"
+ value="${phiz.ws.client.async.interest.op.queued}"/>
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:entry key="#{
T(org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduitFactory).SELECT_INTERVAL
}"
+ value="${phiz.ws.client.async.select.interval}"/>
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:entry key="#{
T(org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduitFactory).THREAD_COUNT
}"
+ value="${phiz.ws.client.async.io.thread.count}"/>
+ </beans:map>
+ </beans:property>
+ </beans:bean>
+
<!--====================================================================================================
= CONDUITS
=====================================================================================================-->
@@ -115,29 +148,38 @@
<beans:bean id="conduitHttp"
class="org.apache.cxf.transport.http.HTTPConduit" parent="conduit"
abstract="true"
p:tlsClientParameters-ref="tlsParamsClientWs">
<beans:property name="client">
- <beans:bean
class="org.apache.cxf.transports.http.configuration.HTTPClientPolicy"
- p:cacheControl="no-cache"/>
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean parent="clientPolicyHttp"
+
p:asyncExecuteTimeout="${phiz.ws.client.async.exec.timeout}"
+ p:connectionTimeout="${phiz.ws.client.conn.timeout}"
+ p:receiveTimeout="${phiz.ws.client.receive.timeout}"/>
</beans:property>
</beans:bean>
- <beans:bean id="conduitHttpUrlConn"
class="org.apache.cxf.transport.http.URLConnectionHTTPConduit"
parent="conduitHttp" abstract="true">
- <beans:constructor-arg name="b" ref="busPhiz"/>
- <beans:constructor-arg name="ei">
- <beans:bean class="org.apache.cxf.service.model.EndpointInfo"/>
- </beans:constructor-arg>
+ <beans:bean id="conduitHttpAsync"
class="gov.hhs.onc.phiz.web.ws.transport.impl.PhizAsyncHttpConduit"
parent="conduitHttp" abstract="true">
+ <beans:constructor-arg name="bus" ref="busPhiz"/>
+ <beans:constructor-arg name="conduitFactory"
ref="conduitFactoryHttpAsync"/>
</beans:bean>
- <beans:bean name="*.http-conduit"
class="org.apache.cxf.transport.http.URLConnectionHTTPConduit"
parent="conduitHttpUrlConn" lazy-init="true"/>
+ <beans:bean name="*.http-conduit"
class="gov.hhs.onc.phiz.web.ws.transport.impl.PhizAsyncHttpConduit"
parent="conduitHttpAsync" lazy-init="true"/>
<!--====================================================================================================
= CLIENTS
=====================================================================================================-->
- <beans:bean id="clientJaxWs"
class="gov.hhs.onc.phiz.web.ws.jaxws.impl.PhizJaxWsClientProxyFactoryBean"
abstract="true"
+ <beans:bean id="client" class="org.apache.cxf.endpoint.Client"
abstract="true"/>
+
+ <beans:bean id="clientJaxWs"
class="gov.hhs.onc.phiz.web.ws.jaxws.impl.PhizJaxWsClientFactoryBean"
parent="client" abstract="true"
p:bindingConfig-ref="soapBindingConfig12"
p:bus-ref="busPhiz"
p:dataBinding-ref="dataBindingJaxb">
<beans:property name="conduitSelector">
<beans:bean
class="org.apache.cxf.endpoint.DeferredConduitSelector"/>
+ </beans:property>
+ <beans:property name="features">
+ <beans:list>
+ <beans:ref bean="featureLogging"/>
+ <beans:ref bean="featureSchemaValidation"/>
+ </beans:list>
</beans:property>
</beans:bean>
=======================================
---
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-server.xml
Sun Jan 25 19:49:30 2015 UTC
+++
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-server.xml
Tue Feb 3 16:25:30 2015 UTC
@@ -43,6 +43,12 @@
p:bindingConfig-ref="soapBindingConfig12"
p:bus-ref="busPhiz"
p:dataBinding-ref="dataBindingJaxb">
+ <beans:property name="features">
+ <beans:list>
+ <beans:ref bean="featureLogging"/>
+ <beans:ref bean="featureSchemaValidation"/>
+ </beans:list>
+ </beans:property>
<beans:property name="outFaultInterceptors">
<beans:list>
<beans:ref bean="interceptorFaultRootCauseStackTrace"/>
=======================================
---
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws.xml
Mon Jan 26 17:11:24 2015 UTC
+++
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws.xml
Tue Feb 3 16:25:30 2015 UTC
@@ -17,60 +17,37 @@
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<!--====================================================================================================
- = BEAN POST PROCESSORS
+ = SCHEMA VALIDATION TYPE PROVIDERS
=====================================================================================================-->
- <beans:bean id="org.apache.cxf.bus.spring.BusExtensionPostProcessor"
class="org.apache.cxf.bus.spring.BusExtensionPostProcessor"/>
+ <beans:bean id="schemaValidationTypeProv"
class="org.apache.cxf.feature.validation.SchemaValidationTypeProvider"
abstract="true"/>
- <beans:bean id="org.apache.cxf.bus.spring.Jsr250BeanPostProcessor"
class="org.apache.cxf.bus.spring.Jsr250BeanPostProcessor"/>
+ <beans:bean id="schemaValidationTypeProvConst"
class="gov.hhs.onc.phiz.web.ws.feature.impl.ConstantSchemaValidationTypeProvider"
+ parent="schemaValidationTypeProv" abstract="true"/>
<!--====================================================================================================
= FEATURES
=====================================================================================================-->
<beans:bean id="feature"
class="org.apache.cxf.feature.AbstractFeature" abstract="true"/>
-
<!--====================================================================================================
- = SCHEMA VALIDATION TYPE PROVIDERS
-
=====================================================================================================-->
- <beans:bean id="schemaValidationTypeProv"
class="org.apache.cxf.feature.validation.SchemaValidationTypeProvider"
abstract="true"/>
+ <beans:bean id="featureLogging"
class="gov.hhs.onc.phiz.web.ws.feature.impl.PhizLoggingFeature"
parent="feature"
+ p:indentSize="4"/>
- <beans:bean id="schemaValidationTypeProvConst"
class="gov.hhs.onc.phiz.web.ws.feature.impl.ConstantSchemaValidationTypeProvider"
- parent="schemaValidationTypeProv" abstract="true"/>
+ <beans:bean id="featureSchemaValidation"
class="org.apache.cxf.feature.validation.SchemaValidationFeature"
parent="feature">
+ <beans:constructor-arg name="provider">
+ <beans:bean parent="schemaValidationTypeProvConst"
+ c:type="#{
T(org.apache.cxf.annotations.SchemaValidation.SchemaValidationType).BOTH
}"/>
+ </beans:constructor-arg>
+ </beans:bean>
<!--====================================================================================================
= BUS
=====================================================================================================-->
- <beans:bean id="bus" class="org.apache.cxf.Bus" abstract="true"
destroy-method="shutdown">
- <beans:property name="features">
- <beans:list>
- <beans:bean
class="gov.hhs.onc.phiz.web.ws.feature.impl.PhizLoggingFeature"
parent="feature"
- p:indentSize="4"/>
- <beans:bean
class="org.apache.cxf.feature.validation.SchemaValidationFeature"
parent="feature">
- <beans:constructor-arg name="provider">
- <beans:bean parent="schemaValidationTypeProvConst"
- c:type="#{
T(org.apache.cxf.annotations.SchemaValidation.SchemaValidationType).BOTH
}"/>
- </beans:constructor-arg>
- </beans:bean>
- </beans:list>
- </beans:property>
- </beans:bean>
+ <beans:bean id="bus" class="org.apache.cxf.Bus" abstract="true"
destroy-method="shutdown"/>
<beans:bean id="busSpring" class="org.apache.cxf.bus.spring.SpringBus"
parent="bus" abstract="true"/>
<beans:alias name="busPhiz" alias="cxf"/>
-
<!--====================================================================================================
- = WEB SERVICE CONTEXTS
-
=====================================================================================================-->
- <beans:bean id="org.apache.cxf.jaxws.context.WebServiceContextImpl"
class="org.apache.cxf.jaxws.context.WebServiceContextImpl"
lazy-init="true"/>
- <beans:alias name="org.apache.cxf.jaxws.context.WebServiceContextImpl"
alias="javax.xml.ws.WebServiceContext"/>
-
-
<!--====================================================================================================
- = WEB SERVICE CONTEXT RESOURCE RESOLVER
-
=====================================================================================================-->
- <beans:bean
id="org.apache.cxf.jaxws.context.WebServiceContextResourceResolver"
class="org.apache.cxf.jaxws.context.WebServiceContextResourceResolver"
- lazy-init="true"
- c:b-ref="busPhiz"/>
-
<!--====================================================================================================
= DATA BINDINGS
=====================================================================================================-->
@@ -113,6 +90,26 @@
=====================================================================================================-->
<beans:bean id="tlsParams"
class="org.apache.cxf.configuration.jsse.TLSParameterBase" abstract="true"/>
+
<!--====================================================================================================
+ = WEB SERVICE CONTEXTS
+
=====================================================================================================-->
+ <beans:bean id="org.apache.cxf.jaxws.context.WebServiceContextImpl"
class="org.apache.cxf.jaxws.context.WebServiceContextImpl"
lazy-init="true"/>
+ <beans:alias name="org.apache.cxf.jaxws.context.WebServiceContextImpl"
alias="javax.xml.ws.WebServiceContext"/>
+
+
<!--====================================================================================================
+ = WEB SERVICE CONTEXT RESOURCE RESOLVER
+
=====================================================================================================-->
+ <beans:bean
id="org.apache.cxf.jaxws.context.WebServiceContextResourceResolver"
class="org.apache.cxf.jaxws.context.WebServiceContextResourceResolver"
+ lazy-init="true"
+ c:b-ref="busPhiz"/>
+
+
<!--====================================================================================================
+ = BEAN POST PROCESSORS
+
=====================================================================================================-->
+ <beans:bean id="org.apache.cxf.bus.spring.BusExtensionPostProcessor"
class="org.apache.cxf.bus.spring.BusExtensionPostProcessor"/>
+
+ <beans:bean id="org.apache.cxf.bus.spring.Jsr250BeanPostProcessor"
class="org.apache.cxf.bus.spring.Jsr250BeanPostProcessor"/>
+
<!--====================================================================================================
= PROFILE: DEVELOPMENT MODE
=====================================================================================================-->
@@ -143,9 +140,9 @@
<beans:map>
<beans:entry key="#{
T(gov.hhs.onc.phiz.web.ws.PhizWsMessageContextProperties).LOG_MSG_PAYLOAD_HIDE_CONTENT_ELEM_QNAMES
}">
<beans:set>
+ <beans:value>#{
T(gov.hhs.onc.phiz.ws.PhizWsQnames).HL7_MSG }</beans:value>
+ <beans:value>#{
T(gov.hhs.onc.phiz.ws.PhizWsQnames).PASSWORD }</beans:value>
<beans:value>#{
T(gov.hhs.onc.phiz.ws.PhizWsQnames).USERNAME }</beans:value>
- <beans:value>#{
T(gov.hhs.onc.phiz.ws.PhizWsQnames).PASSWORD }</beans:value>
- <beans:value>#{
T(gov.hhs.onc.phiz.ws.PhizWsQnames).HL7_MSG }</beans:value>
</beans:set>
</beans:entry>
</beans:map>
==============================================================================
Revision: 23c3a4a3b804
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Fri Feb 6 12:28:44 2015 UTC
Log: - Further supports PHIZ-28.
- Modified Logstash logging to append to a file instead of directly to a
Logstash instance/cluster.
- Improved CXF client message logging by extracting further details from
the associated (asynchronous) HTTP client configuration.
https://code.google.com/p/phiz/source/detail?r=23c3a4a3b804
Added:
/phiz-core/src/main/java/gov/hhs/onc/phiz/beans/factory/impl/AbstractPhizBeanPostProcessor.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/context/utils/PhizApplicationUtils.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/env/impl/CommandLineApplicationRunListener.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/IncludesAction.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/LoggerContextAwareBeanPostProcessor.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/LoggingApplicationRunListener.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logstash/impl/PhizLogstashEncoder.java
/phiz-core/src/test/resources/META-INF/phiz/logback/logback-phiz-include-test.xml
/phiz-web-core/src/main/resources/META-INF/phiz/logback/logback-phiz-web-include.xml
/phiz-web-core/src/test/resources/META-INF/phiz/logback/logback-phiz-web-include-test.xml
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizWsMessageProperties.java
Deleted:
/phiz-core/src/main/java/gov/hhs/onc/phiz/context/impl/CommandLineApplicationRunListener.java
Modified:
/phiz-core/src/main/java/gov/hhs/onc/phiz/context/PhizProperties.java
/phiz-core/src/main/java/gov/hhs/onc/phiz/env/impl/AbstractPhizCommandLineOptions.java
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz.xml
/phiz-core/src/main/resources/META-INF/phiz/phiz.properties
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-logstash.xml
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-metrics.xml
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging.xml
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz.xml
/phiz-core/src/main/resources/META-INF/spring.factories
/phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties
/phiz-parent/pom.xml
/phiz-tools/src/it/pom.xml
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpRequestEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpResponseEvent.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpRequestEventImpl.java
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpResponseEventImpl.java
/phiz-web-portal/src/it/pom.xml
/phiz-web-ws/src/it/pom.xml
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/iis/hub/impl/IisHubServiceImpl.java
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/transport/impl/PhizAsyncHttpConduit.java
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-client.xml
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/beans/factory/impl/AbstractPhizBeanPostProcessor.java
Fri Feb 6 12:28:44 2015 UTC
@@ -0,0 +1,45 @@
+package gov.hhs.onc.phiz.beans.factory.impl;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.FatalBeanException;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+
+public abstract class AbstractPhizBeanPostProcessor<T> implements
BeanPostProcessor {
+ protected Class<T> beanClass;
+
+ protected AbstractPhizBeanPostProcessor(Class<T> beanClass) {
+ this.beanClass = beanClass;
+ }
+
+ @Override
+ public Object postProcessAfterInitialization(Object bean, String
beanName) throws BeansException {
+ Class<?> beanClass = bean.getClass();
+
+ try {
+ return (this.beanClass.isAssignableFrom(beanClass) ?
this.postProcessAfterInitializationInternal(this.beanClass.cast(bean),
beanName) : bean);
+ } catch (Exception e) {
+ throw new FatalBeanException(String.format("Unable to post
process bean (name=%s, class=%s) after initialization.", beanName,
beanClass.getName()),
+ e);
+ }
+ }
+
+ @Override
+ public Object postProcessBeforeInitialization(Object bean, String
beanName) throws BeansException {
+ Class<?> beanClass = bean.getClass();
+
+ try {
+ return (this.beanClass.isAssignableFrom(beanClass) ?
this.postProcessBeforeInitializationInternal(this.beanClass.cast(bean),
beanName) : bean);
+ } catch (Exception e) {
+ throw new FatalBeanException(
+ String.format("Unable to post process bean (name=%s,
class=%s) before initialization.", beanName, beanClass.getName()), e);
+ }
+ }
+
+ protected T postProcessAfterInitializationInternal(T bean, String
beanName) throws Exception {
+ return bean;
+ }
+
+ protected T postProcessBeforeInitializationInternal(T bean, String
beanName) throws Exception {
+ return bean;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/context/utils/PhizApplicationUtils.java
Fri Feb 6 12:28:44 2015 UTC
@@ -0,0 +1,13 @@
+package gov.hhs.onc.phiz.context.utils;
+
+import gov.hhs.onc.phiz.context.PhizProperties;
+import org.apache.commons.lang3.BooleanUtils;
+
+public final class PhizApplicationUtils {
+ private PhizApplicationUtils() {
+ }
+
+ public static boolean isDaemon() {
+ return
(BooleanUtils.toBoolean(System.getProperty(PhizProperties.WRAPPER_DAEMON_NAME))
|| (System.console() == null));
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/env/impl/CommandLineApplicationRunListener.java
Fri Feb 6 12:28:44 2015 UTC
@@ -0,0 +1,21 @@
+package gov.hhs.onc.phiz.env.impl;
+
+import gov.hhs.onc.phiz.context.impl.AbstractPhizApplicationRunListener;
+import org.springframework.boot.SpringApplication;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+
+@Order(Ordered.HIGHEST_PRECEDENCE + 2)
+public class CommandLineApplicationRunListener extends
AbstractPhizApplicationRunListener {
+ public final static String ARGS_BEAN_NAME = "cmdLineArgs";
+
+ public CommandLineApplicationRunListener(SpringApplication app,
String[] args) {
+ super(app, args);
+ }
+
+ @Override
+ public void contextPrepared(ConfigurableApplicationContext appContext)
{
+ appContext.getBeanFactory().registerSingleton(ARGS_BEAN_NAME,
this.args);
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/IncludesAction.java
Fri Feb 6 12:28:44 2015 UTC
@@ -0,0 +1,75 @@
+package gov.hhs.onc.phiz.logging.impl;
+
+import ch.qos.logback.core.joran.action.Action;
+import ch.qos.logback.core.joran.action.IncludeAction;
+import ch.qos.logback.core.joran.spi.ActionException;
+import ch.qos.logback.core.joran.spi.InterpretationContext;
+import java.net.URL;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.DefaultResourceLoader;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternUtils;
+import org.springframework.util.ResourceUtils;
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.AttributesImpl;
+
+public class IncludesAction extends Action {
+ private final static String INCLUDE_ACTION_NAME = "include";
+
+ private final static String FILE_ATTR_NAME = "file";
+ private final static String OPTIONAL_ATTR_NAME = "optional";
+ private final static String RESOURCE_ATTR_NAME = "resource";
+ private final static String RESOURCES_ATTR_NAME = "resources";
+ private final static String URL_ATTR_NAME = "url";
+
+ @Override
+ public void end(InterpretationContext interpretationContext, String
name) throws ActionException {
+ }
+
+ @Override
+ public void begin(InterpretationContext interpretationContext, String
name, Attributes attrs) throws ActionException {
+ String resourcesAttrValue = attrs.getValue(RESOURCES_ATTR_NAME);
+
+ if (StringUtils.isBlank(resourcesAttrValue)) {
+ this.addError(String.format("Resources attribute value is
blank: %s", resourcesAttrValue));
+
+ return;
+ }
+
+ AttributesImpl includeAttrsBase = new AttributesImpl(),
includeAttrs;
+ includeAttrsBase.addAttribute(StringUtils.EMPTY,
OPTIONAL_ATTR_NAME, OPTIONAL_ATTR_NAME, null,
+ ObjectUtils.defaultIfNull(attrs.getValue(OPTIONAL_ATTR_NAME),
Boolean.toString(false)));
+
+ IncludeAction includeAction = new IncludeAction();
+ includeAction.setContext(this.context);
+
+ URL resourceUrl;
+
+ try {
+ for (Resource resource :
ResourcePatternUtils.getResourcePatternResolver(new
DefaultResourceLoader()).getResources(
+ StringUtils.prependIfMissing(resourcesAttrValue,
ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX))) {
+ includeAttrs = new AttributesImpl(includeAttrsBase);
+
+ if (resource instanceof ClassPathResource) {
+ includeAttrs.addAttribute(StringUtils.EMPTY,
RESOURCE_ATTR_NAME, RESOURCE_ATTR_NAME, null, ((ClassPathResource)
resource).getPath());
+ } else if (resource instanceof FileSystemResource) {
+ includeAttrs.addAttribute(StringUtils.EMPTY,
FILE_ATTR_NAME, FILE_ATTR_NAME, null, resource.getFile().getPath());
+ } else if (ResourceUtils.isJarURL((resourceUrl =
resource.getURL()))) {
+ // noinspection ConstantConditions
+ includeAttrs.addAttribute(StringUtils.EMPTY,
RESOURCE_ATTR_NAME, RESOURCE_ATTR_NAME, null,
+
StringUtils.splitByWholeSeparator(resourceUrl.toString(),
ResourceUtils.JAR_URL_SEPARATOR, 2)[1]);
+ } else {
+ includeAttrs.addAttribute(StringUtils.EMPTY,
URL_ATTR_NAME, URL_ATTR_NAME, null, resourceUrl.toString());
+ }
+
+ includeAction.begin(interpretationContext,
INCLUDE_ACTION_NAME, includeAttrs);
+ }
+ } catch (Exception e) {
+ throw new ActionException(e);
+ }
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/LoggerContextAwareBeanPostProcessor.java
Fri Feb 6 12:28:44 2015 UTC
@@ -0,0 +1,31 @@
+package gov.hhs.onc.phiz.logging.impl;
+
+import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.classic.spi.LoggerContextAware;
+import ch.qos.logback.classic.util.ContextSelectorStaticBinder;
+import ch.qos.logback.core.spi.ContextAware;
+import gov.hhs.onc.phiz.beans.factory.impl.AbstractPhizBeanPostProcessor;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+@Component("beanPostProcLoggerContextAware")
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class LoggerContextAwareBeanPostProcessor extends
AbstractPhizBeanPostProcessor<ContextAware> {
+ private LoggerContext loggerContext =
ContextSelectorStaticBinder.getSingleton().getContextSelector().getLoggerContext();
+
+ public LoggerContextAwareBeanPostProcessor() {
+ super(ContextAware.class);
+ }
+
+ @Override
+ protected ContextAware
postProcessBeforeInitializationInternal(ContextAware bean, String beanName)
throws Exception {
+ bean.setContext(this.loggerContext);
+
+ if (bean instanceof LoggerContextAware) {
+ ((LoggerContextAware)
bean).setLoggerContext(this.loggerContext);
+ }
+
+ return bean;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/impl/LoggingApplicationRunListener.java
Fri Feb 6 12:28:44 2015 UTC
@@ -0,0 +1,32 @@
+package gov.hhs.onc.phiz.logging.impl;
+
+import ch.qos.logback.classic.util.ContextSelectorStaticBinder;
+import ch.qos.logback.core.status.Status;
+import ch.qos.logback.core.status.StatusManager;
+import ch.qos.logback.core.status.StatusUtil;
+import ch.qos.logback.core.util.StatusPrinter;
+import gov.hhs.onc.phiz.context.impl.AbstractPhizApplicationRunListener;
+import org.springframework.boot.SpringApplication;
+import org.springframework.context.ApplicationContextException;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class LoggingApplicationRunListener extends
AbstractPhizApplicationRunListener {
+ public LoggingApplicationRunListener(SpringApplication app, String[]
args) {
+ super(app, args);
+ }
+
+ @Override
+ public void started() {
+ StatusManager statusManager =
ContextSelectorStaticBinder.getSingleton().getContextSelector().getLoggerContext().getStatusManager();
+ StatusUtil statusUtil = new StatusUtil(statusManager);
+ long lastResetTime = statusUtil.timeOfLastReset();
+
+ if (statusUtil.getHighestLevel(lastResetTime) >= Status.WARN) {
+ StatusPrinter.print(statusManager, lastResetTime);
+
+ throw new ApplicationContextException(String.format("Logback
status manager contains warning(s) and/or error(s)."));
+ }
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/logging/logstash/impl/PhizLogstashEncoder.java
Fri Feb 6 12:28:44 2015 UTC
@@ -0,0 +1,20 @@
+package gov.hhs.onc.phiz.logging.logstash.impl;
+
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import java.nio.charset.Charset;
+import java.util.List;
+import net.logstash.logback.composite.JsonProvider;
+import net.logstash.logback.composite.JsonProviders;
+import net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder;
+
+public class PhizLogstashEncoder extends LoggingEventCompositeJsonEncoder {
+ public void setEncodingCharset(Charset enc) {
+ this.setEncoding(
enc.name());
+ }
+
+ public void setProviderItems(List<? extends
JsonProvider<ILoggingEvent>> provs) {
+ JsonProviders<ILoggingEvent> provsContainer = this.getProviders();
+
+ provs.forEach(provsContainer::addProvider);
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/test/resources/META-INF/phiz/logback/logback-phiz-include-test.xml
Fri Feb 6 12:28:44 2015 UTC
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<included
+ debug="false"
+ xmlns="ch.qos.logback">
+
+</included>
=======================================
--- /dev/null
+++
/phiz-web-core/src/main/resources/META-INF/phiz/logback/logback-phiz-web-include.xml
Fri Feb 6 12:28:44 2015 UTC
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<included
+ debug="false"
+ xmlns="ch.qos.logback">
+
+</included>
=======================================
--- /dev/null
+++
/phiz-web-core/src/test/resources/META-INF/phiz/logback/logback-phiz-web-include-test.xml
Fri Feb 6 12:28:44 2015 UTC
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<included
+ debug="false"
+ xmlns="ch.qos.logback">
+
+
<!--====================================================================================================
+ = LOGGERS: EVIWARE
+
=====================================================================================================-->
+ <logger name="com.eviware" level="info" additivity="false">
+ <appender-ref ref="console"/>
+ <appender-ref ref="file"/>
+ <appender-ref ref="fileLogstash"/>
+ </logger>
+</included>
=======================================
--- /dev/null
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/PhizWsMessageProperties.java
Fri Feb 6 12:28:44 2015 UTC
@@ -0,0 +1,11 @@
+package
gov.hhs.onc.phiz.web.ws;
+
+public final class PhizWsMessageProperties {
+ public final static String CONTENT_LEN = "content.length";
+ public final static String HTTP_SCHEME = "http.scheme";
+ public final static String PROTOCOL = "protocol";
+ public final static String RESP_CODE_MSG = "response.code.msg";
+
+ private PhizWsMessageProperties() {
+ }
+}
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/context/impl/CommandLineApplicationRunListener.java
Thu Dec 18 15:30:39 2014 UTC
+++ /dev/null
@@ -1,20 +0,0 @@
-package gov.hhs.onc.phiz.context.impl;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.core.Ordered;
-import org.springframework.core.annotation.Order;
-
-@Order(Ordered.HIGHEST_PRECEDENCE + 2)
-public class CommandLineApplicationRunListener extends
AbstractPhizApplicationRunListener {
- public final static String ARGS_BEAN_NAME = "cmdLineArgs";
-
- public CommandLineApplicationRunListener(SpringApplication app,
String[] args) {
- super(app, args);
- }
-
- @Override
- public void contextPrepared(ConfigurableApplicationContext appContext)
{
- appContext.getBeanFactory().registerSingleton(ARGS_BEAN_NAME,
this.args);
- }
-}
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/context/PhizProperties.java
Thu Dec 18 15:30:39 2014 UTC
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/context/PhizProperties.java
Fri Feb 6 12:28:44 2015 UTC
@@ -3,6 +3,7 @@
public final class PhizProperties {
public final static String PREFIX = "phiz.";
public final static String APP_PREFIX = PREFIX + "app.";
+ public final static String WRAPPER_PREFIX = "wrapper.";
public final static String APP_NAME_NAME = APP_PREFIX + "name";
public final static String APP_PID_NAME = APP_PREFIX + "pid";
@@ -11,6 +12,8 @@
public final static String DEV_MODE_VALUE = "dev";
public final static String PROD_MODE_VALUE = "prod";
+ public final static String WRAPPER_DAEMON_NAME = WRAPPER_PREFIX
+ "daemon";
+
private PhizProperties() {
}
}
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/env/impl/AbstractPhizCommandLineOptions.java
Thu Dec 18 15:30:39 2014 UTC
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/env/impl/AbstractPhizCommandLineOptions.java
Fri Feb 6 12:28:44 2015 UTC
@@ -1,6 +1,5 @@
package gov.hhs.onc.phiz.env.impl;
-import gov.hhs.onc.phiz.context.impl.CommandLineApplicationRunListener;
import gov.hhs.onc.phiz.env.PhizCommandLineOptions;
import java.io.StringWriter;
import javax.annotation.Resource;
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz-include.xml
Fri Feb 6 12:28:44 2015 UTC
@@ -3,96 +3,17 @@
debug="false"
xmlns="ch.qos.logback">
-
<!--====================================================================================================
- = PROPERTIES: CONSOLE
-
=====================================================================================================-->
- <if condition='!isDefined("phiz.log.console.tty") &&
((isDefined("wrapper.daemonize")
&& !org.apache.commons.lang3.BooleanUtils.toBoolean(p("wrapper.daemonize")))
|| (System.console() != null))'>
- <then>
- <property name="phiz.log.console.tty" value="true"
scope="context"/>
- </then>
- </if>
-
-
<!--====================================================================================================
- = PROPERTIES: FILE
-
=====================================================================================================-->
- <if condition='!isDefined("phiz.log.file.dir")'>
- <then>
- <property name="phiz.log.file.dir" value="logs"
scope="context"/>
- </then>
- </if>
-
- <property name="
phiz.log.file.name"
value="${phiz.log.file.name:-${CONTEXT_NAME}}" scope="context"/>
-
- <property name="phiz.log.file.name.ext"
value="${phiz.log.file.name.ext:-.log}" scope="context"/>
-
-
<!--====================================================================================================
- = STATUS LISTENERS
-
=====================================================================================================-->
- <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
-
-
<!--====================================================================================================
- = CONTEXT LISTENERS
-
=====================================================================================================-->
- <contextListener
class="ch.qos.logback.classic.jul.LevelChangePropagator">
- <resetJUL>true</resetJUL>
- </contextListener>
-
-
<!--====================================================================================================
- = CONVERSION RULES
-
=====================================================================================================-->
- <conversionRule conversionWord="exRoot"
converterClass="gov.hhs.onc.phiz.logging.impl.RootCauseThrowableProxyConverter"/>
-
- <conversionRule conversionWord="pColor"
converterClass="gov.hhs.onc.phiz.logging.impl.PriorityColorCompositeConverter"/>
-
- <conversionRule conversionWord="xReq"
converterClass="gov.hhs.onc.phiz.logging.impl.RequestMdcConverter"/>
-
-
<!--====================================================================================================
- = APPENDERS: CONSOLE
-
=====================================================================================================-->
- <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
- <encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <pattern>%pColor(%p){${phiz.log.console.tty:-false}}
- %m%n%exRoot</pattern>
- </encoder>
- <target>System.out</target>
- <withJansi>true</withJansi>
- </appender>
-
-
<!--====================================================================================================
- = APPENDERS: FILE
-
=====================================================================================================-->
- <if condition='isDefined("phiz.log.file.dir") && !new
java.io.File(p("phiz.log.file.dir")).isFile()'>
- <then>
- <appender name="file" class="ch.qos.logback.core.FileAppender">
- <encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <pattern>%d{yyyy-MM-dd HH:mm:ss z} [%C:%L %t]%xReq %p
- %m%n%exRoot</pattern>
- </encoder>
-
<file>${phiz.log.file.dir}/${
phiz.log.file.name}${phiz.log.file.name.ext}</file>
- <prudent>true</prudent>
- </appender>
- </then>
- <else>
- <appender name="file"
class="ch.qos.logback.core.helpers.NOPAppender"/>
- </else>
- </if>
-
-
<!--====================================================================================================
- = APPENDERS: LOGSTASH
-
=====================================================================================================-->
- <appender name="logstash"
class="ch.qos.logback.ext.spring.DelegatingLogbackAppender">
- <beanName>appenderLogstashTcp</beanName>
- </appender>
-
<!--====================================================================================================
= LOGGERS: PROJECT
=====================================================================================================-->
<logger name="gov.hhs.onc.phiz" level="all" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
+ <appender-ref ref="fileLogstash"/>
</logger>
<logger name="gov.hhs.onc.phiz.logging.metrics.impl.LogstashReporter"
level="all" additivity="false">
- <appender-ref ref="logstash"/>
+ <appender-ref ref="fileLogstash"/>
</logger>
<!--====================================================================================================
@@ -101,7 +22,7 @@
<logger name="br.net.woodstock.rockframework" level="info"
additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
+ <appender-ref ref="fileLogstash"/>
</logger>
<!--====================================================================================================
@@ -110,16 +31,7 @@
<logger name="com.codahale.metrics" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
- </logger>
-
-
<!--====================================================================================================
- = LOGGERS: EVIWARE
-
=====================================================================================================-->
- <logger name="com.eviware" level="info" additivity="false">
- <appender-ref ref="console"/>
- <appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
+ <appender-ref ref="fileLogstash"/>
</logger>
<!--====================================================================================================
@@ -128,7 +40,7 @@
<logger name="org.apache" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
+ <appender-ref ref="fileLogstash"/>
</logger>
<!--====================================================================================================
@@ -137,13 +49,13 @@
<logger name="org.apache.cxf" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
+ <appender-ref ref="fileLogstash"/>
</logger>
<logger
name="org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor"
level="warn" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
+ <appender-ref ref="fileLogstash"/>
</logger>
<!--====================================================================================================
@@ -152,13 +64,13 @@
<logger name="org.hibernate" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
+ <appender-ref ref="fileLogstash"/>
</logger>
<logger name="org.hibernate.SQL" level="debug" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
+ <appender-ref ref="fileLogstash"/>
</logger>
<!--====================================================================================================
@@ -167,21 +79,12 @@
<logger name="org.springframework" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
+ <appender-ref ref="fileLogstash"/>
</logger>
<logger
name="org.springframework.context.support.PostProcessorRegistrationDelegate$BeanPostProcessorChecker"
level="warn" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
+ <appender-ref ref="fileLogstash"/>
</logger>
-
-
<!--====================================================================================================
- = ROOT LOGGER
-
=====================================================================================================-->
- <root level="warn">
- <appender-ref ref="console"/>
- <appender-ref ref="file"/>
- <appender-ref ref="logstash"/>
- </root>
</included>
=======================================
--- /phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz.xml
Wed Dec 3 17:31:58 2014 UTC
+++ /phiz-core/src/main/resources/META-INF/phiz/logback/logback-phiz.xml
Fri Feb 6 12:28:44 2015 UTC
@@ -8,10 +8,81 @@
<!--====================================================================================================
= CONTEXT NAME
=====================================================================================================-->
-
<contextName>${phiz.log.context.name:-%{project.artifactId}}</contextName>
+ <contextName>${phiz.log.context.name:-phiz}</contextName>
+
+
<!--====================================================================================================
+ = PROPERTIES: CONSOLE
+
=====================================================================================================-->
+ <if condition='!isDefined("phiz.logging.console.tty")
&& !gov.hhs.onc.phiz.context.utils.PhizApplicationUtils.isDaemon()'>
+ <then>
+ <property name="phiz.logging.console.tty" value="true"
scope="context"/>
+ </then>
+ </if>
+
+
<!--====================================================================================================
+ = STATUS LISTENERS
+
=====================================================================================================-->
+ <statusListener class="ch.qos.logback.core.status.NopStatusListener"/>
+
+
<!--====================================================================================================
+ = CONTEXT LISTENERS
+
=====================================================================================================-->
+ <contextListener
class="ch.qos.logback.classic.jul.LevelChangePropagator">
+ <resetJUL>true</resetJUL>
+ </contextListener>
+
+
<!--====================================================================================================
+ = RULES
+
=====================================================================================================-->
+ <newRule pattern="configuration/includes"
actionClass="gov.hhs.onc.phiz.logging.impl.IncludesAction"/>
+
+
<!--====================================================================================================
+ = CONVERSION RULES
+
=====================================================================================================-->
+ <conversionRule conversionWord="exRoot"
converterClass="gov.hhs.onc.phiz.logging.impl.RootCauseThrowableProxyConverter"/>
+
+ <conversionRule conversionWord="pColor"
converterClass="gov.hhs.onc.phiz.logging.impl.PriorityColorCompositeConverter"/>
+
+ <conversionRule conversionWord="xReq"
converterClass="gov.hhs.onc.phiz.logging.impl.RequestMdcConverter"/>
+
+
<!--====================================================================================================
+ = APPENDERS: CONSOLE
+
=====================================================================================================-->
+ <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <pattern>%pColor(%p){${phiz.logging.console.tty:-false}}
- %m%n%exRoot</pattern>
+ </encoder>
+ <target>System.out</target>
+ <withJansi>true</withJansi>
+ </appender>
+
+
<!--====================================================================================================
+ = APPENDERS: FILE
+
=====================================================================================================-->
+ <appender name="file"
class="ch.qos.logback.ext.spring.DelegatingLogbackAppender">
+ <beanName>appenderFileMain</beanName>
+ </appender>
+
+
<!--====================================================================================================
+ = APPENDERS: LOGSTASH
+
=====================================================================================================-->
+ <appender name="fileLogstash"
class="ch.qos.logback.ext.spring.DelegatingLogbackAppender">
+ <beanName>appenderFileLogstash</beanName>
+ </appender>
+
+
<!--====================================================================================================
+ = ROOT LOGGER
+
=====================================================================================================-->
+ <root level="warn">
+ <appender-ref ref="console"/>
+ <appender-ref ref="file"/>
+ <appender-ref ref="fileLogstash"/>
+ </root>
<!--====================================================================================================
= INCLUDES
=====================================================================================================-->
- <include resource="META-INF/phiz/logback/logback-phiz-include.xml"/>
+ <includes resources="META-INF/phiz/logback/logback-phiz*-include.xml"/>
+
+ <includes
resources="META-INF/phiz/logback/logback-phiz*-include-test.xml"/>
</configuration>
=======================================
--- /phiz-core/src/main/resources/META-INF/phiz/phiz.properties Thu Jan 29
00:44:10 2015 UTC
+++ /phiz-core/src/main/resources/META-INF/phiz/phiz.properties Fri Feb 6
12:28:44 2015 UTC
@@ -76,13 +76,21 @@
phiz.dest.iis.dev.uri=${phiz.ws.iis.dev.path}
#================================================================================
-# LOGGING LOGSTASH
+# LOGGING: FILE
#================================================================================
-phiz.logging.logstash.host=127.0.0.1
-phiz.logging.logstash.port=#{
T(net.logstash.logback.appender.AbstractLogstashTcpSocketAppender).DEFAULT_PORT
}
+phiz.logging.file.dir=logs
+
phiz.logging.file.name=phiz
+phiz.logging.file.name.ext=.log
#================================================================================
-# LOGGING METRICS
+# LOGGING: LOGSTASH
+#================================================================================
+phiz.logging.logstash.file.dir=${phiz.logging.file.dir}
+
phiz.logging.logstash.file.name=${
phiz.logging.file.name}-logstash
+phiz.logging.logstash.file.name.ext=.json
+
+#================================================================================
+# LOGGING: METRICS
#================================================================================
phiz.logging.metrics.metric.cached.thread.states.interval=15
phiz.logging.metrics.reporter.logstash.interval=30
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-logstash.xml
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-logstash.xml
Fri Feb 6 12:28:44 2015 UTC
@@ -17,32 +17,46 @@
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
+
<!--====================================================================================================
+ = JSON PROVIDERS
+
=====================================================================================================-->
+ <beans:bean id="jsonProv"
class="net.logstash.logback.composite.JsonProvider" abstract="true"/>
+
<!--====================================================================================================
= ENCODERS
=====================================================================================================-->
- <beans:bean id="encoderLogstash"
class="net.logstash.logback.encoder.LogstashEncoder" parent="encoder"
abstract="true"
- p:includeContext="false"
- p:includeMdc="false"
+ <beans:bean id="encoderLogstash"
class="gov.hhs.onc.phiz.logging.logstash.impl.PhizLogstashEncoder"
parent="encoder" abstract="true"
+ p:encodingCharset-ref="charsetUtf8"
p:jsonFactoryDecorator-ref="jsonFactoryDecoratorLogstash"
- p:throwableConverter-ref="throwableProxyConvRootCause"/>
-
- <beans:bean id="encoderLogstashTcp"
class="net.logstash.logback.encoder.LogstashTcpEncoder"
parent="encoderLogstash" abstract="true"
- p:encoding="#{ charsetUtf8.name() }"
- p:includeCallerInfo="true"
- p:newLine="#{ T(org.apache.commons.lang3.StringUtils).LF }"/>
+ p:lineSeparator="#{ T(org.apache.commons.lang3.StringUtils).LF }">
+ <beans:property name="providerItems">
+ <beans:list>
+ <beans:bean
class="net.logstash.logback.composite.LogstashVersionJsonProvider"
parent="jsonProv"/>
+ <beans:bean
class="net.logstash.logback.composite.loggingevent.CallerDataJsonProvider"
parent="jsonProv"/>
+ <beans:bean
class="net.logstash.logback.composite.loggingevent.LoggerNameJsonProvider"
parent="jsonProv"/>
+ <beans:bean
class="net.logstash.logback.composite.loggingevent.LoggingEventFormattedTimestampJsonProvider"
parent="jsonProv"
+ p:timeZone="#{ timeZoneUtc.ID }"/>
+ <beans:bean
class="net.logstash.logback.composite.loggingevent.LogLevelJsonProvider"
parent="jsonProv"/>
+ <beans:bean
class="net.logstash.logback.composite.loggingevent.LogLevelValueJsonProvider"
parent="jsonProv"/>
+ <beans:bean
class="net.logstash.logback.composite.loggingevent.LogstashMarkersJsonProvider"
parent="jsonProv"/>
+ <beans:bean
class="net.logstash.logback.composite.loggingevent.MessageJsonProvider"
parent="jsonProv"/>
+ <beans:bean
class="net.logstash.logback.composite.loggingevent.StackTraceJsonProvider"
parent="jsonProv"
+
p:throwableConverter-ref="throwableProxyConvRootCause"/>
+ <beans:bean
class="net.logstash.logback.composite.loggingevent.TagsJsonProvider"
parent="jsonProv"/>
+ <beans:bean
class="net.logstash.logback.composite.loggingevent.ThreadNameJsonProvider"
parent="jsonProv"/>
+ </beans:list>
+ </beans:property>
+ </beans:bean>
<!--====================================================================================================
= APPENDERS
=====================================================================================================-->
<!--suppress SpringPlaceholdersInspection -->
- <beans:bean id="appenderLogstashTcp"
class="net.logstash.logback.appender.LogstashTcpSocketAppender"
parent="appender" init-method="start"
- destroy-method="stop"
- p:includeCallerData="true"
- p:name="logstash"
- p:port="${phiz.logging.logstash.port}"
- p:remoteHost="${phiz.logging.logstash.host}">
+ <beans:bean id="appenderFileLogstash" parent="appenderFile"
destroy-method="stop" init-method="start"
+
p:file="${phiz.logging.logstash.file.dir}/${
phiz.logging.logstash.file.name}${phiz.logging.logstash.file.name.ext}"
+ p:name="fileLogstash">
<beans:property name="encoder">
- <beans:bean parent="encoderLogstashTcp" init-method="start"
destroy-method="stop"/>
+ <beans:bean parent="encoderLogstash" destroy-method="stop"
init-method="start"/>
</beans:property>
</beans:bean>
</beans:beans>
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-metrics.xml
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging-metrics.xml
Fri Feb 6 12:28:44 2015 UTC
@@ -111,7 +111,7 @@
<beans:bean id="reporter" class="com.codahale.metrics.Reporter"
abstract="true"/>
<!--suppress SpringPlaceholdersInspection -->
- <beans:bean id="reporterLogstash"
class="gov.hhs.onc.phiz.logging.metrics.impl.LogstashReporter"
parent="reporter" depends-on="appenderLogstashTcp"
+ <beans:bean id="reporterLogstash"
class="gov.hhs.onc.phiz.logging.metrics.impl.LogstashReporter"
parent="reporter" depends-on="appenderFileLogstash"
c:metricRegistry-ref="metricRegistry"
p:period="${phiz.logging.metrics.reporter.logstash.interval}"/>
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging.xml
Thu Jan 29 00:44:10 2015 UTC
+++
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-logging.xml
Fri Feb 6 12:28:44 2015 UTC
@@ -20,16 +20,26 @@
<!--====================================================================================================
= ENCODERS
=====================================================================================================-->
- <beans:bean id="contextAware"
class="ch.qos.logback.core.spi.ContextAware" abstract="true"
- p:context="#{
T(ch.qos.logback.classic.util.ContextSelectorStaticBinder).singleton.contextSelector.loggerContext
}"/>
+ <beans:bean id="encoder" class="ch.qos.logback.core.encoder.Encoder"
abstract="true"/>
-
<!--====================================================================================================
- = ENCODERS
-
=====================================================================================================-->
- <beans:bean id="encoder" class="ch.qos.logback.core.encoder.Encoder"
parent="contextAware" abstract="true"/>
+ <beans:bean id="encoderPatternLayout"
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"
parent="encoder" abstract="true"
+ p:charset-ref="charsetUtf8"/>
<!--====================================================================================================
= APPENDERS
=====================================================================================================-->
- <beans:bean id="appender" class="ch.qos.logback.core.Appender"
parent="contextAware" abstract="true"/>
+ <beans:bean id="appender" class="ch.qos.logback.core.Appender"
abstract="true"/>
+
+ <beans:bean id="appenderFile" class="ch.qos.logback.core.FileAppender"
parent="appender" abstract="true"
+ p:prudent="true"/>
+
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean id="appenderFileMain" parent="appenderFile"
destroy-method="stop" init-method="start"
+
p:file="${phiz.logging.file.dir}/${
phiz.logging.file.name}${phiz.logging.file.name.ext}"
+ p:name="file">
+ <beans:property name="encoder">
+ <beans:bean parent="encoderPatternLayout"
destroy-method="stop" init-method="start"
+ p:pattern="%d{yyyy-MM-dd HH:mm:ss z} [%C:%L %t]%xReq %p
- %m%n%exRoot"/>
+ </beans:property>
+ </beans:bean>
</beans:beans>
=======================================
--- /phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz.xml Tue
Feb 3 16:25:30 2015 UTC
+++ /phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz.xml Fri
Feb 6 12:28:44 2015 UTC
@@ -35,7 +35,7 @@
<beans:bean id="methodInvoke"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
abstract="true"/>
<!--====================================================================================================
- = CHARACTER SET
+ = CHARACTER SETS
=====================================================================================================-->
<beans:bean id="charset" class="java.nio.charset.Charset"
abstract="true"/>
@@ -43,6 +43,15 @@
<beans:constructor-arg index="0" value="UTF-8"/>
</beans:bean>
+
<!--====================================================================================================
+ = TIME ZONES
+
=====================================================================================================-->
+ <beans:bean id="timeZone" class="java.util.TimeZone" abstract="true"/>
+
+ <beans:bean id="timeZoneUtc" parent="timeZone"
factory-method="getTimeZone">
+ <beans:constructor-arg index="0" value="UTC"/>
+ </beans:bean>
+
<!--====================================================================================================
= PROPERTY SOURCES PLACEHOLDER CONFIGURERS
=====================================================================================================-->
@@ -60,7 +69,7 @@
</beans:bean>
<!--====================================================================================================
- = CONVERSION SERVICE
+ = CONVERSION SERVICES
=====================================================================================================-->
<beans:bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean"
primary="true">
<beans:property name="converters">
=======================================
--- /phiz-core/src/main/resources/META-INF/spring.factories Thu Jan 29
00:44:10 2015 UTC
+++ /phiz-core/src/main/resources/META-INF/spring.factories Fri Feb 6
12:28:44 2015 UTC
@@ -1,6 +1,7 @@
org.springframework.boot.SpringApplicationRunListener=\
- gov.hhs.onc.phiz.context.impl.CommandLineApplicationRunListener,\
- gov.hhs.onc.phiz.context.impl.ProfilesApplicationRunListener
+ gov.hhs.onc.phiz.context.impl.ProfilesApplicationRunListener,\
+ gov.hhs.onc.phiz.env.impl.CommandLineApplicationRunListener,\
+ gov.hhs.onc.phiz.logging.impl.LoggingApplicationRunListener
org.springframework.context.ApplicationListener=\
ch.qos.logback.ext.spring.ApplicationContextHolder
=======================================
--- /phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties Thu
Jan 29 00:44:10 2015 UTC
+++ /phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties Fri
Feb 6 12:28:44 2015 UTC
@@ -43,12 +43,7 @@
phiz.data.db.user.hub.pass=${phiz.data.db.user.admin.pass}
#================================================================================
-# LOGGING LOGSTASH
-#================================================================================
-#phiz.logging.logstash.port=14560
-
-#================================================================================
-# LOGGING METRICS
+# LOGGING: METRICS
#================================================================================
phiz.logging.metrics.metric.cached.thread.states.interval=1
phiz.logging.metrics.reporter.logstash.interval=1
=======================================
--- /phiz-parent/pom.xml Tue Feb 3 16:25:30 2015 UTC
+++ /phiz-parent/pom.xml Fri Feb 6 12:28:44 2015 UTC
@@ -299,7 +299,7 @@
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
- <version>3.6</version>
+ <version>4.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
@@ -1051,9 +1051,10 @@
<javax.net.ssl.trustStore/>
<logback.configurationFile>META-INF/phiz/logback/logback-phiz.xml</logback.configurationFile>
<phiz.conf.ssl.dir>${project.build.directory}/surefire-ssl</phiz.conf.ssl.dir>
-
<phiz.log.console.tty>true</phiz.log.console.tty>
-
<phiz.log.file.dir>${project.build.directory}/surefire-logs</phiz.log.file.dir>
-
<
phiz.log.file.name>${project.artifactId}-test</
phiz.log.file.name>
+
<phiz.logging.console.tty>true</phiz.logging.console.tty>
+
<phiz.logging.file.dir>${project.build.directory}/surefire-logs</phiz.logging.file.dir>
+
<
phiz.logging.file.name>${project.artifactId}-test</
phiz.logging.file.name>
+
<
phiz.logging.logstash.file.name>${project.artifactId}-logstash-test</
phiz.logging.logstash.file.name>
<phiz.mode>dev</phiz.mode>
</systemPropertyVariables>
<trimStackTrace>false</trimStackTrace>
@@ -1368,7 +1369,7 @@
<systemProperty>loader.main=gov.hhs.onc.phiz.context.impl.PhizApplication</systemProperty>
<systemProperty>logback.configurationFile=META-INF/phiz/logback/logback-phiz.xml</systemProperty>
<systemProperty>
phiz.app.name=${project.artifactId}</systemProperty>
-
<systemProperty>
phiz.log.file.name=${project.artifactId}</systemProperty>
+
<systemProperty>
phiz.logging.file.name=${project.artifactId}</systemProperty>
</systemProperties>
</jvmSettings>
<mainClass>org.springframework.boot.loader.PropertiesLauncher</mainClass>
=======================================
--- /phiz-tools/src/it/pom.xml Fri Jan 9 01:16:51 2015 UTC
+++ /phiz-tools/src/it/pom.xml Fri Feb 6 12:28:44 2015 UTC
@@ -42,9 +42,10 @@
<execution>
<id>test-integration</id>
<configuration>
- <skip>${skipTests}</skip>
+ <skip>%{skipTests}</skip>
<systemPropertyVariables>
-
<
phiz.log.file.name>%{project.artifactId}-test-it</
phiz.log.file.name>
+
<
phiz.logging.file.name>%{project.artifactId}-test-it</
phiz.logging.file.name>
+
<
phiz.logging.logstash.file.name>%{project.artifactId}-logstash-test-it</
phiz.logging.logstash.file.name>
</systemPropertyVariables>
<workingDirectory>%{project.build.testDebShareDataDirectory}</workingDirectory>
</configuration>
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpRequestEvent.java
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpRequestEvent.java
Fri Feb 6 12:28:44 2015 UTC
@@ -90,6 +90,11 @@
public void setServletPath(@Nullable String servletPath);
+ @JsonProperty
+ public String getUri();
+
+ public void setUri(String uri);
+
@JsonProperty
public String getUrl();
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpResponseEvent.java
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/HttpResponseEvent.java
Fri Feb 6 12:28:44 2015 UTC
@@ -2,12 +2,16 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import gov.hhs.onc.phiz.logging.logstash.MarkerObjectFieldName;
-import org.springframework.http.HttpStatus;
@MarkerObjectFieldName("httpResponse")
public interface HttpResponseEvent extends HttpEvent {
@JsonProperty
- public HttpStatus getStatus();
-
- public void setStatus(HttpStatus status);
+ public Integer getStatus();
+
+ public void setStatus(Integer status);
+
+ @JsonProperty
+ public String getStatusMessage();
+
+ public void setStatusMessage(String statusMsg);
}
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpRequestEventImpl.java
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpRequestEventImpl.java
Fri Feb 6 12:28:44 2015 UTC
@@ -20,6 +20,7 @@
private String serverName;
private Integer serverPort;
private String servletPath;
+ private String uri;
private String url;
private String userPrincipal;
@@ -180,6 +181,16 @@
public void setServletPath(@Nullable String servletPath) {
this.servletPath = servletPath;
}
+
+ @Override
+ public String getUri() {
+ return this.uri;
+ }
+
+ @Override
+ public void setUri(String uri) {
+ this.uri = uri;
+ }
@Override
public String getUrl() {
=======================================
---
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpResponseEventImpl.java
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-web-core/src/main/java/gov/hhs/onc/phiz/web/logging/impl/HttpResponseEventImpl.java
Fri Feb 6 12:28:44 2015 UTC
@@ -1,18 +1,28 @@
package gov.hhs.onc.phiz.web.logging.impl;
import gov.hhs.onc.phiz.web.logging.HttpResponseEvent;
-import org.springframework.http.HttpStatus;
public class HttpResponseEventImpl extends AbstractHttpEvent implements
HttpResponseEvent {
- private HttpStatus status;
+ private Integer status;
+ private String statusMsg;
@Override
- public HttpStatus getStatus() {
+ public Integer getStatus() {
return this.status;
}
@Override
- public void setStatus(HttpStatus status) {
+ public void setStatus(Integer status) {
this.status = status;
}
+
+ @Override
+ public String getStatusMessage() {
+ return this.statusMsg;
+ }
+
+ @Override
+ public void setStatusMessage(String statusMsg) {
+ this.statusMsg = statusMsg;
+ }
}
=======================================
--- /phiz-web-portal/src/it/pom.xml Fri Jan 9 01:16:51 2015 UTC
+++ /phiz-web-portal/src/it/pom.xml Fri Feb 6 12:28:44 2015 UTC
@@ -42,9 +42,10 @@
<execution>
<id>test-integration</id>
<configuration>
- <skip>${skipTests}</skip>
+ <skip>%{skipTests}</skip>
<systemPropertyVariables>
-
<
phiz.log.file.name>%{project.artifactId}-test-it</
phiz.log.file.name>
+
<
phiz.logging.file.name>%{project.artifactId}-test-it</
phiz.logging.file.name>
+
<
phiz.logging.logstash.file.name>%{project.artifactId}-logstash-test-it</
phiz.logging.logstash.file.name>
</systemPropertyVariables>
<workingDirectory>%{project.build.testDebShareDataDirectory}</workingDirectory>
</configuration>
=======================================
--- /phiz-web-ws/src/it/pom.xml Fri Jan 9 01:16:51 2015 UTC
+++ /phiz-web-ws/src/it/pom.xml Fri Feb 6 12:28:44 2015 UTC
@@ -42,9 +42,10 @@
<execution>
<id>test-integration</id>
<configuration>
- <skip>${skipTests}</skip>
+ <skip>%{skipTests}</skip>
<systemPropertyVariables>
-
<
phiz.log.file.name>%{project.artifactId}-test-it</
phiz.log.file.name>
+
<
phiz.logging.file.name>%{project.artifactId}-test-it</
phiz.logging.file.name>
+
<
phiz.logging.logstash.file.name>%{project.artifactId}-logstash-test-it</
phiz.logging.logstash.file.name>
<phiz.soapui.output.dir>${project.build.directory}/surefire-reports</phiz.soapui.output.dir>
<phiz.soapui.project.file>${project.build.itSoapUiDirectory}/soapui-%{project.artifactId}.xml</phiz.soapui.project.file>
<phiz.soapui.settings.file>${project.build.itSoapUiDirectory}/soapui-settings-%{project.artifactId}.xml</phiz.soapui.settings.file>
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/feature/impl/PhizLoggingFeature.java
Fri Feb 6 12:28:44 2015 UTC
@@ -15,6 +15,7 @@
import gov.hhs.onc.phiz.web.ws.PhizWsEndpointType;
import gov.hhs.onc.phiz.web.ws.PhizWsMessageContextProperties;
import gov.hhs.onc.phiz.web.ws.PhizWsMessageDirection;
+import gov.hhs.onc.phiz.web.ws.PhizWsMessageProperties;
import
gov.hhs.onc.phiz.web.ws.interceptor.impl.AbstractPhizSoapInterceptor;
import gov.hhs.onc.phiz.web.ws.logging.WsMessageEvent;
import gov.hhs.onc.phiz.web.ws.logging.WsRequestMessageEvent;
@@ -45,6 +46,7 @@
import org.apache.cxf.Bus;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.feature.AbstractFeature;
import org.apache.cxf.helpers.DOMUtils;
@@ -56,7 +58,6 @@
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
-import org.apache.cxf.service.Service;
import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.apache.cxf.transport.http.Headers;
import org.apache.cxf.ws.policy.PolicyConstants;
@@ -200,6 +201,7 @@
httpEvent.setServerName(httpServletReq.getServerName());
httpEvent.setServerPort(httpServletReq.getServerPort());
httpEvent.setServletPath(httpServletReq.getServletPath());
+ httpEvent.setUri(httpServletReq.getRequestURL().toString());
httpEvent.setUrl(httpServletReq.getRequestURL().toString());
httpEvent.setUserPrincipal(Objects.toString(httpServletReq.getUserPrincipal(),
null));
@@ -230,8 +232,13 @@
HttpResponseEvent httpEvent = super.createHttpEvent(msg);
httpEvent.setContentType(PhizWsUtils.getProperty(msg,
Message.CONTENT_TYPE));
httpEvent.getHeaders().putAll(Headers.getSetProtocolHeaders(msg));
+
+ Integer status = PhizWsUtils.getProperty(msg,
Message.RESPONSE_CODE, Integer.class);
+ httpEvent.setStatus(status);
+
+ String statusMsg = PhizWsUtils.getProperty(msg,
PhizWsMessageProperties.RESP_CODE_MSG);
// noinspection ConstantConditions
-
httpEvent.setStatus(HttpStatus.valueOf(PhizWsUtils.getProperty(msg,
Message.RESPONSE_CODE, Integer.class)));
+ httpEvent.setStatusMessage(((statusMsg != null) ? statusMsg :
HttpStatus.valueOf(status).getReasonPhrase()));
return httpEvent;
}
@@ -311,11 +318,11 @@
return new PhizLoggingOutCallback<>(msg, httpEvent,
wsMsgEvent, (callbackMsg, callbackHttpEvent) -> {
// noinspection ConstantConditions
-
httpEvent.setContentLength(httpServletResp.getCoyoteResponse().getContentLengthLong());
+
httpEvent.setContentLength(httpServletResp.getContentWritten());
// noinspection ConstantConditions
httpEvent.setContentType(httpServletResp.getContentType());
- // noinspection ConstantConditions
-
httpEvent.setStatus(HttpStatus.valueOf(httpServletResp.getStatus()));
+ httpEvent.setStatus(httpServletResp.getStatus());
+ httpEvent.setStatusMessage(httpServletResp.getMessage());
HttpHeaders httpHeaders = httpEvent.getHeaders();
@@ -358,11 +365,15 @@
protected PhizLoggingOutCallback<HttpRequestEvent,
WsRequestMessageEvent> createCallback(SoapMessage msg, HttpRequestEvent
httpEvent,
WsRequestMessageEvent wsMsgEvent) {
return new PhizLoggingOutCallback<>(msg, httpEvent,
wsMsgEvent, (callbackMsg, callbackHttpEvent) -> {
+ httpEvent.setContentLength(PhizWsUtils.getProperty(msg,
PhizWsMessageProperties.CONTENT_LEN, Long.class));
httpEvent.setContentType(PhizWsUtils.getProperty(msg,
Message.CONTENT_TYPE));
httpEvent.getHeaders().putAll(Headers.getSetProtocolHeaders(msg));
httpEvent.setMethod(HttpMethod.valueOf(PhizWsUtils.getProperty(msg,
Message.HTTP_REQUEST_METHOD)));
httpEvent.setPathInfo(PhizWsUtils.getProperty(msg,
Message.PATH_INFO));
+ httpEvent.setProtocol(PhizWsUtils.getProperty(msg,
PhizWsMessageProperties.PROTOCOL));
httpEvent.setQueryString(PhizWsUtils.getProperty(msg,
Message.QUERY_STRING));
+ httpEvent.setScheme(PhizWsUtils.getProperty(msg,
PhizWsMessageProperties.HTTP_SCHEME));
+ httpEvent.setUri(PhizWsUtils.getProperty(msg,
Message.REQUEST_URI));
httpEvent.setUrl(PhizWsUtils.getProperty(msg,
Message.REQUEST_URL));
});
}
@@ -387,15 +398,15 @@
@Override
public void initialize(Server server, Bus bus) {
- Service service = server.getEndpoint().getService();
+ Endpoint endpoint = server.getEndpoint();
PhizServerLoggingInInterceptor loggingInInterceptor = new
PhizServerLoggingInInterceptor(SERVER_LOGGER);
- service.getInInterceptors().add(loggingInInterceptor);
- service.getInFaultInterceptors().add(loggingInInterceptor);
+ endpoint.getInInterceptors().add(loggingInInterceptor);
+ endpoint.getInFaultInterceptors().add(loggingInInterceptor);
PhizServerLoggingOutInterceptor loggingOutInterceptor = new
PhizServerLoggingOutInterceptor(SERVER_LOGGER);
- service.getOutInterceptors().add(loggingOutInterceptor);
- service.getOutFaultInterceptors().add(loggingOutInterceptor);
+ endpoint.getOutInterceptors().add(loggingOutInterceptor);
+ endpoint.getOutFaultInterceptors().add(loggingOutInterceptor);
}
@Override
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/iis/hub/impl/IisHubServiceImpl.java
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/iis/hub/impl/IisHubServiceImpl.java
Fri Feb 6 12:28:44 2015 UTC
@@ -32,6 +32,7 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.jws.WebService;
@@ -43,6 +44,7 @@
import org.apache.commons.lang3.tuple.Pair;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.endpoint.ClientCallback;
import org.apache.cxf.jaxws.context.WrappedMessageContext;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.ExchangeImpl;
@@ -129,13 +131,20 @@
Exchange clientExchange = new ExchangeImpl();
clientExchange.put(PhizLoggingFeature.WS_MSG_EVENT_ID_PROP_NAME,
reqMsg.getExchange().get(PhizLoggingFeature.WS_MSG_EVENT_ID_PROP_NAME));
+ ClientCallback clientReqCallback = new ClientCallback();
+
try {
- return new ImmutablePair<>(((SubmitSingleMessageResponseType)
client.invoke(
-
client.getEndpoint().getBinding().getBindingInfo().getOperation(PhizWsQnames.SUBMIT_SINGLE_MSG_OP),
new Object[] { reqParams }, null,
- clientExchange)[0]), new HubResponseHeaderTypeImpl(destId,
destUriStr));
+ try {
+ client.invoke(clientReqCallback,
client.getEndpoint().getBinding().getBindingInfo().getOperation(PhizWsQnames.SUBMIT_SINGLE_MSG_OP),
+ new Object[] { reqParams }, clientExchange);
+
+ return new
ImmutablePair<>(((SubmitSingleMessageResponseType)
clientReqCallback.get()[0]), new HubResponseHeaderTypeImpl(destId,
destUriStr));
+ } catch (ExecutionException e) {
+ throw clientReqCallback.getException();
+ }
} catch (DestinationConnectionFault | HubClientFault |
MessageTooLargeFault | SecurityFault | UnknownDestinationFault e) {
throw e;
- } catch (Exception e) {
+ } catch (Throwable e) {
SocketTimeoutException clientReqTimeoutException =
((SocketTimeoutException)
Stream.of(ExceptionUtils.getThrowables(e))
.filter(clientReqExceptionCause ->
(clientReqExceptionCause instanceof
SocketTimeoutException)).findFirst().orElse(null));
=======================================
---
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/transport/impl/PhizAsyncHttpConduit.java
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/transport/impl/PhizAsyncHttpConduit.java
Fri Feb 6 12:28:44 2015 UTC
@@ -1,13 +1,45 @@
package gov.hhs.onc.phiz.web.ws.transport.impl;
+import gov.hhs.onc.phiz.web.ws.PhizWsMessageProperties;
+import gov.hhs.onc.phiz.web.ws.utils.PhizWsUtils;
import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URI;
+import java.util.Objects;
import javax.annotation.Nullable;
import org.apache.cxf.Bus;
+import org.apache.cxf.message.Message;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit;
+import org.apache.cxf.transport.http.asyncclient.CXFHttpRequest;
+import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
public class PhizAsyncHttpConduit extends AsyncHTTPConduit {
+ private class PhizAsyncWrappedOutputStream extends
AsyncWrappedOutputStream {
+ private CXFHttpRequest httpReq;
+
+ public PhizAsyncWrappedOutputStream(Message outMsg, boolean
cacheReq, boolean chunking, int chunkThreshold, CXFHttpRequest httpReq) {
+ super(outMsg, cacheReq, chunking, chunkThreshold,
PhizAsyncHttpConduit.this.getConduitName(), httpReq.getURI());
+
+ (this.httpReq = httpReq).setOutputStream(this);
+ }
+
+ @Override
+ public void close() throws IOException {
+ super.close();
+
+ this.outMessage.put(PhizWsMessageProperties.CONTENT_LEN,
this.httpReq.getEntity().getContentLength());
+ }
+
+ @Override
+ protected void updateResponseHeaders(Message inMsg) throws
IOException {
+ inMsg.put(PhizWsMessageProperties.RESP_CODE_MSG,
this.getResponseMessage());
+
+ super.updateResponseHeaders(inMsg);
+ }
+ }
+
public PhizAsyncHttpConduit(Bus bus, PhizAsyncHttpConduitFactory
conduitFactory) throws IOException {
this(bus, new EndpointInfo(), null, conduitFactory);
}
@@ -16,4 +48,19 @@
throws IOException {
super(bus, endpointInfo, endpointRef, conduitFactory);
}
+
+ @Override
+ protected void setupConnection(Message outMsg, URI uri,
HTTPClientPolicy clientPolicy) throws IOException {
+ super.setupConnection(outMsg, uri, clientPolicy);
+
+ if (Objects.equals(PhizWsUtils.getProperty(outMsg, USE_ASYNC,
Boolean.class), Boolean.TRUE)) {
+ outMsg.put(PhizWsMessageProperties.PROTOCOL,
outMsg.get(CXFHttpRequest.class).getProtocolVersion().toString());
+ }
+ }
+
+ @Override
+ protected OutputStream createOutputStream(Message outMsg, boolean
cacheReq, boolean chunking, int chunkThreshold) throws IOException {
+ return (Objects.equals(PhizWsUtils.getProperty(outMsg, USE_ASYNC,
Boolean.class), Boolean.TRUE) ? new PhizAsyncWrappedOutputStream(outMsg,
cacheReq,
+ chunking, chunkThreshold, outMsg.get(CXFHttpRequest.class)) :
super.createOutputStream(outMsg, cacheReq, chunking, chunkThreshold));
+ }
}
=======================================
---
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-client.xml
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-client.xml
Fri Feb 6 12:28:44 2015 UTC
@@ -113,7 +113,8 @@
<beans:bean id="clientPolicyHttp"
class="org.apache.cxf.transports.http.configuration.HTTPClientPolicy"
abstract="true"
p:allowChunking="false"
p:asyncExecuteTimeoutRejection="true"
- p:cacheControl="no-cache, no-store, no-transform"/>
+ p:cacheControl="no-cache, no-store, no-transform"
+ p:connection="CLOSE"/>
<!--====================================================================================================
= CONDUIT FACTORIES
==============================================================================
Revision: ba3e55c81d94
Branch: default
Author: Michal Kotelba <
michal....@esacinc.com>
Date: Fri Feb 6 12:53:52 2015 UTC
Log: - Supports PHIZ-31.
- Removed queue components and dependencies.
https://code.google.com/p/phiz/source/detail?r=ba3e55c81d94
Deleted:
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-data-queue.xml
/phiz-core/src/test/scripts/groovy/phiz-process-test-rabbitmq-it.groovy
Modified:
/phiz-core/pom.xml
/phiz-core/src/main/resources/META-INF/phiz/phiz.properties
/phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties
/phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-test.xml
/phiz-parent/pom.xml
=======================================
---
/phiz-core/src/main/resources/META-INF/phiz/spring/spring-phiz-data-queue.xml
Fri Jan 9 01:16:51 2015 UTC
+++ /dev/null
@@ -1,167 +0,0 @@
-<beans:beans
- xmlns:aop="
http://www.springframework.org/schema/aop"
- xmlns:beans="
http://www.springframework.org/schema/beans"
- xmlns:c="
http://www.springframework.org/schema/c"
- xmlns:context="
http://www.springframework.org/schema/context"
- xmlns:p="
http://www.springframework.org/schema/p"
- xmlns:rabbit="
http://www.springframework.org/schema/rabbit"
- xmlns:task="
http://www.springframework.org/schema/task"
- xmlns:util="
http://www.springframework.org/schema/util"
- xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
-
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
-
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
-
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
-
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit.xsd
-
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
-
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
-
-
<!--====================================================================================================
- = RABBIT
-
=====================================================================================================-->
- <rabbit:annotation-driven/>
-
-
<!--====================================================================================================
- = KEY STORES
-
=====================================================================================================-->
- <!--suppress SpringPlaceholdersInspection -->
- <beans:bean id="keyStoreRabbitClientKey" parent="keyStoreJks"
lazy-init="true"
- p:password="${phiz.rabbitmq.crypto.client.store.key.pass}"
- p:resource="${phiz.rabbitmq.crypto.client.store.key.file}"/>
-
- <!--suppress SpringPlaceholdersInspection -->
- <beans:bean id="keyStoreRabbitClientTrust" parent="keyStoreJks"
lazy-init="true"
- p:password="${phiz.rabbitmq.crypto.client.store.trust.pass}"
- p:resource="${phiz.rabbitmq.crypto.client.store.trust.file}"/>
-
-
<!--====================================================================================================
- = KEY MANAGERS
-
=====================================================================================================-->
- <beans:bean id="keyManagerRabbitClient" parent="keyManagerNewSunX509"
lazy-init="true">
- <beans:property name="factoryParameters">
- <beans:bean parent="keyStoreBuilderParams">
- <beans:constructor-arg index="0"
type="java.security.KeyStore$Builder">
- <beans:bean parent="keyStoreBuilder"
factory-method="newInstance">
- <beans:constructor-arg index="0"
type="java.security.KeyStore" ref="keyStoreRabbitClientKey"/>
- <beans:constructor-arg index="1"
type="java.security.KeyStore$ProtectionParameter">
- <beans:bean parent="keyStoreProtectionPass">
- <!--suppress SpringPlaceholdersInspection
-->
- <beans:constructor-arg index="0"
type="char[]"
value="${phiz.rabbitmq.crypto.client.store.key.entry.ssl.pass}"/>
- </beans:bean>
- </beans:constructor-arg>
- </beans:bean>
- </beans:constructor-arg>
- </beans:bean>
- </beans:property>
- </beans:bean>
-
-
<!--====================================================================================================
- = TRUST MANAGERS
-
=====================================================================================================-->
- <beans:bean id="trustManagerRabbitClient" parent="trustManagerPkix"
lazy-init="true">
- <beans:property name="factoryParameters">
- <beans:bean parent="certPathTrustManagerParams">
- <beans:constructor-arg index="0"
type="java.security.cert.CertPathParameters">
- <beans:bean parent="certPathParamsPkixBuilder">
- <beans:constructor-arg index="0"
type="java.security.KeyStore" ref="keyStoreRabbitClientTrust"/>
- <beans:constructor-arg index="1"
type="java.security.cert.CertSelector">
- <beans:bean parent="certSelectorX509"/>
- </beans:constructor-arg>
- </beans:bean>
- </beans:constructor-arg>
- </beans:bean>
- </beans:property>
- </beans:bean>
-
-
<!--====================================================================================================
- = SECURE SOCKETS LAYER PARAMETERS
-
=====================================================================================================-->
- <beans:bean id="sslParamsRabbitClient" parent="sslParamsBase"/>
-
-
<!--====================================================================================================
- = SECURE SOCKETS LAYER CONTEXTS
-
=====================================================================================================-->
- <beans:bean id="sslContextRabbitClient" parent="sslContextBase"
lazy-init="true">
- <beans:property name="keyManagers">
- <beans:array>
- <beans:ref bean="keyManagerRabbitClient"/>
- </beans:array>
- </beans:property>
- <beans:property name="trustManagers">
- <beans:array>
- <beans:ref bean="trustManagerRabbitClient"/>
- </beans:array>
- </beans:property>
- </beans:bean>
-
-
<!--====================================================================================================
- = SECURE SOCKETS LAYER SOCKET FACTORIES
-
=====================================================================================================-->
- <beans:bean id="sslSocketFactoryRabbitClient"
parent="sslSocketFactoryBase" lazy-init="true"
- p:sslContext-ref="sslContextRabbitClient"
- p:sslParameters-ref="sslParamsRabbitClient"/>
-
-
<!--====================================================================================================
- = CONNECTION FACTORIES
-
=====================================================================================================-->
- <!--suppress SpringPlaceholdersInspection -->
- <beans:bean id="connFactoryRabbit"
class="com.rabbitmq.client.ConnectionFactory" abstract="true"
- p:host="${
phiz.rabbitmq.host.name}"
- p:port="${phiz.rabbitmq.port.amqps}"
- p:saslConfig="#{ T(com.rabbitmq.client.DefaultSaslConfig).EXTERNAL
}"
- p:socketFactory-ref="sslSocketFactoryRabbitClient"
- p:virtualHost="${phiz.rabbitmq.vhost.path}"/>
-
-
<!--====================================================================================================
- = CONNECTION FACTORIES: SPRING
-
=====================================================================================================-->
- <beans:bean id="connFactoryRabbitSpring"
class="org.springframework.amqp.rabbit.connection.ConnectionFactory"
abstract="true"/>
-
- <beans:bean id="connFactoryRabbitSpringCaching"
class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory"
parent="connFactoryRabbitSpring"
- abstract="true"/>
-
-
<!--====================================================================================================
- = TRANSACTION MANAGERS
-
=====================================================================================================-->
- <beans:bean id="txManagerRabbit"
class="org.springframework.amqp.rabbit.transaction.RabbitTransactionManager"
parent="txManager" abstract="true"
- p:nestedTransactionAllowed="true"
- p:validateExistingTransaction="true"/>
-
-
<!--====================================================================================================
- = ADMINISTRATORS
-
=====================================================================================================-->
- <beans:bean id="amqpAdmin"
class="org.springframework.amqp.core.AmqpAdmin" abstract="true"/>
-
- <beans:bean id="rabbitAdmin"
class="org.springframework.amqp.rabbit.core.RabbitAdmin" parent="amqpAdmin"
abstract="true"/>
-
-
<!--====================================================================================================
- = TEMPLATES
-
=====================================================================================================-->
- <beans:bean id="amqpTemplate"
class="org.springframework.amqp.core.AmqpTemplate" abstract="true"/>
-
- <beans:bean id="rabbitTemplate"
class="org.springframework.amqp.rabbit.core.RabbitTemplate"
parent="amqpTemplate" abstract="true"
- p:encoding="#{ charsetUtf8.name() }"/>
-
-
<!--====================================================================================================
- = MESSAGE ADDRESSES
-
=====================================================================================================-->
- <beans:bean id="msgAddr" class="org.springframework.amqp.core.Address"
abstract="true"/>
-
-
<!--====================================================================================================
- = MESSAGE LISTENERS
-
=====================================================================================================-->
- <beans:bean id="msgListener"
class="org.springframework.amqp.rabbit.core.ChannelAwareMessageListener"
abstract="true"/>
-
- <beans:bean id="msgListenerAdapter"
class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter"
parent="msgListener" abstract="true"
- p:encoding="#{ charsetUtf8.name() }"/>
-
-
<!--====================================================================================================
- = MESSAGE LISTENER CONTAINERS
-
=====================================================================================================-->
- <beans:bean id="msgListenerContainer"
class="org.springframework.amqp.rabbit.listener.MessageListenerContainer"
abstract="true"/>
-
- <beans:bean id="msgListenerContainerSimple"
class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer"
parent="msgListenerContainer"
- abstract="true"
- p:autoDeclare="false"
- p:channelTransacted="true"/>
-</beans:beans>
=======================================
--- /phiz-core/src/test/scripts/groovy/phiz-process-test-rabbitmq-it.groovy
Thu Jan 22 06:01:46 2015 UTC
+++ /dev/null
@@ -1,162 +0,0 @@
-import gov.hhs.onc.phiz.crypto.ssl.PhizTlsVersions
-import java.nio.file.Paths
-import org.apache.commons.lang3.StringUtils
-import org.apache.maven.artifact.Artifact
-import org.apache.maven.artifact.DefaultArtifact
-import org.apache.maven.artifact.handler.DefaultArtifactHandler
-import
org.springframework.beans.factory.config.PlaceholderConfigurerSupport
-import org.springframework.core.io.FileSystemResource
-import org.springframework.core.io.support.PropertiesLoaderUtils
-import org.springframework.util.PropertyPlaceholderHelper
-
-def pluginContextMap =
session.getPluginContext(mojoExecution.mojoDescriptor.pluginDescriptor,
project)
-def resolvedProps = pluginContextMap.get("resolvedProps")
-def localRepo = project.projectBuildingRequest.localRepository
-
-def rabbitMqServerArtifact = new
DefaultArtifact("com.rabbitmq", "rabbitmq-server-generic-unix", "3.4.2",
Artifact.SCOPE_TEST, "tar.gz", StringUtils.EMPTY,
- new DefaultArtifactHandler())
-def rabbitMqServerArtifactLocalRepoFile = new
File(localRepo.basedir, "${localRepo.pathOf(rabbitMqServerArtifact)}.${rabbitMqServerArtifact.type}")
-def rabbitMqServerArtifactFileName
= "${rabbitMqServerArtifact.artifactId}-${rabbitMqServerArtifact.version}.${rabbitMqServerArtifact.type}"
-def rabbitMqServerArtifactUrl
= "
http://www.rabbitmq.com/releases/rabbitmq-server/current/${rabbitMqServerArtifactFileName}"
-
-def testItRabbitMqDir = new
File(project.properties["project.build.itDirectory"], "rabbitmq")
-
-if (!testItRabbitMqDir.exists()) {
- return
-}
-
-def testItRabbitMqServerArtifactFile = new File(testItRabbitMqDir,
rabbitMqServerArtifactFileName)
-
-testItRabbitMqDir.mkdirs()
-
-if (!rabbitMqServerArtifactLocalRepoFile.exists()) {
- ant.get(src: rabbitMqServerArtifactUrl, dest:
testItRabbitMqServerArtifactFile)
-
- ant.exec(executable: "mvn", failonerror: true) {
- ant.arg(value: "-q")
- ant.arg(value: "install:install-file")
- ant.arg(value: "-DgroupId=${rabbitMqServerArtifact.groupId}")
- ant.arg(value: "-DartifactId=${rabbitMqServerArtifact.artifactId}")
- ant.arg(value: "-Dversion=${rabbitMqServerArtifact.version}")
- ant.arg(value: "-Dpackaging=${rabbitMqServerArtifact.type}")
- ant.arg(value: "-DgeneratePom=true")
- ant.arg(value: "-Dfile=${testItRabbitMqServerArtifactFile}")
- }
-}
-
-ant.untar(src: rabbitMqServerArtifactLocalRepoFile, dest:
testItRabbitMqDir, compression: "gzip") {
- ant.cutdirsmapper(dirs: 1)
-}
-
-def rabbitMqAdminExecArtifact = new
DefaultArtifact("com.rabbitmq", "rabbitmq-admin", "3.4.2",
Artifact.SCOPE_TEST, "py", StringUtils.EMPTY,
- new DefaultArtifactHandler())
-def rabbitMqAdminExecArtifactLocalRepoFile = new
File(localRepo.basedir, "${localRepo.pathOf(rabbitMqAdminExecArtifact)}.${rabbitMqServerArtifact.type}")
-def rabbitMqAdminExecArtifactUrl
= "
http://hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_4_2/bin/rabbitmqadmin"
-
-def testItRabbitMqSbinDir = new File(testItRabbitMqDir, "sbin")
-def testItRabbitMqAdminExecFile = new
File(testItRabbitMqSbinDir, "rabbitmqadmin")
-def testItRabbitMqControlExecFile = new
File(testItRabbitMqSbinDir, "rabbitmqctl")
-def testItRabbitMqServerExecFile = new
File(testItRabbitMqSbinDir, "rabbitmq-server")
-
-if (!rabbitMqAdminExecArtifactLocalRepoFile.exists()) {
- ant.get(src: rabbitMqAdminExecArtifactUrl, dest:
testItRabbitMqAdminExecFile)
-
- ant.exec(executable: "mvn", failonerror: true) {
- ant.arg(value: "-q")
- ant.arg(value: "install:install-file")
- ant.arg(value: "-DgroupId=${rabbitMqAdminExecArtifact.groupId}")
-
ant.arg(value: "-DartifactId=${rabbitMqAdminExecArtifact.artifactId}")
- ant.arg(value: "-Dversion=${rabbitMqAdminExecArtifact.version}")
- ant.arg(value: "-Dpackaging=${rabbitMqAdminExecArtifact.type}")
- ant.arg(value: "-DgeneratePom=true")
- ant.arg(value: "-Dfile=${testItRabbitMqAdminExecFile}")
- }
-} else {
- ant.copy(src: rabbitMqAdminExecArtifactLocalRepoFile, dest:
testItRabbitMqAdminExecFile)
-}
-
-ant.fileset(dir: testItRabbitMqSbinDir, includes: "rabbitmq*").each{
- it.file.setExecutable(true, false)
-}
-
-def testDebShareDataDir = new
File(project.properties["project.build.testDebShareDataDirectory"])
-def testItRabbitMqConfDir =
Paths.get(testItRabbitMqDir.path, "etc", "rabbitmq").toFile()
-def testItRabbitMqEnvProps = PropertiesLoaderUtils.loadProperties(new
FileSystemResource(new File(testItRabbitMqConfDir, "rabbitmq-env.conf")))
-def testItRabbitMqEnvPropPlaceholderHelper = new
PropertyPlaceholderHelper(PlaceholderConfigurerSupport.DEFAULT_PLACEHOLDER_PREFIX,
- PlaceholderConfigurerSupport.DEFAULT_PLACEHOLDER_SUFFIX)
-def testItRabbitMqPidFile = new File(testItRabbitMqSbinDir,
StringUtils.remove(testItRabbitMqEnvPropPlaceholderHelper.replacePlaceholders(
- testItRabbitMqEnvProps.getProperty("PID_FILE"),
testItRabbitMqEnvProps), "\""))
-def testItRabbitMqMgmtHttpPort =
resolvedProps["phiz.rabbitmq.port.mgmt.http"]
-
-Thread testItRabbitMqShutdownHookThread = new Thread({
- if (testItRabbitMqPidFile.exists()) {
-
log.info(String.format("Shutting down integration testing RabbitMQ
service (pid=%s).", StringUtils.trim(testItRabbitMqPidFile.text)))
-
- ant.exec(executable: testItRabbitMqControlExecFile, dir:
testItRabbitMqSbinDir, spawn: true) {
- ant.arg(value: "stop")
- ant.arg(value: testItRabbitMqPidFile)
- }
- }
-})
-
-Runtime.runtime.addShutdownHook(testItRabbitMqShutdownHookThread)
-
-ant.exec(executable: testItRabbitMqServerExecFile, dir:
testItRabbitMqSbinDir, spawn: true) {
- ant.arg(value: "-kernel")
- ant.arg(value: "inet_dist_listen_min")
- ant.arg(value: 0)
- ant.arg(value: "-kernel")
- ant.arg(value: "inet_dist_listen_max")
- ant.arg(value: 0)
- ant.arg(value: "-rabbit")
- ant.arg(value: "log_levels")
- ant.arg(value: "[{connection, info}]")
- ant.arg(value: "-rabbit")
- ant.arg(value: "tcp_listeners")
- ant.arg(value: "[]")
- ant.arg(value: "-rabbit")
- ant.arg(value: "ssl_listeners")
- ant.arg(value: "[${resolvedProps["phiz.rabbitmq.port.amqps"]}]")
- ant.arg(value: "-rabbit")
- ant.arg(value: "ssl_options")
- ant.arg(value: """[
- {cacertfile, "${new File(testDebShareDataDir,
resolvedProps["phiz.crypto.cred.ca.cert.file"])}"},
- {certfile, "${new File(testDebShareDataDir,
resolvedProps["phiz.rabbitmq.crypto.server.cred.ssl.cert.file"])}"},
- {fail_if_no_peer_cert, ${true}},
- {honor_cipher_order, ${true}},
- {keyfile, "${new File(testDebShareDataDir,
resolvedProps["phiz.rabbitmq.crypto.server.cred.ssl.key.private.file"])}"},
- {secure_renegotiate, ${true}},
- {verify, verify_peer},
- {versions, ['${PhizTlsVersions.TLS_1_2_NAME.toLowerCase()}']}
- ]""")
- ant.arg(value: "-rabbit")
- ant.arg(value: "ssl_cert_login_from")
- ant.arg(value: "common_name")
- ant.arg(value: "-rabbit")
- ant.arg(value: "ssl_handshake_timeout")
- ant.arg(value: 5000)
- ant.arg(value: "-rabbit")
- ant.arg(value: "auth_mechanisms")
- ant.arg(value: "['EXTERNAL']")
- ant.arg(value: "-rabbitmq_management")
- ant.arg(value: "listener")
- ant.arg(value: "[{port, ${testItRabbitMqMgmtHttpPort}}]")
-}
-
-ant.sleep(seconds: 2)
-
-if (testItRabbitMqPidFile.exists()) {
- ant.exec(executable: testItRabbitMqControlExecFile, dir:
testItRabbitMqSbinDir, failonerror: true) {
- ant.arg(value: "wait")
- ant.arg(value: testItRabbitMqPidFile)
- }
-}
-
-
log.info(String.format("Integration testing RabbitMQ service started
(pid=%s).", StringUtils.trim(testItRabbitMqPidFile.text)))
-
-ant.exec(executable: testItRabbitMqAdminExecFile, dir:
testItRabbitMqSbinDir, failonerror: true) {
- ant.arg(value: "-P")
- ant.arg(value: testItRabbitMqMgmtHttpPort)
- ant.arg(value: "import")
- ant.arg(value: new
File(testItRabbitMqConfDir, "rabbitmq-broker-${project.artifactId}.json"))
-}
=======================================
--- /phiz-core/pom.xml Tue Feb 3 16:25:30 2015 UTC
+++ /phiz-core/pom.xml Fri Feb 6 12:53:52 2015 UTC
@@ -285,14 +285,6 @@
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
- <groupId>org.springframework.amqp</groupId>
- <artifactId>spring-amqp</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.amqp</groupId>
- <artifactId>spring-rabbit</artifactId>
- </dependency>
- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
@@ -300,10 +292,6 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
- <dependency>
- <groupId>org.springframework.retry</groupId>
- <artifactId>spring-retry</artifactId>
- </dependency>
<!-- Test dependencies (inherited) -->
<dependency>
<groupId>org.hsqldb</groupId>
=======================================
--- /phiz-core/src/main/resources/META-INF/phiz/phiz.properties Fri Feb 6
12:28:44 2015 UTC
+++ /phiz-core/src/main/resources/META-INF/phiz/phiz.properties Fri Feb 6
12:53:52 2015 UTC
@@ -94,39 +94,6 @@
#================================================================================
phiz.logging.metrics.metric.cached.thread.states.interval=15
phiz.logging.metrics.reporter.logstash.interval=30
-
-#================================================================================
-# RABBITMQ
-#================================================================================
-
phiz.rabbitmq.host.name=localhost
-phiz.rabbitmq.port.amqps=5671
-phiz.rabbitmq.vhost.path=/phiz
-
-#================================================================================
-# RABBITMQ CRYPTOGRAPHY: CLIENT CREDENTIALS
-#================================================================================
-
phiz.rabbitmq.crypto.client.cred.ssl.subject.cn=phiz_rabbitmq_client
-
-#================================================================================
-# RABBITMQ CRYPTOGRAPHY: CLIENT KEY STORE
-#================================================================================
-phiz.rabbitmq.crypto.client.store.key.file=${phiz.conf.ssl.dir}/phiz_rabbitmq_client_store_key.jks
-
-#================================================================================
-# RABBITMQ CRYPTOGRAPHY: CLIENT KEY STORE ENTRIES
-#================================================================================
-phiz.rabbitmq.crypto.client.store.key.entry.ssl.alias=${
phiz.rabbitmq.crypto.client.cred.ssl.subject.cn}
-phiz.rabbitmq.crypto.client.store.key.entry.ssl.pass=${phiz.rabbitmq.crypto.client.store.key.pass}
-
-#================================================================================
-# RABBITMQ CRYPTOGRAPHY: CLIENT TRUST STORE
-#================================================================================
-phiz.rabbitmq.crypto.client.store.trust.file=${phiz.conf.ssl.dir}/phiz_rabbitmq_client_store_trust.jks
-
-#================================================================================
-# RABBITMQ CRYPTOGRAPHY: CLIENT TRUST STORE ENTRIES
-#================================================================================
-phiz.rabbitmq.crypto.client.store.trust.entry.ca.alias=${
phiz.crypto.cred.ca.subject.cn}
#================================================================================
# WEB SERVICE: IIS
=======================================
--- /phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties Fri
Feb 6 12:28:44 2015 UTC
+++ /phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties Fri
Feb 6 12:53:52 2015 UTC
@@ -47,28 +47,3 @@
#================================================================================
phiz.logging.metrics.metric.cached.thread.states.interval=1
phiz.logging.metrics.reporter.logstash.interval=1
-
-#================================================================================
-# RABBITMQ
-#================================================================================
-phiz.rabbitmq.port.amqp=35672
-phiz.rabbitmq.port.amqps=35671
-phiz.rabbitmq.port.dist=55671
-phiz.rabbitmq.port.mgmt.http=45672
-
-#================================================================================
-# RABBITMQ CRYPTOGRAPHY: CLIENT KEY STORE
-#================================================================================
-phiz.rabbitmq.crypto.client.store.key.pass=storepass
-
-#================================================================================
-# RABBITMQ CRYPTOGRAPHY: CLIENT TRUST STORE
-#================================================================================
-phiz.rabbitmq.crypto.client.store.trust.pass=storepass
-
-#================================================================================
-# RABBITMQ CRYPTOGRAPHY: SERVER CREDENTIALS
-#================================================================================
-
phiz.rabbitmq.crypto.server.cred.ssl.subject.cn=phiz_rabbitmq_server
-phiz.rabbitmq.crypto.server.cred.ssl.cert.file=${phiz.conf.ssl.dir}/${
phiz.rabbitmq.crypto.server.cred.ssl.subject.cn}_cert.pem
-phiz.rabbitmq.crypto.server.cred.ssl.key.private.file=${phiz.conf.ssl.dir}/${
phiz.rabbitmq.crypto.server.cred.ssl.subject.cn}_key.pem
=======================================
--- /phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-test.xml
Sun Jan 25 19:49:30 2015 UTC
+++ /phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-test.xml
Fri Feb 6 12:53:52 2015 UTC
@@ -71,45 +71,6 @@
<beans:bean id="credLeaf" parent="credImpl" abstract="true"
p:issuerCredential-ref="credCa"/>
-
<!--====================================================================================================
- = CREDENTIALS: RABBITMQ
-
=====================================================================================================-->
- <beans:bean id="credRabbitClient" parent="credGen">
- <beans:property name="credential">
- <beans:bean parent="credLeaf">
- <beans:property name="certificateRequest">
- <beans:bean parent="certReqLeaf">
- <beans:constructor-arg name="subject">
- <!--suppress SpringPlaceholdersInspection -->
- <beans:bean parent="dn"
-
p:commonName="${
phiz.rabbitmq.crypto.client.cred.ssl.subject.cn}"/>
- </beans:constructor-arg>
- </beans:bean>
- </beans:property>
- </beans:bean>
- </beans:property>
- </beans:bean>
-
- <!--suppress SpringPlaceholdersInspection -->
- <beans:bean id="credRabbitServer" parent="credGen"
-
p:certificateResource="${phiz.rabbitmq.crypto.server.cred.ssl.cert.file}"
- p:eagerInit="true"
-
p:privateKeyResource="${phiz.rabbitmq.crypto.server.cred.ssl.key.private.file}">
- <beans:property name="credential">
- <beans:bean parent="credLeaf">
- <beans:property name="certificateRequest">
- <beans:bean parent="certReqLeaf">
- <beans:constructor-arg name="subject">
- <!--suppress SpringPlaceholdersInspection -->
- <beans:bean parent="dn"
-
p:commonName="${
phiz.rabbitmq.crypto.server.cred.ssl.subject.cn}"/>
- </beans:constructor-arg>
- </beans:bean>
- </beans:property>
- </beans:bean>
- </beans:property>
- </beans:bean>
-
<!--====================================================================================================
= KEY STORES: CERTIFICATE AUTHORITY
=====================================================================================================-->
@@ -139,43 +100,6 @@
</beans:property>
</beans:bean>
-
<!--====================================================================================================
- = KEY STORES: RABBITMQ
-
=====================================================================================================-->
- <!--suppress SpringPlaceholdersInspection -->
- <beans:bean id="keyStoreRabbitClientKey" parent="keyStoreGen"
lazy-init="true"
- p:password="${phiz.rabbitmq.crypto.client.store.key.pass}"
- p:resource="${phiz.rabbitmq.crypto.client.store.key.file}">
- <beans:property name="entryMap">
- <beans:map>
- <!--suppress SpringPlaceholdersInspection -->
- <beans:entry
key="${phiz.rabbitmq.crypto.client.store.key.entry.ssl.alias}">
- <!--suppress SpringPlaceholdersInspection -->
- <beans:bean parent="keyStoreEntryPrivateKey"
- p:certificateChain="#{
credRabbitClient.certificateResponse.identity.chain[0] }"
-
p:password="${phiz.rabbitmq.crypto.client.store.key.entry.ssl.pass}"
- p:privateKey="#{
credRabbitClient.certificateResponse.identity.privateKey }"/>
- </beans:entry>
- </beans:map>
- </beans:property>
- </beans:bean>
-
- <!--suppress SpringPlaceholdersInspection -->
- <beans:bean id="keyStoreRabbitClientTrust" parent="keyStoreGen"
lazy-init="true"
- p:password="${phiz.rabbitmq.crypto.client.store.trust.pass}"
- p:resource="${phiz.rabbitmq.crypto.client.store.trust.file}">
- <beans:property name="entryMap">
- <beans:map>
- <!--suppress SpringPlaceholdersInspection -->
- <beans:entry
key="${phiz.rabbitmq.crypto.client.store.trust.entry.ca.alias}">
- <!--suppress SpringPlaceholdersInspection -->
- <beans:bean parent="keyStoreEntryTrustedCert"
- p:certificate="#{
credCa.certificateResponse.identity.chain[0] }"/>
- </beans:entry>
- </beans:map>
- </beans:property>
- </beans:bean>
-
<!--====================================================================================================
= DATABASE SERVERS
=====================================================================================================-->
=======================================
--- /phiz-parent/pom.xml Fri Feb 6 12:28:44 2015 UTC
+++ /phiz-parent/pom.xml Fri Feb 6 12:53:52 2015 UTC
@@ -533,22 +533,6 @@
<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
- <groupId>org.springframework.amqp</groupId>
- <artifactId>spring-amqp</artifactId>
- <version>1.4.2.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.amqp</groupId>
- <artifactId>spring-rabbit</artifactId>
- <version>1.4.2.RELEASE</version>
- <exclusions>
- <exclusion>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.2.1.RELEASE</version>
@@ -556,11 +540,6 @@
<scope>import</scope>
</dependency>
<dependency>
- <groupId>org.springframework.retry</groupId>
- <artifactId>spring-retry</artifactId>
- <version>1.1.2.RELEASE</version>
- </dependency>
- <dependency>
<groupId>tanukisoft</groupId>
<artifactId>wrapper</artifactId>
<version>3.2.3</version>
@@ -1263,7 +1242,6 @@
<script>file://${project.basedir.all}/phiz-core/src/test/scripts/groovy/phiz-process-test-deb-it.groovy</script>
<script>file://${project.basedir.all}/phiz-core/src/main/scripts/groovy/phiz-process-resources.groovy</script>
<script>file://${project.basedir.all}/phiz-core/src/test/scripts/groovy/phiz-process-test-resources-it.groovy</script>
-
<script>file://${project.basedir.all}/phiz-core/src/test/scripts/groovy/phiz-process-test-rabbitmq-it.groovy</script>
</scripts>
<skip>${skipTests}</skip>
</configuration>