[phiz] 2 new revisions pushed by michal.kotelba@esacinc.com on 2015-03-21 04:36 GMT

17 views
Skip to first unread message

ph...@googlecode.com

unread,
Mar 21, 2015, 12:36:55 AM3/21/15
to phiz-de...@googlegroups.com
2 new revisions:

Revision: e52c96134306
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Fri Mar 20 22:02:29 2015 UTC
Log: - Supports PHIZ-39 and PHIZ-40....
https://code.google.com/p/phiz/source/detail?r=e52c96134306

Revision: 42a26f908bdb
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Sat Mar 21 04:19:42 2015 UTC
Log: - Supports PHIZ-41....
https://code.google.com/p/phiz/source/detail?r=42a26f908bdb

==============================================================================
Revision: e52c96134306
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Fri Mar 20 22:02:29 2015 UTC
Log: - Supports PHIZ-39 and PHIZ-40.
- Implemented handling of expected exceptions for negative SoapUI tests.
- Improved IIS Hub web service client exception handling.
- Implemented no-op http server for integration testing of IIS destination
connection + read timeouts.
https://code.google.com/p/phiz/source/detail?r=e52c96134306

Added:
/phiz-core/src/main/java/gov/hhs/onc/phiz/utils/PhizExceptionUtils.java
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/PhizChannelServer.java
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/PhizHttpServer.java
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/PhizServer.java

/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/impl/AbstractPhizChannelServer.java

/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/impl/AbstractPhizHttpServer.java

/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/impl/AbstractPhizServer.java
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/ws/PhizTimeoutServer.java

/phiz-core/src/test/java/gov/hhs/onc/phiz/test/ws/impl/PhizTimeoutServerImpl.java
/phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-ws-test.xml

/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/PhizSoapUiTestCaseContext.java

/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/PhizSoapUiTestCaseException.java
Deleted:
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/PhizServerBean.java

/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/impl/AbstractPhizServerBean.java
Modified:
/phiz-core/src/main/java/gov/hhs/onc/phiz/utils/PhizFunctionUtils.java

/phiz-core/src/test/java/gov/hhs/onc/phiz/test/crypto/ssl/revocation/PhizOcspServer.java

/phiz-core/src/test/java/gov/hhs/onc/phiz/test/crypto/ssl/revocation/impl/PhizOcspServerImpl.java
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/data/db/PhizHsqlServer.java

/phiz-core/src/test/java/gov/hhs/onc/phiz/test/data/db/impl/PhizHsqlServerImpl.java
/phiz-core/src/test/resources/META-INF/phiz/db/db-init-phiz-data.sql
/phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties

/phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-crypto-ssl-test.xml

/phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-data-db-test.xml
/phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-test.xml

/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/PhizSoapUiProperties.java

/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/impl/AbstractPhizSoapUiIntegrationTests.java

/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/impl/PhizSoapUiTestCaseRunner.java
/phiz-web-ws/src/it/soapui/soapui-phiz-web-ws.xml
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/iis/IisService.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/iis/impl/AbstractIisService.java

/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-server.xml
/phiz-web-ws/src/test/resources/META-INF/phiz/phiz-web-ws-test.properties

=======================================
--- /dev/null
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/utils/PhizExceptionUtils.java
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,13 @@
+package gov.hhs.onc.phiz.utils;
+
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+public final class PhizExceptionUtils {
+ private PhizExceptionUtils() {
+ }
+
+ public static Throwable getRootCause(Throwable throwable) {
+ return
ObjectUtils.defaultIfNull(ExceptionUtils.getRootCause(throwable),
throwable);
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/PhizChannelServer.java
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,11 @@
+package gov.hhs.onc.phiz.test.beans;
+
+import io.netty.channel.ChannelOption;
+import java.util.Map;
+import org.springframework.beans.factory.InitializingBean;
+
+public interface PhizChannelServer extends InitializingBean, PhizServer {
+ public Map<ChannelOption<?>, Object> getChannelOptions();
+
+ public void setChannelOptions(Map<ChannelOption<?>, Object>
channelOpts);
+}
=======================================
--- /dev/null
+++
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/PhizHttpServer.java
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.phiz.test.beans;
+
+import javax.annotation.Nonnegative;
+
+public interface PhizHttpServer extends PhizChannelServer {
+ @Nonnegative
+ public int getMaxContentLength();
+
+ public void setMaxContentLength(@Nonnegative int maxContentLen);
+}
=======================================
--- /dev/null
+++ /phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/PhizServer.java
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,16 @@
+package gov.hhs.onc.phiz.test.beans;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.SmartLifecycle;
+
+public interface PhizServer extends InitializingBean, SmartLifecycle {
+ public String getHost();
+
+ public void setHost(String host);
+
+ public void setPhase(int phase);
+
+ public int getPort();
+
+ public void setPort(int port);
+}
=======================================
--- /dev/null
+++
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/impl/AbstractPhizChannelServer.java
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,90 @@
+package gov.hhs.onc.phiz.test.beans.impl;
+
+import com.github.sebhoss.warnings.CompilerWarnings;
+import gov.hhs.onc.phiz.test.beans.PhizChannelServer;
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.ChannelOption;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import java.util.Map;
+
+public abstract class AbstractPhizChannelServer extends AbstractPhizServer
implements PhizChannelServer {
+ protected Map<ChannelOption<?>, Object> channelOpts;
+ protected String host;
+ protected int port;
+ protected Channel channel;
+
+ @Override
+ public boolean isRunning() {
+ return ((this.channel != null) && this.channel.isActive());
+ }
+
+ @Override
+ protected void stopInternal() throws Exception {
+ this.channel.close();
+ }
+
+ @Override
+ @SuppressWarnings({ CompilerWarnings.UNCHECKED })
+ protected void startInternal() throws Exception {
+ EventLoopGroup acceptorEventLoopGroup = new NioEventLoopGroup(1),
workerEventLoopGroup = new NioEventLoopGroup();
+
+ try {
+ ServerBootstrap serverBootstrap = new ServerBootstrap();
+
+ this.channelOpts.forEach((channelOpt, channelOptValue) ->
serverBootstrap.option(((ChannelOption<Object>) channelOpt),
channelOptValue));
+
+ serverBootstrap.group(acceptorEventLoopGroup,
workerEventLoopGroup).channel(NioServerSocketChannel.class)
+ .childHandler(new ChannelInitializer<SocketChannel>() {
+ @Override
+ protected void initChannel(SocketChannel channel)
throws Exception {
+
AbstractPhizChannelServer.this.initializePipeline(channel.pipeline());
+ }
+ });
+
+ this.channel = serverBootstrap.bind(this.host,
this.port).sync().channel();
+ } catch (Exception e) {
+ acceptorEventLoopGroup.shutdownGracefully();
+ workerEventLoopGroup.shutdownGracefully();
+
+ throw e;
+ }
+ }
+
+ protected abstract void initializePipeline(ChannelPipeline
channelPipeline);
+
+ @Override
+ public Map<ChannelOption<?>, Object> getChannelOptions() {
+ return this.channelOpts;
+ }
+
+ @Override
+ public void setChannelOptions(Map<ChannelOption<?>, Object>
channelOpts) {
+ this.channelOpts = channelOpts;
+ }
+
+ @Override
+ public String getHost() {
+ return this.host;
+ }
+
+ @Override
+ public void setHost(String host) {
+ this.host = host;
+ }
+
+ @Override
+ public int getPort() {
+ return this.port;
+ }
+
+ @Override
+ public void setPort(int port) {
+ this.port = port;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/impl/AbstractPhizHttpServer.java
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,30 @@
+package gov.hhs.onc.phiz.test.beans.impl;
+
+import gov.hhs.onc.phiz.test.beans.PhizHttpServer;
+import io.netty.channel.ChannelPipeline;
+import io.netty.handler.codec.http.HttpObjectAggregator;
+import io.netty.handler.codec.http.HttpRequestDecoder;
+import io.netty.handler.codec.http.HttpResponseEncoder;
+import javax.annotation.Nonnegative;
+
+public abstract class AbstractPhizHttpServer extends
AbstractPhizChannelServer implements PhizHttpServer {
+ protected int maxContentLen;
+
+ @Override
+ protected void initializePipeline(ChannelPipeline channelPipeline) {
+ channelPipeline.addLast(new HttpRequestDecoder());
+ channelPipeline.addLast(new HttpResponseEncoder());
+ channelPipeline.addLast(new
HttpObjectAggregator(this.maxContentLen));
+ }
+
+ @Nonnegative
+ @Override
+ public int getMaxContentLength() {
+ return this.maxContentLen;
+ }
+
+ @Override
+ public void setMaxContentLength(@Nonnegative int maxContentLen) {
+ this.maxContentLen = maxContentLen;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/impl/AbstractPhizServer.java
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,65 @@
+package gov.hhs.onc.phiz.test.beans.impl;
+
+import gov.hhs.onc.phiz.test.beans.PhizServer;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.FatalBeanException;
+
+public abstract class AbstractPhizServer implements PhizServer {
+ protected int phase;
+
+ @Override
+ public void stop(Runnable stopCallback) {
+ this.stop();
+
+ stopCallback.run();
+ }
+
+ @Override
+ public void stop() {
+ if (this.isRunning()) {
+ try {
+ this.stopInternal();
+ } catch (BeansException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new FatalBeanException(String.format("Unable to stop
server (host=%s, port=%d).", this.getHost(), this.getPort()), e);
+ }
+ }
+ }
+
+ @Override
+ public void start() {
+ if (!this.isRunning()) {
+ try {
+ this.startInternal();
+ } catch (BeansException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new FatalBeanException(String.format("Unable to
start server (host=%s, port=%d).", this.getHost(), this.getPort()), e);
+ }
+ }
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ }
+
+ protected abstract void stopInternal() throws Exception;
+
+ protected abstract void startInternal() throws Exception;
+
+ @Override
+ public boolean isAutoStartup() {
+ return true;
+ }
+
+ @Override
+ public int getPhase() {
+ return this.phase;
+ }
+
+ @Override
+ public void setPhase(int phase) {
+ this.phase = phase;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/ws/PhizTimeoutServer.java
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,10 @@
+package gov.hhs.onc.phiz.test.ws;
+
+import gov.hhs.onc.phiz.test.beans.PhizHttpServer;
+import javax.net.ssl.SSLEngine;
+
+public interface PhizTimeoutServer extends PhizHttpServer {
+ public SSLEngine getSslEngine();
+
+ public void setSslEngine(SSLEngine sslEngine);
+}
=======================================
--- /dev/null
+++
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/ws/impl/PhizTimeoutServerImpl.java
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,53 @@
+package gov.hhs.onc.phiz.test.ws.impl;
+
+import gov.hhs.onc.phiz.test.beans.impl.AbstractPhizHttpServer;
+import gov.hhs.onc.phiz.test.ws.PhizTimeoutServer;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelPipeline;
+import io.netty.channel.SimpleChannelInboundHandler;
+import io.netty.handler.codec.http.FullHttpRequest;
+import io.netty.handler.ssl.SslHandler;
+import javax.net.ssl.SSLEngine;
+
+public class PhizTimeoutServerImpl extends AbstractPhizHttpServer
implements PhizTimeoutServer {
+ private class PhizTimeoutServerHandler extends
SimpleChannelInboundHandler<FullHttpRequest> {
+ private final static long SLEEP_INTERVAL = 1000;
+
+ @Override
+ protected void channelRead0(ChannelHandlerContext context,
FullHttpRequest reqMsg) throws Exception {
+ while (PhizTimeoutServerImpl.this.channel.isOpen()) {
+ try {
+ Thread.sleep(SLEEP_INTERVAL);
+ } catch (InterruptedException ignored) {
+ break;
+ }
+ }
+ }
+ }
+
+ private SSLEngine sslEngine;
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ this.sslEngine.setUseClientMode(false);
+ }
+
+ @Override
+ protected void initializePipeline(ChannelPipeline channelPipeline) {
+ channelPipeline.addLast(new SslHandler(this.sslEngine));
+
+ super.initializePipeline(channelPipeline);
+
+ channelPipeline.addLast(new PhizTimeoutServerHandler());
+ }
+
+ @Override
+ public SSLEngine getSslEngine() {
+ return this.sslEngine;
+ }
+
+ @Override
+ public void setSslEngine(SSLEngine sslEngine) {
+ this.sslEngine = sslEngine;
+ }
+}
=======================================
--- /dev/null
+++
/phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-ws-test.xml
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,111 @@
+<?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: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/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">
+
+
<!--====================================================================================================
+ = CREDENTIALS
+
=====================================================================================================-->
+ <beans:bean id="credTimeoutServer" 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.crypto.cred.timeout.server.ssl.subject.cn}"/>
+ </beans:constructor-arg>
+ </beans:bean>
+ </beans:property>
+ </beans:bean>
+ </beans:property>
+ </beans:bean>
+
+
<!--====================================================================================================
+ = KEY STORES
+
=====================================================================================================-->
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean id="keyStoreKeyTimeoutServer" parent="keyStoreGen"
lazy-init="true"
+ p:password="${phiz.crypto.store.key.timeout.server.pass}"
+ p:resource="${phiz.crypto.store.key.timeout.server.file}">
+ <beans:property name="entryMap">
+ <beans:map>
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:entry
key="${phiz.crypto.store.key.timeout.server.entry.ssl.alias}">
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean parent="keyStoreEntryPrivateKey"
+ p:certificateChain="#{
credTimeoutServer.certificate }"
+
p:password="${phiz.crypto.store.key.timeout.server.entry.ssl.pass}"
+ p:privateKey="#{ credTimeoutServer.privateKey }"/>
+ </beans:entry>
+ </beans:map>
+ </beans:property>
+ </beans:bean>
+
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean id="keyStoreTrustTimeoutServer" parent="keyStoreGen"
lazy-init="true"
+ p:password="${phiz.crypto.store.trust.timeout.server.pass}"
+ p:resource="${phiz.crypto.store.trust.timeout.server.file}">
+ <beans:property name="entryMap">
+ <beans:map>
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:entry
key="${phiz.crypto.store.trust.timeout.server.entry.ca.alias}">
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean parent="keyStoreEntryTrustedCert"
+ p:certificate="#{ credCa.certificate }"/>
+ </beans:entry>
+ </beans:map>
+ </beans:property>
+ </beans:bean>
+
+
<!--====================================================================================================
+ = KEY MANAGERS
+
=====================================================================================================-->
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean id="keyManagerTimeoutServer" parent="keyManagerBase"
lazy-init="true"
+ p:keyStore-ref="keyStoreKeyTimeoutServer"
+
p:password="${phiz.crypto.store.key.timeout.server.entry.ssl.pass}"/>
+
+
<!--====================================================================================================
+ = TRUST MANAGERS
+
=====================================================================================================-->
+ <beans:bean id="trustManagerTimeoutServer" parent="trustManagerBase"
lazy-init="true"
+ p:keyStore-ref="keyStoreTrustTimeoutServer"/>
+
+
<!--====================================================================================================
+ = SSL PARAMETERS
+
=====================================================================================================-->
+ <beans:bean id="sslParamsServerTimeoutServer"
parent="sslParamsServer"/>
+
+
<!--====================================================================================================
+ = SSL CONTEXTS
+
=====================================================================================================-->
+ <beans:bean id="sslContextTimeoutServer" parent="sslContextBase"
lazy-init="true"
+ p:keyManagers-ref="keyManagerTimeoutServer"
+ p:parameters-ref="sslParamsServerTimeoutServer"
+ p:trustManagers-ref="trustManagerTimeoutServer"/>
+
+
<!--====================================================================================================
+ = TIMEOUT SERVERS
+
=====================================================================================================-->
+ <beans:bean id="timeoutServer"
class="gov.hhs.onc.phiz.test.ws.PhizTimeoutServer" parent="httpServer"
abstract="true"/>
+
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean id="timeoutServerImpl"
class="gov.hhs.onc.phiz.test.ws.impl.PhizTimeoutServerImpl"
parent="timeoutServer"
+ p:host="${phiz.server.timeout.host.name}"
+ p:port="${phiz.server.timeout.port.https}"
+ p:sslEngine="#{ sslContextTimeoutServer.createSSLEngine() }"/>
+</beans:beans>
=======================================
--- /dev/null
+++
/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/PhizSoapUiTestCaseContext.java
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,18 @@
+package gov.hhs.onc.phiz.web.test.soapui;
+
+import com.eviware.soapui.impl.wsdl.WsdlTestCasePro;
+import com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext;
+import javax.annotation.Nullable;
+
+public interface PhizSoapUiTestCaseContext {
+ public boolean isTestCaseExceptionExpected();
+
+ public WsdlTestCasePro getTestCase();
+
+ @Nullable
+ public Class<?>[] getTestCaseExceptionClasses();
+
+ public WsdlTestRunContext getTestCaseRunContext();
+
+ public void setTestCaseRunContext(WsdlTestRunContext
testCaseRunContext);
+}
=======================================
--- /dev/null
+++
/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/PhizSoapUiTestCaseException.java
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,23 @@
+package gov.hhs.onc.phiz.web.test.soapui;
+
+import javax.annotation.Nullable;
+
+public class PhizSoapUiTestCaseException extends RuntimeException {
+ private final static long serialVersionUID = 0L;
+
+ public PhizSoapUiTestCaseException() {
+ super();
+ }
+
+ public PhizSoapUiTestCaseException(@Nullable String msg) {
+ super(msg);
+ }
+
+ public PhizSoapUiTestCaseException(@Nullable Throwable cause) {
+ super(cause);
+ }
+
+ public PhizSoapUiTestCaseException(@Nullable String msg, @Nullable
Throwable cause) {
+ super(msg, cause);
+ }
+}
=======================================
---
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/PhizServerBean.java
Sat Mar 7 13:04:18 2015 UTC
+++ /dev/null
@@ -1,15 +0,0 @@
-package gov.hhs.onc.phiz.test.beans;
-
-import org.springframework.context.SmartLifecycle;
-
-public interface PhizServerBean extends SmartLifecycle {
- public String getHost();
-
- public void setHost(String host);
-
- public void setPhase(int phase);
-
- public int getPort();
-
- public void setPort(int port);
-}
=======================================
---
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/beans/impl/AbstractPhizServerBean.java
Sat Mar 7 13:04:18 2015 UTC
+++ /dev/null
@@ -1,61 +0,0 @@
-package gov.hhs.onc.phiz.test.beans.impl;
-
-import gov.hhs.onc.phiz.test.beans.PhizServerBean;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.FatalBeanException;
-
-public abstract class AbstractPhizServerBean implements PhizServerBean {
- protected int phase;
-
- @Override
- public void stop(Runnable stopCallback) {
- this.stop();
-
- stopCallback.run();
- }
-
- @Override
- public void stop() {
- if (this.isRunning()) {
- try {
- this.stopInternal();
- } catch (BeansException e) {
- throw e;
- } catch (Exception e) {
- throw new FatalBeanException(String.format("Unable to stop
server (host=%s, port=%d).", this.getHost(), this.getPort()), e);
- }
- }
- }
-
- @Override
- public void start() {
- if (!this.isRunning()) {
- try {
- this.startInternal();
- } catch (BeansException e) {
- throw e;
- } catch (Exception e) {
- throw new FatalBeanException(String.format("Unable to
start server (host=%s, port=%d).", this.getHost(), this.getPort()), e);
- }
- }
- }
-
- protected abstract void stopInternal() throws Exception;
-
- protected abstract void startInternal() throws Exception;
-
- @Override
- public boolean isAutoStartup() {
- return true;
- }
-
- @Override
- public int getPhase() {
- return this.phase;
- }
-
- @Override
- public void setPhase(int phase) {
- this.phase = phase;
- }
-}
=======================================
--- /phiz-core/src/main/java/gov/hhs/onc/phiz/utils/PhizFunctionUtils.java
Sat Mar 7 13:04:18 2015 UTC
+++ /phiz-core/src/main/java/gov/hhs/onc/phiz/utils/PhizFunctionUtils.java
Fri Mar 20 22:02:29 2015 UTC
@@ -1,8 +1,11 @@
package gov.hhs.onc.phiz.utils;

+import java.util.Objects;
import java.util.function.Function;
import java.util.function.IntFunction;
+import java.util.function.Predicate;
import java.util.stream.Stream;
+import org.apache.commons.lang3.ClassUtils;

public final class PhizFunctionUtils {
private PhizFunctionUtils() {
@@ -23,4 +26,12 @@
public static <T, U> U[] mapToArray(Stream<T> inStream, Function<T, U>
mapper, IntFunction<U[]> outArrGen) {
return inStream.map(mapper).toArray(outArrGen);
}
+
+ public static <T, U> Stream<U> mapAssignable(Stream<T> inStream,
Class<U> clazz) {
+ return filterAssignable(inStream, clazz).map(clazz::cast);
+ }
+
+ public static <T, U> Stream<T> filterAssignable(Stream<T> inStream,
Class<U> clazz) {
+ return inStream.filter(((Predicate<T>) Objects::nonNull).and(obj
-> ClassUtils.isAssignable(obj.getClass(), clazz)));
+ }
}
=======================================
---
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/crypto/ssl/revocation/PhizOcspServer.java
Sat Mar 7 13:04:18 2015 UTC
+++
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/crypto/ssl/revocation/PhizOcspServer.java
Fri Mar 20 22:02:29 2015 UTC
@@ -1,23 +1,10 @@
package gov.hhs.onc.phiz.test.crypto.ssl.revocation;

-import gov.hhs.onc.phiz.test.beans.PhizServerBean;
-import io.netty.channel.ChannelOption;
+import gov.hhs.onc.phiz.test.beans.PhizHttpServer;
import java.security.SecureRandom;
-import java.util.Map;
-import javax.annotation.Nonnegative;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
-import org.springframework.beans.factory.InitializingBean;

-public interface PhizOcspServer extends InitializingBean, PhizServerBean {
- public Map<ChannelOption<?>, Object> getChannelOptions();
-
- public void setChannelOptions(Map<ChannelOption<?>, Object>
channelOpts);
-
- @Nonnegative
- public int getMaxContentLength();
-
- public void setMaxContentLength(@Nonnegative int maxContentLen);
-
+public interface PhizOcspServer extends PhizHttpServer {
public SecureRandom getSecureRandom();

public void setSecureRandom(SecureRandom secureRandom);
=======================================
---
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/crypto/ssl/revocation/impl/PhizOcspServerImpl.java
Wed Mar 18 02:04:22 2015 UTC
+++
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/crypto/ssl/revocation/impl/PhizOcspServerImpl.java
Fri Mar 20 22:02:29 2015 UTC
@@ -1,39 +1,27 @@
package gov.hhs.onc.phiz.test.crypto.ssl.revocation.impl;

-import com.github.sebhoss.warnings.CompilerWarnings;
import gov.hhs.onc.phiz.crypto.PhizCredential;
+import gov.hhs.onc.phiz.crypto.ssl.revocation.OcspCertificateStatusType;
import gov.hhs.onc.phiz.crypto.ssl.revocation.OcspContentTypes;
-import gov.hhs.onc.phiz.crypto.ssl.revocation.OcspCertificateStatusType;
import gov.hhs.onc.phiz.crypto.ssl.revocation.OcspResponseStatusType;
import gov.hhs.onc.phiz.crypto.ssl.revocation.impl.PhizCertificateId;
import gov.hhs.onc.phiz.crypto.utils.PhizCryptoUtils;
import gov.hhs.onc.phiz.logging.logstash.PhizLogstashTags;
import gov.hhs.onc.phiz.logging.logstash.impl.PhizLogstashMarkers;
-import gov.hhs.onc.phiz.test.beans.impl.AbstractPhizServerBean;
+import gov.hhs.onc.phiz.test.beans.impl.AbstractPhizHttpServer;
import gov.hhs.onc.phiz.test.crypto.ssl.revocation.PhizOcspServer;
-import io.netty.bootstrap.ServerBootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
-import io.netty.channel.Channel;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelInitializer;
-import io.netty.channel.ChannelOption;
import io.netty.channel.ChannelPipeline;
-import io.netty.channel.EventLoopGroup;
import io.netty.channel.SimpleChannelInboundHandler;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.http.DefaultFullHttpResponse;
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.FullHttpResponse;
import io.netty.handler.codec.http.HttpHeaders;
import io.netty.handler.codec.http.HttpHeaders.Names;
import io.netty.handler.codec.http.HttpMethod;
-import io.netty.handler.codec.http.HttpObjectAggregator;
-import io.netty.handler.codec.http.HttpRequestDecoder;
-import io.netty.handler.codec.http.HttpResponseEncoder;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.handler.codec.http.HttpVersion;
import java.io.IOException;
@@ -46,7 +34,6 @@
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
-import javax.annotation.Nonnegative;
import javax.annotation.Nullable;
import org.apache.commons.lang3.ArrayUtils;
import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers;
@@ -73,7 +60,7 @@
import org.springframework.context.annotation.Lazy;
import org.springframework.util.MimeType;

-public class PhizOcspServerImpl extends AbstractPhizServerBean implements
PhizOcspServer {
+public class PhizOcspServerImpl extends AbstractPhizHttpServer implements
PhizOcspServer {
private class PhizOcspCredentialWrapper {
private PhizOcspCredentialWrapper issuerCredWrapper;
private PhizCredential cred;
@@ -284,10 +271,6 @@
@SuppressWarnings({ "SpringJavaAutowiringInspection" })
private List<PhizCredential> creds;

- private Map<ChannelOption<?>, Object> channelOpts;
- private String host;
- private int maxContentLen;
- private int port;
private SecureRandom secureRandom;
private AlgorithmIdentifier sigAlgId;
private AlgorithmIdentifier digestAlgId;
@@ -296,12 +279,6 @@
private boolean credsInitialized;
private Map<X509Certificate, PhizOcspCredentialWrapper>
issuerCredWrappers;
private Map<PhizCertificateId, PhizOcspCredentialWrapper> credWrappers;
- private Channel channel;
-
- @Override
- public boolean isRunning() {
- return ((this.channel != null) && this.channel.isActive());
- }

@Override
public void afterPropertiesSet() throws Exception {
@@ -312,80 +289,10 @@
}

@Override
- protected void stopInternal() throws Exception {
- this.channel.close();
- }
+ protected void initializePipeline(ChannelPipeline channelPipeline) {
+ super.initializePipeline(channelPipeline);

- @Override
- @SuppressWarnings({ CompilerWarnings.UNCHECKED })
- protected void startInternal() throws Exception {
- EventLoopGroup acceptorEventLoopGroup = new NioEventLoopGroup(1),
workerEventLoopGroup = new NioEventLoopGroup();
-
- try {
- ServerBootstrap serverBootstrap = new ServerBootstrap();
-
- this.channelOpts.forEach((channelOpt, channelOptValue) ->
serverBootstrap.option(((ChannelOption<Object>) channelOpt),
channelOptValue));
-
- serverBootstrap.group(acceptorEventLoopGroup,
workerEventLoopGroup).channel(NioServerSocketChannel.class)
- .childHandler(new ChannelInitializer<SocketChannel>() {
- @Override
- protected void initChannel(SocketChannel channel)
throws Exception {
- ChannelPipeline channelPipeline =
channel.pipeline();
- channelPipeline.addLast(new HttpRequestDecoder());
- channelPipeline.addLast(new HttpResponseEncoder());
- channelPipeline.addLast(new
HttpObjectAggregator(PhizOcspServerImpl.this.maxContentLen));
- channelPipeline.addLast(new
PhizOcspServerHandler());
- }
- });
-
- this.channel = serverBootstrap.bind(this.host,
this.port).sync().channel();
- } catch (Exception e) {
- acceptorEventLoopGroup.shutdownGracefully();
- workerEventLoopGroup.shutdownGracefully();
-
- throw e;
- }
- }
-
- @Override
- public Map<ChannelOption<?>, Object> getChannelOptions() {
- return this.channelOpts;
- }
-
- @Override
- public void setChannelOptions(Map<ChannelOption<?>, Object>
channelOpts) {
- this.channelOpts = channelOpts;
- }
-
- @Override
- public String getHost() {
- return this.host;
- }
-
- @Override
- public void setHost(String host) {
- this.host = host;
- }
-
- @Nonnegative
- @Override
- public int getMaxContentLength() {
- return this.maxContentLen;
- }
-
- @Override
- public void setMaxContentLength(@Nonnegative int maxContentLen) {
- this.maxContentLen = maxContentLen;
- }
-
- @Override
- public int getPort() {
- return this.port;
- }
-
- @Override
- public void setPort(int port) {
- this.port = port;
+ channelPipeline.addLast(new PhizOcspServerHandler());
}

@Override
=======================================
---
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/data/db/PhizHsqlServer.java
Sat Mar 7 13:04:18 2015 UTC
+++
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/data/db/PhizHsqlServer.java
Fri Mar 20 22:02:29 2015 UTC
@@ -1,10 +1,9 @@
package gov.hhs.onc.phiz.test.data.db;

-import gov.hhs.onc.phiz.test.beans.PhizServerBean;
+import gov.hhs.onc.phiz.test.beans.PhizServer;
import java.io.File;
-import org.springframework.beans.factory.InitializingBean;

-public interface PhizHsqlServer extends InitializingBean, PhizServerBean {
+public interface PhizHsqlServer extends PhizServer {
public String getDatabaseName();

public void setDatabaseName(String dbName);
=======================================
---
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/data/db/impl/PhizHsqlServerImpl.java
Sat Mar 7 13:04:18 2015 UTC
+++
/phiz-core/src/test/java/gov/hhs/onc/phiz/test/data/db/impl/PhizHsqlServerImpl.java
Fri Mar 20 22:02:29 2015 UTC
@@ -1,6 +1,6 @@
package gov.hhs.onc.phiz.test.data.db.impl;

-import gov.hhs.onc.phiz.test.beans.impl.AbstractPhizServerBean;
+import gov.hhs.onc.phiz.test.beans.impl.AbstractPhizServer;
import gov.hhs.onc.phiz.test.data.db.PhizHsqlServer;
import java.io.File;
import org.hsqldb.server.Server;
@@ -10,7 +10,7 @@
import org.springframework.beans.FatalBeanException;
import org.springframework.util.ResourceUtils;

-public class PhizHsqlServerImpl extends AbstractPhizServerBean implements
PhizHsqlServer {
+public class PhizHsqlServerImpl extends AbstractPhizServer implements
PhizHsqlServer {
private static class PhizHsqlServerWrapper extends Server {
{
this.setDaemon(true);
=======================================
--- /phiz-core/src/test/resources/META-INF/phiz/db/db-init-phiz-data.sql
Tue Jan 20 22:42:18 2015 UTC
+++ /phiz-core/src/test/resources/META-INF/phiz/db/db-init-phiz-data.sql
Fri Mar 20 22:02:29 2015 UTC
@@ -8,3 +8,19 @@
'${phiz.dest.iis.dev.id}',
'${phiz.dest.iis.dev.uri}'
);
+
+insert into destinations (
+ dest_id,
+ dest_uri
+) values (
+ '${phiz.dest.iis.test.timeout.id}',
+ '${phiz.dest.iis.test.timeout.uri}'
+);
+
+insert into destinations (
+ dest_id,
+ dest_uri
+) values (
+ '${phiz.dest.iis.test.unknown.host.id}',
+ '${phiz.dest.iis.test.unknown.host.uri}'
+);
=======================================
--- /phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties Sat
Mar 7 13:04:18 2015 UTC
+++ /phiz-core/src/test/resources/META-INF/phiz/phiz-test.properties Fri
Mar 20 22:02:29 2015 UTC
@@ -3,15 +3,15 @@

#================================================================================

phiz.crypto.cred.ca.untrusted.subject.cn=${phiz.crypto.cred.ca.subject.cn}_untrusted

+#================================================================================
+# CRYPTOGRAPHY CREDENTIALS: TIMEOUT SERVER
+#================================================================================
+phiz.crypto.cred.timeout.server.ssl.subject.cn=phiz_timeout_server
+

#================================================================================
# CRYPTOGRAPHY OCSP

#================================================================================
-phiz.crypto.ocsp.content.len.max=1048576
-phiz.crypto.ocsp.host=localhost
-phiz.crypto.ocsp.port=10888
-phiz.crypto.ocsp.scheme=#{ T(gov.hhs.onc.phiz.net.PhizSchemes).HTTP }
-phiz.crypto.ocsp.socket.backlog=1024
-phiz.crypto.ocsp.url=${phiz.crypto.ocsp.scheme}://${phiz.crypto.ocsp.host}:${phiz.crypto.ocsp.port}
+phiz.crypto.ocsp.url=${phiz.server.ocsp.scheme}://${phiz.server.ocsp.host.name}:${phiz.server.ocsp.port.http}


#================================================================================
# CRYPTOGRAPHY KEY STORES: CERTIFICATE AUTHORITY
@@ -19,11 +19,34 @@
phiz.crypto.store.key.ca.file=${phiz.conf.ssl.dir}/phiz_store_key_ca.jks
phiz.crypto.store.key.ca.pass=storepass

+#================================================================================
+# CRYPTOGRAPHY KEY STORES: TIMEOUT SERVER
+#================================================================================
+phiz.crypto.store.key.timeout.server.file=${phiz.conf.ssl.dir}/phiz_store_key_timeout_server.jks
+phiz.crypto.store.key.timeout.server.pass=storepass
+

#================================================================================
# CRYPTOGRAPHY KEY STORE ENTRIES: CERTIFICATE AUTHORITY

#================================================================================
phiz.crypto.store.key.ca.entry.ca.alias=${phiz.crypto.cred.ca.subject.cn}
phiz.crypto.store.key.ca.entry.ca.pass=${phiz.crypto.store.key.ca.pass}
+
+#================================================================================
+# CRYPTOGRAPHY KEY STORE ENTRIES: TIMEOUT SERVER
+#================================================================================
+phiz.crypto.store.key.timeout.server.entry.ssl.alias=${phiz.crypto.cred.timeout.server.ssl.subject.cn}
+phiz.crypto.store.key.timeout.server.entry.ssl.pass=${phiz.crypto.store.key.timeout.server.pass}
+
+#================================================================================
+# CRYPTOGRAPHY TRUST STORES: TIMEOUT SERVER
+#================================================================================
+phiz.crypto.store.trust.timeout.server.file=${phiz.conf.ssl.dir}/phiz_store_trust_timeout_server.jks
+phiz.crypto.store.trust.timeout.server.pass=storepass
+
+#================================================================================
+# CRYPTOGRAPHY TRUST STORE ENTRIES: TIMEOUT SERVER
+#================================================================================
+phiz.crypto.store.trust.timeout.server.entry.ca.alias=${phiz.crypto.cred.ca.subject.cn}


#================================================================================
# DATA DATABASE
@@ -49,12 +72,54 @@
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}
+
+#================================================================================
+# DESTINATION: TEST TIMEOUT IIS
+#================================================================================
+phiz.dest.iis.test.timeout.id=test-timeout
+phiz.dest.iis.test.timeout.uri=${phiz.server.timeout.context.url}/#{
T(gov.hhs.onc.phiz.ws.PhizWsNames).SERVICE }
+
+#================================================================================
+# DESTINATION: TEST UNKNOWN HOST IIS
+#================================================================================
+phiz.dest.iis.test.unknown.host.id=test-unknown-host
+phiz.dest.iis.test.unknown.host.uri=#{
T(gov.hhs.onc.phiz.net.PhizSchemes).HTTPS
}://${phiz.dest.iis.test.unknown.host.id}.localhost/#{
T(gov.hhs.onc.phiz.ws.PhizWsNames).SERVICE }


#================================================================================
# LOGGING: METRICS

#================================================================================
phiz.logging.metrics.metric.cached.thread.states.interval=1
phiz.logging.metrics.reporter.logstash.interval=1
+
+#================================================================================
+# CHANNEL SERVER
+#================================================================================
+phiz.server.channel.socket.backlog=1024
+
+#================================================================================
+# HTTP SERVER
+#================================================================================
+phiz.server.http.content.len.max=1048576
+
+#================================================================================
+# OCSP SERVER
+#================================================================================
+phiz.server.ocsp.host.name=localhost
+phiz.server.ocsp.port.http=10888
+phiz.server.ocsp.scheme=#{ T(gov.hhs.onc.phiz.net.PhizSchemes).HTTP }
+
+#================================================================================
+# TIMEOUT SERVER
+#================================================================================
+phiz.server.timeout.host.name=localhost
+phiz.server.timeout.port.https=11443
+phiz.server.timeout.scheme=#{ T(gov.hhs.onc.phiz.net.PhizSchemes).HTTPS }
+
+#================================================================================
+# TIMEOUT SERVER CONTEXT
+#================================================================================
+phiz.server.timeout.context.path=
+phiz.server.timeout.context.url=${phiz.server.timeout.scheme}://${phiz.server.timeout.host.name}:${phiz.server.timeout.port.https}${phiz.server.timeout.context.path}


#================================================================================
# TEST RESOURCE UTILITIES
=======================================
---
/phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-crypto-ssl-test.xml
Wed Mar 18 02:04:22 2015 UTC
+++
/phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-crypto-ssl-test.xml
Fri Mar 20 22:02:29 2015 UTC
@@ -85,21 +85,12 @@

<!--====================================================================================================
= OCSP SERVERS

=====================================================================================================-->
- <beans:bean id="ocspServer"
class="gov.hhs.onc.phiz.test.crypto.ssl.revocation.PhizOcspServer"
abstract="true"/>
+ <beans:bean id="ocspServer"
class="gov.hhs.onc.phiz.test.crypto.ssl.revocation.PhizOcspServer"
parent="httpServer" abstract="true"/>

<!--suppress SpringPlaceholdersInspection -->
<beans:bean id="ocspServerImpl"
class="gov.hhs.onc.phiz.test.crypto.ssl.revocation.impl.PhizOcspServerImpl"
parent="ocspServer"
- p:host="${phiz.crypto.ocsp.host}"
- p:maxContentLength="${phiz.crypto.ocsp.content.len.max}"
- p:port="${phiz.crypto.ocsp.port}"
+ p:host="${phiz.server.ocsp.host.name}"
+ p:port="${phiz.server.ocsp.port.http}"
p:secureRandom-ref="secureRandomSha1"
- p:signatureAlgorithmId="#{
T(br.net.woodstock.rockframework.security.sign.SignatureType).SHA512_RSA.algorithm
}">
- <beans:property name="channelOptions">
- <beans:map>
- <!--suppress SpringPlaceholdersInspection -->
- <beans:entry key="#{
T(io.netty.channel.ChannelOption).SO_BACKLOG }"
value="${phiz.crypto.ocsp.socket.backlog}" value-type="java.lang.Integer"/>
- <beans:entry key="#{
T(io.netty.channel.ChannelOption).SO_REUSEADDR }" value="true"
value-type="java.lang.Boolean"/>
- </beans:map>
- </beans:property>
- </beans:bean>
+ p:signatureAlgorithmId="#{
T(br.net.woodstock.rockframework.security.sign.SignatureType).SHA512_RSA.algorithm
}"/>
</beans:beans>
=======================================
---
/phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-data-db-test.xml
Sat Mar 7 13:04:18 2015 UTC
+++
/phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-data-db-test.xml
Fri Mar 20 22:02:29 2015 UTC
@@ -18,7 +18,7 @@

<!--====================================================================================================
= HYPERSQL SERVERS

=====================================================================================================-->
- <beans:bean id="hsqlServer"
class="gov.hhs.onc.phiz.test.data.db.PhizHsqlServer" abstract="true"/>
+ <beans:bean id="hsqlServer"
class="gov.hhs.onc.phiz.test.data.db.PhizHsqlServer" parent="server"
abstract="true"/>

<!--suppress SpringPlaceholdersInspection -->
<beans:bean id="hsqlServerImpl"
class="gov.hhs.onc.phiz.test.data.db.impl.PhizHsqlServerImpl"
parent="hsqlServer" destroy-method="stop" init-method="start"
=======================================
--- /phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-test.xml
Wed Feb 18 20:44:48 2015 UTC
+++ /phiz-core/src/test/resources/META-INF/phiz/spring/spring-phiz-test.xml
Fri Mar 20 22:02:29 2015 UTC
@@ -15,4 +15,29 @@
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">

+
<!--====================================================================================================
+ = SERVERS
+
=====================================================================================================-->
+ <beans:bean id="server" class="gov.hhs.onc.phiz.test.beans.PhizServer"
abstract="true"/>
+
+
<!--====================================================================================================
+ = CHANNEL SERVERS
+
=====================================================================================================-->
+ <beans:bean id="channelServer"
class="gov.hhs.onc.phiz.test.beans.PhizChannelServer" parent="server"
abstract="true">
+ <beans:property name="channelOptions">
+ <beans:map>
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:entry key="#{
T(io.netty.channel.ChannelOption).SO_BACKLOG }"
value="${phiz.server.channel.socket.backlog}"
+ value-type="java.lang.Integer"/>
+ <beans:entry key="#{
T(io.netty.channel.ChannelOption).SO_REUSEADDR }" value="true"
value-type="java.lang.Boolean"/>
+ </beans:map>
+ </beans:property>
+ </beans:bean>
+
+
<!--====================================================================================================
+ = HTTP SERVERS
+
=====================================================================================================-->
+ <!--suppress SpringPlaceholdersInspection -->
+ <beans:bean id="httpServer"
class="gov.hhs.onc.phiz.test.beans.PhizHttpServer" parent="channelServer"
abstract="true"
+ p:maxContentLength="${phiz.server.http.content.len.max}"/>
</beans:beans>
=======================================
---
/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/PhizSoapUiProperties.java
Wed Mar 18 12:21:24 2015 UTC
+++
/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/PhizSoapUiProperties.java
Fri Mar 20 22:02:29 2015 UTC
@@ -4,8 +4,11 @@

public final class PhizSoapUiProperties {
public final static String PREFIX = PhizProperties.PREFIX
+ "test.soapui.";
+ public final static String EXCEPTION_PREFIX = PREFIX + "exception.";
public final static String SSL_PREFIX = PREFIX + "ssl.";

+ public final static String EXCEPTION_CLASSES_NAME = EXCEPTION_PREFIX
+ "classes";
+
public final static String SSL_PARAMS_NAME = SSL_PREFIX + "params";
public final static String BAD_CIPHER_SUITES_SSL_PARAMS_VALUE
= "bad.cipher.suites";
public final static String BAD_PROTOCOL_VERSIONS_SSL_PARAMS_VALUE
= "bad.protocol.versions";
=======================================
---
/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/impl/AbstractPhizSoapUiIntegrationTests.java
Sat Feb 21 20:45:44 2015 UTC
+++
/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/impl/AbstractPhizSoapUiIntegrationTests.java
Fri Mar 20 22:02:29 2015 UTC
@@ -2,8 +2,13 @@

import com.eviware.soapui.impl.wsdl.WsdlProjectPro;
import com.eviware.soapui.impl.wsdl.WsdlTestCasePro;
+import com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext;
+import gov.hhs.onc.phiz.utils.PhizStringUtils;
+import gov.hhs.onc.phiz.web.test.impl.AbstractPhizWebIntegrationTests;
+import gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties;
+import gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiTestCaseContext;
+import gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiTestCaseException;
import
gov.hhs.onc.phiz.web.test.soapui.impl.AbstractPhizSoapUiIntegrationTests.PhizSoapUiTestCaseMethodInterceptor;
-import gov.hhs.onc.phiz.web.test.impl.AbstractPhizWebIntegrationTests;
import java.lang.reflect.Method;
import java.util.Comparator;
import java.util.List;
@@ -13,20 +18,24 @@
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import javax.annotation.Nullable;
import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.ClassUtils;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.test.context.TestContext;
import org.springframework.test.context.TestContextManager;
import org.testng.IMethodInstance;
import org.testng.IMethodInterceptor;
import org.testng.ITestContext;
+import org.testng.SkipException;
import org.testng.annotations.Factory;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

@Listeners({ PhizSoapUiTestCaseMethodInterceptor.class })
@Test(groups = { "phiz.test.it.web.soapui.all" })
-public abstract class AbstractPhizSoapUiIntegrationTests extends
AbstractPhizWebIntegrationTests {
+public abstract class AbstractPhizSoapUiIntegrationTests extends
AbstractPhizWebIntegrationTests implements PhizSoapUiTestCaseContext {
public static class PhizSoapUiTestCaseMethodInterceptor implements
IMethodInterceptor {
@Override
public List<IMethodInstance> intercept(List<IMethodInstance>
methodInstances, ITestContext testContext) {
@@ -97,14 +106,30 @@
projectRunThread.start();

T[] testCaseTestsInstances =
this.testCaseTestsArrayBuilder.apply(testCases.size());
+ WsdlTestCasePro testCase;
+ String[] testCaseExceptionClassNames;

for (int a = 0; a < testCaseTestsInstances.length; a++) {
testCaseTestsInstances[a] =
this.testCaseTestsClassBuilder.get();
testCaseTestsInstances[a].testCaseRunner = testCaseRunner;
testCaseTestsInstances[a].projectRunTask = projectRunTask;
testCaseTestsInstances[a].projectRunLatch =
projectRunLatch;
- testCaseTestsInstances[a].testCase = testCases.get(a);
+ testCaseTestsInstances[a].testCase = (testCase =
testCases.get(a));
testCaseTestsInstances[a].testCaseOrder = a;
+
+ if (!ArrayUtils.isEmpty((testCaseExceptionClassNames =
+
PhizStringUtils.tokenize(testCase.getPropertyValue(PhizSoapUiProperties.EXCEPTION_CLASSES_NAME)))))
{
+ testCaseTestsInstances[a].testCaseExceptionClasses =
new Class<?>[testCaseExceptionClassNames.length];
+
+ for (int b = 0; b <
testCaseExceptionClassNames.length; b++) {
+ try {
+
testCaseTestsInstances[a].testCaseExceptionClasses[b] =
ClassUtils.getClass(testCaseExceptionClassNames[b]);
+ } catch (ClassNotFoundException e) {
+ throw new
PhizSoapUiTestCaseException(String.format("Unable to find SoapUI test case
(name=%s) exception class (name=%s).",
+ testCase.getName(),
testCaseExceptionClassNames[b]), e);
+ }
+ }
+ }
}

return testCaseTestsInstances;
@@ -115,11 +140,24 @@
protected FutureTask<Void> projectRunTask;
protected CountDownLatch projectRunLatch;
protected WsdlTestCasePro testCase;
+ protected Class<?>[] testCaseExceptionClasses;
+ protected WsdlTestRunContext testCaseRunContext;
protected int testCaseOrder;

public void testTestCase() throws Exception {
+ boolean testCaseExceptionExpected =
this.isTestCaseExceptionExpected();
+
try {
- this.testCaseRunner.runTestCase(this.testCase);
+ this.testCaseRunner.runTestCase(this);
+
+ if (testCaseExceptionExpected) {
+ throw new
PhizSoapUiTestCaseException(String.format("SoapUI test case (name=%s) was
expected to throw an exception (classes=[%s]).",
+ this.testCase.getName(),
StringUtils.join(this.testCaseExceptionClasses, ", ")));
+ }
+ } catch (Exception e) {
+ throw ((testCaseExceptionExpected &&
Stream.of(this.testCaseExceptionClasses).anyMatch(
+ testCaseExceptionClass ->
testCaseExceptionClass.isAssignableFrom(e.getClass()))) ? new
SkipException(String.format(
+ "Skipping SoapUI test case (name=%s) exception.",
this.testCase.getName()), e) : e);
} finally {
this.projectRunLatch.countDown();

@@ -131,4 +169,30 @@
}
}
}
+
+ @Override
+ public boolean isTestCaseExceptionExpected() {
+ return !ArrayUtils.isEmpty(this.testCaseExceptionClasses);
+ }
+
+ @Override
+ public WsdlTestCasePro getTestCase() {
+ return this.testCase;
+ }
+
+ @Nullable
+ @Override
+ public Class<?>[] getTestCaseExceptionClasses() {
+ return this.testCaseExceptionClasses;
+ }
+
+ @Override
+ public WsdlTestRunContext getTestCaseRunContext() {
+ return this.testCaseRunContext;
+ }
+
+ @Override
+ public void setTestCaseRunContext(WsdlTestRunContext
testCaseRunContext) {
+ this.testCaseRunContext = testCaseRunContext;
+ }
}
=======================================
---
/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/impl/PhizSoapUiTestCaseRunner.java
Sat Mar 7 13:04:18 2015 UTC
+++
/phiz-web-core/src/test/java/gov/hhs/onc/phiz/web/test/soapui/impl/PhizSoapUiTestCaseRunner.java
Fri Mar 20 22:02:29 2015 UTC
@@ -1,39 +1,58 @@
package gov.hhs.onc.phiz.web.test.soapui.impl;

import com.eviware.soapui.DefaultSoapUICore;
+import com.eviware.soapui.SoapUI;
import com.eviware.soapui.SoapUICore;
import com.eviware.soapui.SoapUIProTestCaseRunner;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.impl.wsdl.WsdlProjectPro;
import com.eviware.soapui.impl.wsdl.WsdlProjectProFactory;
+import com.eviware.soapui.impl.wsdl.WsdlRequest;
+import com.eviware.soapui.impl.wsdl.WsdlSubmit;
+import com.eviware.soapui.impl.wsdl.WsdlTestCasePro;
import com.eviware.soapui.impl.wsdl.WsdlTestSuite;
import com.eviware.soapui.impl.wsdl.WsdlTestSuitePro;
import com.eviware.soapui.impl.wsdl.submit.RequestTransportRegistry;
import com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport;
-import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase;
+import com.eviware.soapui.impl.wsdl.testcase.WsdlTestRunContext;
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestSuiteRunContext;
import com.eviware.soapui.impl.wsdl.testcase.WsdlTestSuiteRunner;
+import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequest;
+import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestStepResult;
+import com.eviware.soapui.model.iface.Submit;
+import com.eviware.soapui.model.iface.SubmitContext;
+import com.eviware.soapui.model.iface.SubmitListener;
import com.eviware.soapui.model.project.ProjectFactoryRegistry;
import com.eviware.soapui.model.propertyexpansion.PropertyExpander;
import com.eviware.soapui.model.propertyexpansion.PropertyExpansion;
import com.eviware.soapui.model.testsuite.LoadTest;
+import com.eviware.soapui.model.testsuite.TestCaseRunContext;
+import com.eviware.soapui.model.testsuite.TestCaseRunner;
+import com.eviware.soapui.model.testsuite.TestStepResult;
+import com.eviware.soapui.model.testsuite.TestStepResult.TestStepStatus;
+import com.eviware.soapui.model.testsuite.TestSuite;
import com.eviware.soapui.support.types.StringToObjectMap;
import com.github.sebhoss.warnings.CompilerWarnings;
import gov.hhs.onc.phiz.beans.factory.EmbeddedPlaceholderResolver;
import gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties;
+import gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiTestCaseContext;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLSocketFactory;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.springframework.beans.factory.annotation.Autowired;

@SuppressWarnings({ CompilerWarnings.DEPRECATION })
-public class PhizSoapUiTestCaseRunner extends SoapUIProTestCaseRunner {
+public class PhizSoapUiTestCaseRunner extends SoapUIProTestCaseRunner
implements SubmitListener {
private final static String SPRING_REF_PROP_NAME_PREFIX =
PropertyExpansion.SCOPE_PREFIX + "Spring" +
PropertyExpansion.PROPERTY_SEPARATOR;

@Autowired
@@ -46,10 +65,66 @@
private WsdlTestSuite testSuite;
private CountDownLatch testSuiteRunLatch;
private FutureTask<Void> testSuiteRunTask;
+ private Map<String, PhizSoapUiTestCaseContext> testCaseContextMap;
+ private Map<String, WsdlSubmit<WsdlRequest>> testCaseSubmitMap;
+ private Map<String, Exception> testCaseExceptionMap;

public PhizSoapUiTestCaseRunner() {
super();
}
+
+ @Override
+ public void afterRun(TestCaseRunner testCaseRunner, TestCaseRunContext
testCaseRunContext) {
+
+ super.afterRun(testCaseRunner, testCaseRunContext);
+ }
+
+ @Override
+ public void afterStep(TestCaseRunner testCaseRunner,
TestCaseRunContext testCaseRunContext, TestStepResult testStepResult) {
+ String testCaseName;
+ PhizSoapUiTestCaseContext testCaseContext;
+
+ if ((testStepResult.getStatus() == TestStepStatus.FAILED)
+ && (testCaseContext =
this.testCaseContextMap.get((testCaseName =
testCaseRunContext.getTestCase().getName()))).isTestCaseExceptionExpected())
{
+ Exception testStepException = ((Exception)
testStepResult.getError());
+
+ if (testStepException == null) {
+ testStepException =
this.testCaseSubmitMap.get(testCaseName).getError();
+ }
+
+ if (testStepException != null) {
+ final Class<? extends Exception> testStepExceptionClass =
testStepException.getClass();
+
+ // noinspection ConstantConditions
+ if
(Stream.of(testCaseContext.getTestCaseExceptionClasses()).anyMatch(
+ testCaseExceptionClass ->
testCaseExceptionClass.isAssignableFrom(testStepExceptionClass))) {
+ ((WsdlTestStepResult)
testStepResult).setStatus(TestStepStatus.OK);
+
+ this.testCaseExceptionMap.put(testCaseName,
testStepException);
+ }
+ }
+ }
+
+ super.afterStep(testCaseRunner, testCaseRunContext,
testStepResult);
+ }
+
+ @Override
+ @SuppressWarnings({ CompilerWarnings.UNCHECKED })
+ public void afterSubmit(Submit submit, SubmitContext submitContext) {
+ this.testCaseSubmitMap.put(((WsdlTestRequest)
submit.getRequest()).getTestCase().getName(), ((WsdlSubmit<WsdlRequest>)
submit));
+ }
+
+ @Override
+ public boolean beforeSubmit(Submit submit, SubmitContext
submitContext) {
+ return true;
+ }
+
+ @Override
+ public void beforeRun(TestCaseRunner testCaseRunner,
TestCaseRunContext testCaseRunContext) {
+
this.testCaseContextMap.get(testCaseRunContext.getTestCase().getName()).setTestCaseRunContext(((WsdlTestRunContext)
testCaseRunContext));
+
+ super.beforeRun(testCaseRunner, testCaseRunContext);
+ }

public boolean run(WsdlProjectPro project) throws Exception {

ProjectFactoryRegistry.registrerProjectFactory(WsdlProjectProFactory.WSDL_TYPE,
new WsdlProjectProFactory() {
@@ -64,11 +139,11 @@
return this.run();
}

- @Override
- public void runTestCase(WsdlTestCase testCase) {
- WsdlTestSuite testCaseTestSuite = testCase.getTestSuite();
+ public void runTestCase(PhizSoapUiTestCaseContext testCaseContext)
throws Exception {
+ WsdlTestCasePro testCase = testCaseContext.getTestCase();
+ WsdlTestSuite testSuite = testCase.getTestSuite();

- if ((this.testSuite == null) |
| !testCaseTestSuite.getName().equals(this.testSuite.getName())) {
+ if ((this.testSuite == null) |
| !testSuite.getName().equals(this.testSuite.getName())) {
if (this.testSuite != null) {
this.testSuiteRunLatch.countDown();

@@ -78,7 +153,7 @@
}
}

- this.testSuite = testCaseTestSuite;
+ this.testSuite = testSuite;
this.testSuiteRunLatch = new CountDownLatch(1);

this.testSuiteRunTask = new FutureTask<>(() -> {
@@ -115,23 +190,41 @@
if (testCase.getLoadTestCount() > 0) {
testCase.getLoadTestList().stream().forEach(LoadTest::run);
} else {
- super.runTestCase(testCase);
+ String testCaseName = testCase.getName();
+
+ this.testCaseContextMap.put(testCaseName, testCaseContext);
+
+ this.runTestCase(testCase);
+
+ if (this.testCaseExceptionMap.containsKey(testCaseName)) {
+ throw this.testCaseExceptionMap.get(testCaseName);
+ }
}

this.initializeSslScheme(this.sslParamMap.get(null),
this.sslSocketFactoryMap.get(null));
}

@Override
- public void initProject(WsdlProject wsdlProject) {
+ public void initProject(WsdlProject project) {
if (this.projectInitialized) {
return;
}
+
+
SoapUI.getListenerRegistry().addSingletonListener(SubmitListener.class,
this);

HttpClientSupport.getHttpClient().setHttpRequestRetryHandler(new
DefaultHttpRequestRetryHandler(0, false));

this.initializeSslScheme(this.sslParamMap.get(null),
this.sslSocketFactoryMap.get(null));

- super.initProject(wsdlProject);
+ // noinspection ConstantConditions
+ int numTestCases =
+
IntStream.of(ArrayUtils.toPrimitive(project.getTestSuiteList().stream().map(TestSuite::getTestCaseCount).toArray(Integer[]::new))).sum();
+
+ this.testCaseContextMap = new ConcurrentHashMap<>(numTestCases);
+ this.testCaseSubmitMap = new ConcurrentHashMap<>(numTestCases);
+ this.testCaseExceptionMap = new ConcurrentHashMap<>(numTestCases);
+
+ super.initProject(project);
}

@Override
=======================================
--- /phiz-web-ws/src/it/soapui/soapui-phiz-web-ws.xml Wed Mar 18 12:21:24
2015 UTC
+++ /phiz-web-ws/src/it/soapui/soapui-phiz-web-ws.xml Fri Mar 20 22:02:29
2015 UTC
@@ -229,7 +229,7 @@
</con:testStep>
<con:properties/>
</con:testCase>
- <con:testCase failOnError="false" failTestCaseOnErrors="false"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Params_Bad_Protocol_Versions"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
+ <con:testCase failOnError="true" failTestCaseOnErrors="true"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Params_Bad_Protocol_Versions"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
<con:description>SubmitSingleMessage bad protocol versions SSL
parameters test case.</con:description>
<con:settings/>
<con:testStep type="request" name="SubmitSingleMessage">
@@ -266,12 +266,16 @@
</con:testStep>
<con:properties>
<con:property>
+ <con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).EXCEPTION_CLASSES_NAME
}</con:name>
+ <con:value>#{ T(javax.net.ssl.SSLHandshakeException).name
}</con:value>
+ </con:property>
+ <con:property>
<con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).SSL_PARAMS_NAME
}</con:name>
<con:value>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).BAD_PROTOCOL_VERSIONS_SSL_PARAMS_VALUE
}</con:value>
</con:property>
</con:properties>
</con:testCase>
- <con:testCase failOnError="false" failTestCaseOnErrors="false"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Params_Bad_Cipher_Suites"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
+ <con:testCase failOnError="true" failTestCaseOnErrors="true"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Params_Bad_Cipher_Suites"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
<con:description>SubmitSingleMessage bad cipher suites SSL
parameters test case.</con:description>
<con:settings/>
<con:testStep type="request" name="SubmitSingleMessage">
@@ -308,12 +312,16 @@
</con:testStep>
<con:properties>
<con:property>
+ <con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).EXCEPTION_CLASSES_NAME
}</con:name>
+ <con:value>#{ T(javax.net.ssl.SSLHandshakeException).name
}</con:value>
+ </con:property>
+ <con:property>
<con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).SSL_PARAMS_NAME
}</con:name>
<con:value>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).BAD_CIPHER_SUITES_SSL_PARAMS_VALUE
}</con:value>
</con:property>
</con:properties>
</con:testCase>
- <con:testCase failOnError="false" failTestCaseOnErrors="false"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Socket_Factory_Invalid_Key_Size"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
+ <con:testCase failOnError="true" failTestCaseOnErrors="true"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Socket_Factory_Invalid_Key_Size"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
<con:description>SubmitSingleMessage invalid key size SSL socket
factory test case.</con:description>
<con:settings/>
<con:testStep type="request" name="SubmitSingleMessage">
@@ -350,12 +358,16 @@
</con:testStep>
<con:properties>
<con:property>
+ <con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).EXCEPTION_CLASSES_NAME
}</con:name>
+ <con:value>#{ T(java.net.SocketException).name }</con:value>
+ </con:property>
+ <con:property>
<con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).SSL_SOCKET_FACTORY_NAME
}</con:name>
<con:value>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).INVALID_KEY_SIZE_SSL_SOCKET_FACTORY_VALUE
}</con:value>
</con:property>
</con:properties>
</con:testCase>
- <con:testCase failOnError="false" failTestCaseOnErrors="false"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Socket_Factory_Invalid_Sig_Alg"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
+ <con:testCase failOnError="true" failTestCaseOnErrors="true"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Socket_Factory_Invalid_Sig_Alg"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
<con:description>SubmitSingleMessage invalid signature algorithm SSL
socket factory test case.</con:description>
<con:settings/>
<con:testStep type="request" name="SubmitSingleMessage">
@@ -392,12 +404,16 @@
</con:testStep>
<con:properties>
<con:property>
+ <con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).EXCEPTION_CLASSES_NAME
}</con:name>
+ <con:value>#{ T(java.net.SocketException).name }</con:value>
+ </con:property>
+ <con:property>
<con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).SSL_SOCKET_FACTORY_NAME
}</con:name>
<con:value>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).INVALID_SIG_ALG_SSL_SOCKET_FACTORY_VALUE
}</con:value>
</con:property>
</con:properties>
</con:testCase>
- <con:testCase failOnError="false" failTestCaseOnErrors="false"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Socket_Factory_Revoked"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
+ <con:testCase failOnError="true" failTestCaseOnErrors="true"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Socket_Factory_Revoked"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
<con:description>SubmitSingleMessage revoked SSL socket factory test
case.</con:description>
<con:settings/>
<con:testStep type="request" name="SubmitSingleMessage">
@@ -434,12 +450,16 @@
</con:testStep>
<con:properties>
<con:property>
+ <con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).EXCEPTION_CLASSES_NAME
}</con:name>
+ <con:value>#{ T(java.net.SocketException).name }</con:value>
+ </con:property>
+ <con:property>
<con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).SSL_SOCKET_FACTORY_NAME
}</con:name>
<con:value>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).REVOKED_SSL_SOCKET_FACTORY_VALUE
}</con:value>
</con:property>
</con:properties>
</con:testCase>
- <con:testCase failOnError="false" failTestCaseOnErrors="false"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Socket_Factory_Untrusted"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
+ <con:testCase failOnError="true" failTestCaseOnErrors="true"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_SSL_Socket_Factory_Untrusted"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
<con:description>SubmitSingleMessage untrusted SSL socket factory
test case.</con:description>
<con:settings/>
<con:testStep type="request" name="SubmitSingleMessage">
@@ -476,11 +496,135 @@
</con:testStep>
<con:properties>
<con:property>
+ <con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).EXCEPTION_CLASSES_NAME
}</con:name>
+ <con:value>#{ T(javax.net.ssl.SSLHandshakeException).name
}</con:value>
+ </con:property>
+ <con:property>
<con:name>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).SSL_SOCKET_FACTORY_NAME
}</con:name>
<con:value>#{
T(gov.hhs.onc.phiz.web.test.soapui.PhizSoapUiProperties).UNTRUSTED_SSL_SOCKET_FACTORY_VALUE
}</con:value>
</con:property>
</con:properties>
</con:testCase>
+ <con:testCase failOnError="true" failTestCaseOnErrors="true"
keepSession="false" maxResults="0" name="SubmitSingleMessage_Timeout"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
+ <con:description>SubmitSingleMessage timeout test
case.</con:description>
+ <con:settings/>
+ <con:testStep type="request" name="SubmitSingleMessage">
+ <con:settings/>
+ <con:config xsi:type="con:RequestStep"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <con:interface>IISHubBindingSoap12</con:interface>
+ <con:operation>SubmitSingleMessage</con:operation>
+ <con:request name="SubmitSingleMessage" outgoingWss=""
incomingWss="" timeout="" sslKeystore="" useWsAddressing="true"
useWsReliableMessaging="false" wssPasswordType="">
+ <con:description/>
+ <con:settings/>
+ <con:encoding>UTF-8</con:encoding>
+
<con:endpoint>${#Spring#phiz.tomcat.ws.iis.hub.url}</con:endpoint>
+ <con:request><![CDATA[<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:iis="urn:cdc:iisb:2014" xmlns:iis-hub="urn:cdc:iisb:hub:2014">
+ <soap:Header>
+ <iis-hub:HubRequestHeader>
+
<iis-hub:DestinationId>${#Spring#phiz.dest.iis.test.timeout.id}</iis-hub:DestinationId>
+ </iis-hub:HubRequestHeader>
+ </soap:Header>
+ <soap:Body>
+ <iis:SubmitSingleMessageRequest>
+
<iis:Hl7Message>${=project.name}_${=testSuite.name}_${=testCase.name}_${=testStep.name}_${=request.name}</iis:Hl7Message>
+ </iis:SubmitSingleMessageRequest>
+ </soap:Body>
+</soap:Envelope>]]></con:request>
+ <con:assertion type="Valid HTTP Status Codes" name="Valid HTTP
Status Codes">
+ <con:configuration>
+ <codes>500</codes>
+ </con:configuration>
+ </con:assertion>
+ <con:assertion type="SOAP Response" name="SOAP Response">
+ <con:settings/>
+ <con:configuration/>
+ </con:assertion>
+ <con:assertion type="Not SOAP Fault Assertion" name="SOAP
Fault">
+ <con:configuration/>
+ </con:assertion>
+ <con:assertion type="XPath Match" name="XPath Match">
+ <con:configuration>
+ <path>declare namespace iis='urn:cdc:iisb:2014';
+declare namespace iis-hub='urn:cdc:iisb:hub:2014';
+empty(//iis-hub:DestinationConnectionFault)</path>
+ <content>false</content>
+ <allowWildcards>false</allowWildcards>
+
<ignoreNamspaceDifferences>false</ignoreNamspaceDifferences>
+ <ignoreComments>false</ignoreComments>
+ </con:configuration>
+ </con:assertion>
+ <con:credentials>
+ <con:authType>No Authorization</con:authType>
+ </con:credentials>
+ <con:jmsConfig JMSDeliveryMode="PERSISTENT"/>
+ <con:jmsPropertyConfig/>
+ <con:wsaConfig mustUnderstand="TRUE" version="200508"
action="urn:cdc:iisb:hub:2014:IISHubPortType:SubmitSingleMessageRequest"
generateMessageId="true"/>
+ <con:wsrmConfig version="1.2"/>
+ </con:request>
+ </con:config>
+ </con:testStep>
+ <con:properties/>
+ </con:testCase>
+ <con:testCase failOnError="true" failTestCaseOnErrors="true"
keepSession="false" maxResults="0" name="SubmitSingleMessage_Unknown_Host"
searchProperties="true" wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo=""
amfAuthorisation="false" amfEndpoint="" amfLogin="" amfPassword="">
+ <con:description>SubmitSingleMessage unknown host test
case.</con:description>
+ <con:settings/>
+ <con:testStep type="request" name="SubmitSingleMessage">
+ <con:settings/>
+ <con:config xsi:type="con:RequestStep"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <con:interface>IISHubBindingSoap12</con:interface>
+ <con:operation>SubmitSingleMessage</con:operation>
+ <con:request name="SubmitSingleMessage" outgoingWss=""
incomingWss="" timeout="" sslKeystore="" useWsAddressing="true"
useWsReliableMessaging="false" wssPasswordType="">
+ <con:description/>
+ <con:settings/>
+ <con:encoding>UTF-8</con:encoding>
+
<con:endpoint>${#Spring#phiz.tomcat.ws.iis.hub.url}</con:endpoint>
+ <con:request><![CDATA[<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:iis="urn:cdc:iisb:2014" xmlns:iis-hub="urn:cdc:iisb:hub:2014">
+ <soap:Header>
+ <iis-hub:HubRequestHeader>
+
<iis-hub:DestinationId>${#Spring#phiz.dest.iis.test.unknown.host.id}</iis-hub:DestinationId>
+ </iis-hub:HubRequestHeader>
+ </soap:Header>
+ <soap:Body>
+ <iis:SubmitSingleMessageRequest>
+
<iis:Hl7Message>${=project.name}_${=testSuite.name}_${=testCase.name}_${=testStep.name}_${=request.name}</iis:Hl7Message>
+ </iis:SubmitSingleMessageRequest>
+ </soap:Body>
+</soap:Envelope>]]></con:request>
+ <con:assertion type="Valid HTTP Status Codes" name="Valid HTTP
Status Codes">
+ <con:configuration>
+ <codes>500</codes>
+ </con:configuration>
+ </con:assertion>
+ <con:assertion type="SOAP Response" name="SOAP Response">
+ <con:settings/>
+ <con:configuration/>
+ </con:assertion>
+ <con:assertion type="Not SOAP Fault Assertion" name="SOAP
Fault">
+ <con:configuration/>
+ </con:assertion>
+ <con:assertion type="XPath Match" name="XPath Match">
+ <con:configuration>
+ <path>declare namespace iis='urn:cdc:iisb:2014';
+declare namespace iis-hub='urn:cdc:iisb:hub:2014';
+empty(//iis-hub:DestinationConnectionFault)</path>
+ <content>false</content>
+ <allowWildcards>false</allowWildcards>
+
<ignoreNamspaceDifferences>false</ignoreNamspaceDifferences>
+ <ignoreComments>false</ignoreComments>
+ </con:configuration>
+ </con:assertion>
+ <con:credentials>
+ <con:authType>No Authorization</con:authType>
+ </con:credentials>
+ <con:jmsConfig JMSDeliveryMode="PERSISTENT"/>
+ <con:jmsPropertyConfig/>
+ <con:wsaConfig mustUnderstand="TRUE" version="200508"
action="urn:cdc:iisb:hub:2014:IISHubPortType:SubmitSingleMessageRequest"
generateMessageId="true"/>
+ <con:wsrmConfig version="1.2"/>
+ </con:request>
+ </con:config>
+ </con:testStep>
+ <con:properties/>
+ </con:testCase>
<con:testCase failOnError="true" failTestCaseOnErrors="true"
keepSession="false" maxResults="0"
name="SubmitSingleMessage_Fault_MsgTooLarge" searchProperties="true"
wsrmEnabled="false" wsrmVersion="1.0" wsrmAckTo="" amfAuthorisation="false"
amfEndpoint="" amfLogin="" amfPassword="">
<con:description>SubmitSingleMessage MessageTooLargeFault test
case.</con:description>
<con:settings/>
=======================================
--- /phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/iis/IisService.java
Fri Jan 9 01:16:51 2015 UTC
+++ /phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/iis/IisService.java
Fri Mar 20 22:02:29 2015 UTC
@@ -3,8 +3,13 @@
import gov.hhs.onc.phiz.ws.iis.ConnectivityTestRequestType;
import gov.hhs.onc.phiz.ws.iis.ConnectivityTestResponseType;
import gov.hhs.onc.phiz.ws.iis.UnsupportedOperationFault;
-import org.springframework.context.ApplicationContextAware;
+import org.apache.cxf.Bus;
+import org.springframework.beans.factory.BeanFactoryAware;

-public interface IisService extends ApplicationContextAware {
+public interface IisService extends BeanFactoryAware {
public ConnectivityTestResponseType
connectivityTest(ConnectivityTestRequestType reqParams) throws
UnsupportedOperationFault;
+
+ public Bus getBus();
+
+ public void setBus(Bus bus);
}
=======================================
---
/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
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/iis/hub/impl/IisHubServiceImpl.java
Fri Mar 20 22:02:29 2015 UTC
@@ -2,6 +2,8 @@

import gov.hhs.onc.phiz.destination.PhizDestination;
import gov.hhs.onc.phiz.destination.PhizDestinationRegistry;
+import gov.hhs.onc.phiz.net.PhizSchemes;
+import gov.hhs.onc.phiz.utils.PhizExceptionUtils;
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;
@@ -26,20 +28,20 @@
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.ConnectException;
import java.net.SocketTimeoutException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.net.UnknownHostException;
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;
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;
@@ -82,19 +84,31 @@
hubRespHeader.value = respPair.getRight();
}

- private Pair<SubmitSingleMessageResponseType, HubResponseHeaderType>
submitSingleMessageInternal(SubmitSingleMessageRequestType reqParams,
- HubRequestHeaderType hubReqHeader) throws
DestinationConnectionFault, HubClientFault, MessageTooLargeFault,
SecurityFault, UnknownDestinationFault {
- String destId = hubReqHeader.getDestinationId();
- PhizDestination dest = this.destReg.findById(destId);
+ private static Exchange buildClientExchange(SoapMessage reqMsg) {
+ Exchange clientExchange = new ExchangeImpl();
+ clientExchange.put(PhizLoggingFeature.WS_MSG_EVENT_ID_PROP_NAME,
reqMsg.getExchange().get(PhizLoggingFeature.WS_MSG_EVENT_ID_PROP_NAME));

- if (dest == null) {
- throw new UnknownDestinationFault("IIS destination ID is not
registered.", new UnknownDestinationFaultTypeImpl(destId));
- }
+ return clientExchange;
+ }

- WrappedMessageContext reqMsgContext =
PhizWsUtils.getMessageContext(this.wsContext);
- SoapMessage reqMsg = ((SoapMessage)
reqMsgContext.getWrappedMessage());
- HttpServletRequest servletReq =
PhizWsUtils.getProperty(reqMsgContext,
AbstractHTTPDestination.HTTP_REQUEST, HttpServletRequest.class);
- URI destUri = dest.getUri();
+ private static void initializeClientRequestContext(Map<String, Object>
clientReqContext, SoapMessage reqMsg) {
+ 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);
+ }
+
+ private static String processDestinationUri(HttpServletRequest
servletReq, String destId, URI destUri) throws DestinationConnectionFault,
SecurityFault {
String destUriStr = destUri.toString();

if (!destUri.isAbsolute()) {
@@ -110,28 +124,36 @@
}
}

- Client client = ((Client)
this.appContext.getBean(this.clientBeanName, destUriStr));
- Map<String, Object> clientReqContext = client.getRequestContext();
+ String destUriScheme = destUri.getScheme();

- 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)));
+ if (!destUriScheme.equalsIgnoreCase(PhizSchemes.HTTPS)) {
+ throw new DestinationConnectionFault(String.format("Invalid
IIS destination URI scheme: %s", destUriScheme),
+ new DestinationConnectionFaultTypeImpl(destId,
destUriStr));
+ }
+
+ return destUriStr;
+ }
+
+ private Pair<SubmitSingleMessageResponseType, HubResponseHeaderType>
submitSingleMessageInternal(SubmitSingleMessageRequestType reqParams,
+ HubRequestHeaderType hubReqHeader) throws
DestinationConnectionFault, HubClientFault, MessageTooLargeFault,
SecurityFault, UnknownDestinationFault {
+ String destId = hubReqHeader.getDestinationId();
+ PhizDestination dest = this.destReg.findById(destId);
+
+ if (dest == null) {
+ throw new UnknownDestinationFault("IIS destination ID is not
registered.", new UnknownDestinationFaultTypeImpl(destId));
+ }

- 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);
+ WrappedMessageContext reqMsgContext =
PhizWsUtils.getMessageContext(this.wsContext);
+ SoapMessage reqMsg = ((SoapMessage)
reqMsgContext.getWrappedMessage());
+ URI destUri = dest.getUri();
+ String destUriStr =
+ processDestinationUri(PhizWsUtils.getProperty(reqMsgContext,
AbstractHTTPDestination.HTTP_REQUEST, HttpServletRequest.class), destId,
destUri);
+ Client client = ((Client)
this.beanFactory.getBean(this.clientBeanName, destUriStr));

- Exchange clientExchange = new ExchangeImpl();
- clientExchange.put(PhizLoggingFeature.WS_MSG_EVENT_ID_PROP_NAME,
reqMsg.getExchange().get(PhizLoggingFeature.WS_MSG_EVENT_ID_PROP_NAME));
+ initializeClientRequestContext(client.getRequestContext(), reqMsg);

ClientCallback clientReqCallback = new ClientCallback();
+ Exchange clientExchange = buildClientExchange(reqMsg);

try {
try {
@@ -145,16 +167,24 @@
} catch (DestinationConnectionFault | HubClientFault |
MessageTooLargeFault | SecurityFault | UnknownDestinationFault e) {
throw e;
} catch (Throwable e) {
- SocketTimeoutException clientReqTimeoutException =
- ((SocketTimeoutException)
Stream.of(ExceptionUtils.getThrowables(e))
- .filter(clientReqExceptionCause ->
(clientReqExceptionCause instanceof
SocketTimeoutException)).findFirst().orElse(null));
+ Throwable rootCause = PhizExceptionUtils.getRootCause(e);
+
+ if (rootCause instanceof UnknownHostException) {
+ throw new DestinationConnectionFault(String.format("Unable
to resolve IIS destination URI host name: %s", rootCause.getMessage()),
+ new DestinationConnectionFaultTypeImpl(destId,
destUriStr), e);
+ }
+
+ if (rootCause instanceof SocketTimeoutException) {
+ throw new DestinationConnectionFault("Connection attempt
to IIS destination web service timed out.", new
DestinationConnectionFaultTypeImpl(
+ destId, destUriStr), e);
+ }

- 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);
+ if (rootCause instanceof ConnectException) {
+ throw new DestinationConnectionFault("Unable to connect to
IIS destination web service.", new
DestinationConnectionFaultTypeImpl(destId,
+ destUriStr), e);
}
+
+ 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/iis/impl/AbstractIisService.java
Fri Jan 9 08:17:07 2015 UTC
+++
/phiz-web-ws/src/main/java/gov/hhs/onc/phiz/web/ws/iis/impl/AbstractIisService.java
Fri Mar 20 22:02:29 2015 UTC
@@ -9,21 +9,18 @@
import javax.xml.ws.WebServiceContext;
import org.apache.cxf.Bus;
import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.support.AbstractApplicationContext;

public abstract class AbstractIisService implements IisService {
@Autowired
protected ObjectFactory objFactory;

- @Resource(name = "busPhiz")
- protected Bus bus;
-
@Resource
protected WebServiceContext wsContext;

- protected AbstractApplicationContext appContext;
+ protected BeanFactory beanFactory;
+ protected Bus bus;

@Override
public ConnectivityTestResponseType
connectivityTest(ConnectivityTestRequestType reqParams) throws
UnsupportedOperationFault {
@@ -38,7 +35,17 @@
}

@Override
- public void setApplicationContext(ApplicationContext appContext)
throws BeansException {
- this.appContext = ((AbstractApplicationContext) appContext);
+ public void setBeanFactory(BeanFactory beanFactory) throws
BeansException {
+ this.beanFactory = beanFactory;
+ }
+
+ @Override
+ public Bus getBus() {
+ return this.bus;
+ }
+
+ @Override
+ public void setBus(Bus bus) {
+ this.bus = bus;
}
}
=======================================
---
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-server.xml
Tue Feb 3 16:25:30 2015 UTC
+++
/phiz-web-ws/src/main/resources/META-INF/phiz/spring/spring-phiz-web-ws-server.xml
Fri Mar 20 22:02:29 2015 UTC
@@ -19,7 +19,8 @@

<!--====================================================================================================
= SERVICES: IIS

=====================================================================================================-->
- <beans:bean id="serviceIis"
class="gov.hhs.onc.phiz.web.ws.iis.IisService" abstract="true"/>
+ <beans:bean id="serviceIis"
class="gov.hhs.onc.phiz.web.ws.iis.IisService" abstract="true"
+ p:bus-ref="busPhiz"/>

<beans:bean id="serviceIisDev"
class="gov.hhs.onc.phiz.web.ws.iis.impl.DevIisService" parent="serviceIis"/>

=======================================
---
/phiz-web-ws/src/test/resources/META-INF/phiz/phiz-web-ws-test.properties
Sat Feb 21 20:45:44 2015 UTC
+++
/phiz-web-ws/src/test/resources/META-INF/phiz/phiz-web-ws-test.properties
Fri Mar 20 22:02:29 2015 UTC
@@ -0,0 +1,5 @@
+#================================================================================
+# WEB SERVICE CLIENT
+#================================================================================
+phiz.ws.client.conn.timeout=#{ 2 *
T(org.apache.commons.lang3.time.DateUtils).MILLIS_PER_SECOND }
+phiz.ws.client.receive.timeout=#{ 2 *
T(org.apache.commons.lang3.time.DateUtils).MILLIS_PER_SECOND }

==============================================================================
Revision: 42a26f908bdb
Branch: default
Author: Michal Kotelba <michal....@esacinc.com>
Date: Sat Mar 21 04:19:42 2015 UTC
Log: - Supports PHIZ-41.
- Refactored certificate path validation to allow for BouncyCastle
dependency update (to latest version, 1.52).
- Fixed Debian package control file Homepage field value.
https://code.google.com/p/phiz/source/detail?r=42a26f908bdb

Deleted:

/phiz-core/src/main/java/gov/hhs/onc/phiz/crypto/ssl/revocation/OcspOids.java
Modified:
/phiz-core/pom.xml

/phiz-core/src/main/java/gov/hhs/onc/phiz/crypto/ssl/impl/PhizTrustManager.java

/phiz-core/src/main/java/gov/hhs/onc/phiz/crypto/ssl/revocation/impl/PhizRevocationChecker.java

/phiz-core/src/main/java/gov/hhs/onc/phiz/crypto/utils/PhizCertificatePathUtils.java
/phiz-parent/pom.xml
/phiz-tools/src/main/deb/control/control
/phiz-web-parent/pom.xml
/phiz-web-portal/src/main/deb/control/control
/phiz-web-ws/src/main/deb/control/control

=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/crypto/ssl/revocation/OcspOids.java
Wed Mar 18 02:04:22 2015 UTC
+++ /dev/null
@@ -1,13 +0,0 @@
-package gov.hhs.onc.phiz.crypto.ssl.revocation;
-
-import org.bouncycastle.asn1.ASN1ObjectIdentifier;
-import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers;
-
-public final class OcspOids {
- public final static ASN1ObjectIdentifier ID_PKIX_OCSP_PREF_SIG_ALGS =
OCSPObjectIdentifiers.id_pkix_ocsp.branch(Integer.toString(8));
-
- public final static ASN1ObjectIdentifier ID_PKIX_OCSP_EXTENDED_REVOKE
= OCSPObjectIdentifiers.id_pkix_ocsp.branch(Integer.toString(9));
-
- private OcspOids() {
- }
-}
=======================================
--- /phiz-core/pom.xml Sat Mar 7 17:35:44 2015 UTC
+++ /phiz-core/pom.xml Sat Mar 21 04:19:42 2015 UTC
@@ -356,7 +356,7 @@
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-tools</artifactId>
- <version>2.2.8</version>
+ <version>2.2.10</version>
<exclusions>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/crypto/ssl/impl/PhizTrustManager.java
Wed Mar 18 12:21:24 2015 UTC
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/crypto/ssl/impl/PhizTrustManager.java
Sat Mar 21 04:19:42 2015 UTC
@@ -33,14 +33,13 @@
import javax.net.ssl.X509ExtendedTrustManager;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
-import org.bouncycastle.x509.ExtendedPKIXBuilderParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;

-public class PhizTrustManager extends X509ExtendedTrustManager implements
BeanFactoryAware, PhizSslManagerBean<ExtendedPKIXBuilderParameters> {
+public class PhizTrustManager extends X509ExtendedTrustManager implements
BeanFactoryAware, PhizSslManagerBean<PKIXBuilderParameters> {
private final static Logger LOGGER =
LoggerFactory.getLogger(PhizTrustManager.class);

private BeanFactory beanFactory;
@@ -51,7 +50,7 @@
private Provider prov;
private String revocationCheckerBeanName;
private String type;
- private ExtendedPKIXBuilderParameters builderParams;
+ private PKIXBuilderParameters builderParams;

@Override
public void checkClientTrusted(X509Certificate[] certs, String
authType) throws CertificateException {
@@ -90,8 +89,7 @@

@Override
public void afterPropertiesSet() throws Exception {
- this.builderParams =
- ((ExtendedPKIXBuilderParameters)
ExtendedPKIXBuilderParameters.getInstance(new
PKIXBuilderParameters(this.keyStore, this.certSelector)));
+ this.builderParams = new PKIXBuilderParameters(this.keyStore,
this.certSelector);
this.builderParams.setRevocationEnabled(false);


Optional.ofNullable(this.certPathCheckers).ifPresent(certPathCheckers ->
certPathCheckers.stream().forEach(this.builderParams::addCertPathChecker));
@@ -147,11 +145,11 @@
X509CertSelector certSelector = new X509CertSelector();
certSelector.setCertificate(certs[0]);

- ExtendedPKIXBuilderParameters certBuilderParams =
((ExtendedPKIXBuilderParameters) this.builderParams.clone());
+ PKIXBuilderParameters certBuilderParams =
((PKIXBuilderParameters) this.builderParams.clone());
certBuilderParams.setTargetCertConstraints(certSelector);

certBuilderParams.addCertStore(PhizCertificatePathUtils.buildStore(certs));

- X509Certificate issuerCert =
PhizCertificatePathUtils.findRootCertificate(certBuilderParams, certs[0]);
+ X509Certificate issuerCert =
PhizCertificatePathUtils.findRootCertificate(certs[0], certBuilderParams);


certBuilderParams.addCertPathChecker(((PhizConstraintsChecker)
this.beanFactory.getBean(this.constraintsCheckerBeanName, loc,
issuerCert)));

@@ -200,7 +198,7 @@
}

@Override
- public ExtendedPKIXBuilderParameters getBuilderParameters() {
+ public PKIXBuilderParameters getBuilderParameters() {
return this.builderParams;
}

=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/crypto/ssl/revocation/impl/PhizRevocationChecker.java
Wed Mar 18 12:21:24 2015 UTC
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/crypto/ssl/revocation/impl/PhizRevocationChecker.java
Sat Mar 21 04:19:42 2015 UTC
@@ -5,7 +5,6 @@
import gov.hhs.onc.phiz.crypto.ssl.impl.AbstractPhizPathChecker;
import gov.hhs.onc.phiz.crypto.ssl.revocation.OcspCertificateStatusType;
import gov.hhs.onc.phiz.crypto.ssl.revocation.OcspContentTypes;
-import gov.hhs.onc.phiz.crypto.ssl.revocation.OcspOids;
import gov.hhs.onc.phiz.crypto.ssl.revocation.OcspResponseStatusType;
import gov.hhs.onc.phiz.crypto.ssl.revocation.OcspRevokeReasonType;
import gov.hhs.onc.phiz.crypto.utils.PhizCryptoUtils;
@@ -127,7 +126,7 @@
ASN1EncodableVector preferredSigAlgsVector = new
ASN1EncodableVector();
this.preferredSigAlgIds.forEach(preferredSigAlgId ->
preferredSigAlgsVector.add(new DERSequence(preferredSigAlgId)));
Extension preferredSigAlgsOcspReqExt =
- new Extension(OcspOids.ID_PKIX_OCSP_PREF_SIG_ALGS, false, new
DEROctetString(new DERSequence(preferredSigAlgsVector)));
+ new
Extension(OCSPObjectIdentifiers.id_pkix_ocsp_pref_sig_algs, false, new
DEROctetString(new DERSequence(preferredSigAlgsVector)));

this.baseOcspReqExts = ArrayUtils.toArray(respTypeOcspReqExt,
preferredSigAlgsOcspReqExt);
}
=======================================
---
/phiz-core/src/main/java/gov/hhs/onc/phiz/crypto/utils/PhizCertificatePathUtils.java
Sat Mar 7 13:04:18 2015 UTC
+++
/phiz-core/src/main/java/gov/hhs/onc/phiz/crypto/utils/PhizCertificatePathUtils.java
Sat Mar 21 04:19:42 2015 UTC
@@ -1,46 +1,50 @@
package gov.hhs.onc.phiz.crypto.utils;

import com.github.sebhoss.warnings.CompilerWarnings;
-import gov.hhs.onc.phiz.crypto.PhizCryptoProviders;
+import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.cert.CertStore;
+import java.security.cert.CertStoreException;
+import java.security.cert.PKIXBuilderParameters;
import java.security.cert.TrustAnchor;
+import java.security.cert.X509CertSelector;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
+import org.apache.commons.collections4.set.ListOrderedSet;
+import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.cert.jcajce.JcaCertStoreBuilder;
import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder;
-import org.bouncycastle.jce.provider.AnnotatedException;
-import org.bouncycastle.jce.provider.CertPathValidatorUtilities;
-import org.bouncycastle.x509.ExtendedPKIXBuilderParameters;

-public final class PhizCertificatePathUtils extends
CertPathValidatorUtilities {
+public final class PhizCertificatePathUtils {
private PhizCertificatePathUtils() {
}

@Nullable
- public static X509Certificate
findRootCertificate(ExtendedPKIXBuilderParameters builderParams,
X509Certificate cert) {
- X509Certificate[] pathCerts = buildPath(builderParams, cert);
+ public static X509Certificate findRootCertificate(X509Certificate
cert, PKIXBuilderParameters builderParams) throws CertStoreException,
IOException {
+ X509Certificate[] pathCerts = buildPath(cert, builderParams);

return ((pathCerts != null) ? pathCerts[(pathCerts.length - 1)] :
null);
}

@Nullable
- public static X509Certificate[]
buildPath(ExtendedPKIXBuilderParameters builderParams, X509Certificate
cert) {
+ public static X509Certificate[] buildPath(X509Certificate cert,
PKIXBuilderParameters builderParams) throws CertStoreException, IOException
{
List<X509Certificate> pathCerts = new
ArrayList<>(builderParams.getMaxPathLength());
pathCerts.add(cert);

Set<TrustAnchor> trustAnchors = builderParams.getTrustAnchors();
+ List<CertStore> certStores = builderParams.getCertStores();
boolean foundTrustAnchor = false;
X509Certificate pathCert;

- while (((pathCert = cert) != null) && !foundTrustAnchor
&& !isSelfIssued(pathCert)) {
- if ((foundTrustAnchor = ((cert =
findTrustAnchorCertificate(trustAnchors, pathCert)) != null))
- || ((cert = findIssuerCertificate(builderParams,
pathCert)) != null)) {
+ while (((pathCert = cert) != null) && !foundTrustAnchor
&& !isRootIssuer(pathCert)) {
+ if ((foundTrustAnchor = ((cert =
findTrustAnchorCertificate(pathCert, trustAnchors)) != null))
+ || ((cert = findIssuerCertificate(pathCert,
certStores)) != null)) {
pathCerts.add(cert);
} else {
return null;
@@ -51,33 +55,69 @@
}

@Nullable
- public static X509Certificate
findTrustAnchorCertificate(Set<TrustAnchor> trustAnchors, X509Certificate
cert) {
- TrustAnchor trustAnchor = findTrustAnchor(trustAnchors, cert);
+ public static X509Certificate
findTrustAnchorCertificate(X509Certificate cert, Set<TrustAnchor>
trustAnchors) throws IOException {
+ TrustAnchor trustAnchor = findTrustAnchor(cert, trustAnchors);

return ((trustAnchor != null) ? trustAnchor.getTrustedCert() :
null);
}

@Nullable
- public static TrustAnchor findTrustAnchor(Set<TrustAnchor>
trustAnchors, X509Certificate cert) {
- try {
- return findTrustAnchor(cert, trustAnchors,
PhizCryptoProviders.BC_NAME);
- } catch (AnnotatedException ignored) {
+ public static TrustAnchor findTrustAnchor(X509Certificate cert,
Set<TrustAnchor> trustAnchors) throws IOException {
+ X509CertSelector issuerCertSelector =
buildIssuerCertificateSelector(cert);
+ X509Certificate trustAnchorCert;
+
+ for (TrustAnchor trustAnchor : trustAnchors) {
+ if (((trustAnchorCert = trustAnchor.getTrustedCert()) != null)
&& issuerCertSelector.match(trustAnchorCert)) {
+ return trustAnchor;
+ }
}

return null;
}

@Nullable
+ public static X509Certificate findIssuerCertificate(X509Certificate
cert, CertStore ... certStores) throws CertStoreException, IOException {
+ return findIssuerCertificate(cert, Arrays.asList(certStores));
+ }
+
+ @Nullable
+ @SuppressWarnings({ CompilerWarnings.UNCHECKED })
+ public static X509Certificate findIssuerCertificate(X509Certificate
cert, Iterable<CertStore> certStores) throws CertStoreException,
IOException {
+ return findCertificate(buildIssuerCertificateSelector(cert),
certStores);
+ }
+
+ public static X509CertSelector
buildIssuerCertificateSelector(X509Certificate cert) throws IOException {
+ X509CertSelector issuerCertSelector = new X509CertSelector();
+
issuerCertSelector.setSubject(X500Name.getInstance(cert.getIssuerX500Principal().getEncoded()).getEncoded());
+
+ return issuerCertSelector;
+ }
+
+ @Nullable
+ public static X509Certificate findCertificate(X509CertSelector
certSelector, CertStore ... certStores) throws CertStoreException {
+ return findCertificate(certSelector, Arrays.asList(certStores));
+ }
+
+ @Nullable
+ public static X509Certificate findCertificate(X509CertSelector
certSelector, Iterable<CertStore> certStores) throws CertStoreException {
+ Iterator<X509Certificate> certIterator =
findCertificates(certSelector, certStores).iterator();
+
+ return (certIterator.hasNext() ? certIterator.next() : null);
+ }
+
+ public static ListOrderedSet<X509Certificate>
findCertificates(X509CertSelector certSelector, CertStore ... certStores)
throws CertStoreException {
+ return findCertificates(certSelector, Arrays.asList(certStores));
+ }
+
@SuppressWarnings({ CompilerWarnings.UNCHECKED })
- public static X509Certificate
findIssuerCertificate(ExtendedPKIXBuilderParameters builderParams,
X509Certificate cert) {
- try {
- Iterator<X509Certificate> issuerCertIter =
((Collection<X509Certificate>) findIssuerCerts(cert,
builderParams)).iterator();
+ public static ListOrderedSet<X509Certificate>
findCertificates(X509CertSelector certSelector, Iterable<CertStore>
certStores) throws CertStoreException {
+ ListOrderedSet<X509Certificate> certs = new ListOrderedSet<>();

- return (issuerCertIter.hasNext() ? issuerCertIter.next() :
null);
- } catch (AnnotatedException ignored) {
+ for (CertStore certStore : certStores) {
+ certs.addAll(((Collection<X509Certificate>)
certStore.getCertificates(certSelector)));
}

- return null;
+ return certs;
}

public static CertStore buildStore(X509Certificate ... certs) throws
GeneralSecurityException {
@@ -89,4 +129,8 @@

return storeBuilder.build();
}
+
+ public static boolean isRootIssuer(X509Certificate cert) {
+ return
cert.getSubjectX500Principal().equals(cert.getIssuerX500Principal());
+ }
}
=======================================
--- /phiz-parent/pom.xml Wed Mar 18 02:04:22 2015 UTC
+++ /phiz-parent/pom.xml Sat Mar 21 04:19:42 2015 UTC
@@ -113,7 +113,7 @@
<dependency>
<groupId>args4j</groupId>
<artifactId>args4j</artifactId>
- <version>2.0.29</version>
+ <version>2.0.31</version>
</dependency>
<dependency>
<groupId>br.net.woodstock.rockframework</groupId>
@@ -138,17 +138,17 @@
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
- <version>2.5.0</version>
+ <version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
- <version>2.5.0</version>
+ <version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
- <version>2.5.0</version>
+ <version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.github.sebhoss</groupId>
@@ -212,7 +212,7 @@
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
- <version>2.2.8</version>
+ <version>2.2.10</version>
<exclusions>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
@@ -264,27 +264,27 @@
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-annotation</artifactId>
- <version>3.1.0</version>
+ <version>3.1.1</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
- <version>3.1.0</version>
+ <version>3.1.1</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-healthchecks</artifactId>
- <version>3.1.0</version>
+ <version>3.1.1</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-json</artifactId>
- <version>3.1.0</version>
+ <version>3.1.1</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-jvm</artifactId>
- <version>3.1.0</version>
+ <version>3.1.1</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
@@ -381,12 +381,12 @@
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
- <version>4.4</version>
+ <version>4.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore-nio</artifactId>
- <version>4.4</version>
+ <version>4.4.1</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
@@ -401,17 +401,17 @@
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
- <version>1.51</version>
+ <version>1.52</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
- <version>1.51</version>
+ <version>1.52</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
- <version>2.4.0</version>
+ <version>2.4.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
@@ -534,7 +534,7 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
- <version>1.2.1.RELEASE</version>
+ <version>1.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
@@ -1131,7 +1131,7 @@
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
- <version>2.4.0</version>
+ <version>2.4.2</version>
<scope>runtime</scope>
</dependency>
</dependencies>
=======================================
--- /phiz-tools/src/main/deb/control/control Thu Jan 22 06:01:46 2015 UTC
+++ /phiz-tools/src/main/deb/control/control Sat Mar 21 04:19:42 2015 UTC
@@ -4,6 +4,6 @@
Priority: optional
Architecture: all
Maintainer: PHIZ Project <phiz-p...@esacinc.com>
-Homepage: [[url]]
+Homepage: http://code.google.com/p/phiz/
Depends: logrotate, oracle-java8-installer,
oracle-java8-unlimited-jce-policy
Description: Public Health Immunization Data Exchange (PHIZ) tools Debian
package.
=======================================
--- /phiz-web-parent/pom.xml Sat Mar 7 17:35:44 2015 UTC
+++ /phiz-web-parent/pom.xml Sat Mar 21 04:19:42 2015 UTC
@@ -108,12 +108,12 @@
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-servlet</artifactId>
- <version>3.1.0</version>
+ <version>3.1.1</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-servlets</artifactId>
- <version>3.1.0</version>
+ <version>3.1.1</version>
</dependency>
<dependency>
<groupId>javax.el</groupId>
@@ -141,19 +141,19 @@
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
- <version>8.0.18</version>
+ <version>8.0.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
- <version>8.0.18</version>
+ <version>8.0.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-log4j</artifactId>
- <version>8.0.18</version>
+ <version>8.0.20</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -180,7 +180,7 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
- <version>1.2.1.RELEASE</version>
+ <version>1.2.2.RELEASE</version>
<scope>provided</scope>
<exclusions>
<exclusion>
@@ -204,7 +204,7 @@
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-bom</artifactId>
- <version>3.2.5.RELEASE</version>
+ <version>3.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
=======================================
--- /phiz-web-portal/src/main/deb/control/control Wed Dec 3 17:31:58 2014
UTC
+++ /phiz-web-portal/src/main/deb/control/control Sat Mar 21 04:19:42 2015
UTC
@@ -4,6 +4,6 @@
Priority: optional
Architecture: all
Maintainer: PHIZ Project <phiz-p...@esacinc.com>
-Homepage: [[url]]
+Homepage: http://code.google.com/p/phiz/
Depends: authbind, oracle-java8-installer,
oracle-java8-unlimited-jce-policy
Description: Public Health Immunization Data Exchange (PHIZ) portal web
application Debian package.
=======================================
--- /phiz-web-ws/src/main/deb/control/control Thu Jan 22 06:01:46 2015 UTC
+++ /phiz-web-ws/src/main/deb/control/control Sat Mar 21 04:19:42 2015 UTC
@@ -4,6 +4,6 @@
Priority: optional
Architecture: all
Maintainer: PHIZ Project <phiz-p...@esacinc.com>
-Homepage: [[url]]
+Homepage: http://code.google.com/p/phiz/
Depends: authbind, logrotate, oracle-java8-installer,
oracle-java8-unlimited-jce-policy
Description: Public Health Immunization Data Exchange (PHIZ) web services
web application Debian package.
Reply all
Reply to author
Forward
0 new messages