diff options
Diffstat (limited to 'common')
46 files changed, 684 insertions, 333 deletions
diff --git a/common/pom.xml b/common/pom.xml index 74e51805ad..08f797d7e5 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -135,8 +135,11 @@ </dependency> <dependency> <groupId>org.onap.aaf.authz</groupId> + <artifactId>aaf-cadi-client</artifactId> + </dependency> + <dependency> + <groupId>org.onap.aaf.authz</groupId> <artifactId>aaf-cadi-aaf</artifactId> - <version>${aaf.cadi.version}</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> @@ -149,6 +152,21 @@ </exclusions> </dependency> <dependency> + <groupId>org.onap.aaf.authz</groupId> + <artifactId>aaf-auth-client</artifactId> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.onap.aaf.authz</groupId> + <artifactId>aaf-misc-env</artifactId> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.onap.aaf.authz</groupId> + <artifactId>aaf-misc-rosetta</artifactId> + <scope>runtime</scope> + </dependency> + <dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>0.9.11</version> @@ -293,6 +311,16 @@ <artifactId>jaxb-impl</artifactId> <version>2.3.0</version> </dependency> + <dependency> + <groupId>javax.cache</groupId> + <artifactId>cache-api</artifactId> + <version>1.0.0</version> + </dependency> + <dependency> + <groupId>org.ehcache</groupId> + <artifactId>ehcache</artifactId> + <version>3.8.1</version> + </dependency> </dependencies> <dependencyManagement> <dependencies> @@ -366,4 +394,4 @@ </plugin> </plugins> </build> -</project>
\ No newline at end of file +</project> diff --git a/common/src/main/java/org/onap/so/beans/nsmf/ActDeActNssi.java b/common/src/main/java/org/onap/so/beans/nsmf/ActDeActNssi.java index ed82500210..b14cf7e94d 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/ActDeActNssi.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/ActDeActNssi.java @@ -20,16 +20,19 @@ package org.onap.so.beans.nsmf; +import java.io.Serializable; import java.util.List; import com.fasterxml.jackson.annotation.JsonInclude; @JsonInclude(JsonInclude.Include.NON_NULL) -public class ActDeActNssi { +public class ActDeActNssi implements Serializable { public final static String ACT_URL = "/api/rest/provMns/v1/NSS/%s" + "/activation"; public final static String DE_ACT_URL = "/api/rest/provMns/v1/NSS/%s" + "/deactivation"; + private static final long serialVersionUID = 7597630091910711349L; + private String nsiId; private String nssiId; diff --git a/common/src/main/java/org/onap/so/beans/nsmf/AdditionalProperties.java b/common/src/main/java/org/onap/so/beans/nsmf/AdditionalProperties.java index 5b070bb00f..3b542faf7f 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/AdditionalProperties.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/AdditionalProperties.java @@ -26,11 +26,12 @@ import java.util.List; @JsonInclude(JsonInclude.Include.NON_NULL) @Data +@Deprecated public class AdditionalProperties implements Serializable { private static final long serialVersionUID = -4020397418955518175L; - private SliceProfile sliceProfile; + private TnSliceProfile sliceProfile; private List<EndPoint> endPoints; diff --git a/common/src/main/java/org/onap/so/beans/nsmf/AllocateAnNssi.java b/common/src/main/java/org/onap/so/beans/nsmf/AllocateAnNssi.java index dc8e69121e..f966098b18 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/AllocateAnNssi.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/AllocateAnNssi.java @@ -47,5 +47,5 @@ public class AllocateAnNssi implements Serializable { private NsiInfo nsiInfo; - private Map<String, Object> endPoint; + private EndPoint endPoint; } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/AllocateCnNssi.java b/common/src/main/java/org/onap/so/beans/nsmf/AllocateCnNssi.java index f5b926f627..fdbff2fd42 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/AllocateCnNssi.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/AllocateCnNssi.java @@ -49,5 +49,5 @@ public class AllocateCnNssi implements Serializable { private NsiInfo nsiInfo; - private Map<String, Object> endPoint; + private EndPoint endPoint; } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/AllocateTnNssi.java b/common/src/main/java/org/onap/so/beans/nsmf/AllocateTnNssi.java index f85cb0cd85..1b0986ca0d 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/AllocateTnNssi.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/AllocateTnNssi.java @@ -30,7 +30,13 @@ public class AllocateTnNssi implements Serializable { private static final long serialVersionUID = -7069801712339914746L; + private TnSliceProfile sliceProfile; + private List<NetworkSliceInfo> networkSliceInfos; private List<TransportSliceNetwork> transportSliceNetworks; + + private NsiInfo nsiInfo; + + private String scriptName; } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/AnSliceProfile.java b/common/src/main/java/org/onap/so/beans/nsmf/AnSliceProfile.java index 14918c7873..3d0f70805c 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/AnSliceProfile.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/AnSliceProfile.java @@ -32,7 +32,7 @@ import java.util.List; @ToString public class AnSliceProfile implements Serializable { /* - * Reference 3GPP TS 28.541 V16.5.0, Section 6.3.4. + * Reference 3GPP TS 28.541 V16.5.0. */ private static final long serialVersionUID = -3057342171549542794L; @@ -40,10 +40,10 @@ public class AnSliceProfile implements Serializable { @JsonProperty(value = "sliceProfileId", required = true) private String sliceProfileId; - @JsonProperty(value = "sNSSAIList", required = true) + @JsonProperty(value = "snssaiList", required = true) private List<String> sNSSAIList; - @JsonProperty(value = "pLMNIdList", required = true) + @JsonProperty(value = "plmnIdList", required = true) private List<String> pLMNIdList; @JsonProperty(value = "perfReq", required = true) @@ -51,7 +51,7 @@ public class AnSliceProfile implements Serializable { @JsonInclude(JsonInclude.Include.NON_DEFAULT) @JsonProperty(value = "maxNumberofUEs") - private long maxNumberofUEs; + private int maxNumberOfUEs; @JsonProperty(value = "coverageAreaTAList") private List<Integer> coverageAreaTAList; @@ -61,7 +61,7 @@ public class AnSliceProfile implements Serializable { private int latency; @JsonProperty(value = "uEMobilityLevel") - private UeMobilityLevel uEMobilityLevel; + private UeMobilityLevel ueMobilityLevel; @JsonProperty(value = "resourceSharingLevel") private ResourceSharingLevel resourceSharingLevel; diff --git a/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java b/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java index 1fa84eee59..efb447bc00 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java @@ -32,19 +32,19 @@ public class CnSliceProfile implements Serializable { private static final long serialVersionUID = 6627071735572539536L; - @JsonProperty(value = "sNSSAIList", required = true) + @JsonProperty(value = "snssaiList", required = true) private List<String> snssaiList; private String sliceProfileId; - @JsonProperty(value = "pLMNIdList", required = true) - private List<String> plmnIdList; + @JsonProperty(value = "plmnIdList", required = true) + private List<String> pLMNIdList; @JsonProperty(value = "perfReq", required = true) private PerfReq perfReq; @JsonProperty(value = "maxNumberofUEs") - private int maxNumberofUEs; + private int maxNumberOfUEs; @JsonProperty(value = "coverageAreaTAList") private List<String> coverageAreaTAList; @@ -57,4 +57,8 @@ public class CnSliceProfile implements Serializable { @JsonProperty(value = "resourceSharingLevel") private ResourceSharingLevel resourceSharingLevel; + + @JsonProperty(value = "maxNumberofPDUSession") + private int maxNumberOfPDUSession; + } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/ConnectionLink.java b/common/src/main/java/org/onap/so/beans/nsmf/ConnectionLink.java index 99a8525974..3bf2ffb8eb 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/ConnectionLink.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/ConnectionLink.java @@ -20,33 +20,15 @@ package org.onap.so.beans.nsmf; +import lombok.Data; import java.io.Serializable; - +@Data public class ConnectionLink implements Serializable { + private static final long serialVersionUID = -1834584960407180427L; private String transportEndpointA; private String transportEndpointB; - - public static long getSerialVersionUID() { - return serialVersionUID; - } - - public String getTransportEndpointA() { - return transportEndpointA; - } - - public void setTransportEndpointA(String transportEndpointA) { - this.transportEndpointA = transportEndpointA; - } - - public String getTransportEndpointB() { - return transportEndpointB; - } - - public void setTransportEndpointB(String transportEndpointB) { - this.transportEndpointB = transportEndpointB; - } } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/CustomerInfo.java b/common/src/main/java/org/onap/so/beans/nsmf/CustomerInfo.java new file mode 100644 index 0000000000..6381d5b6e2 --- /dev/null +++ b/common/src/main/java/org/onap/so/beans/nsmf/CustomerInfo.java @@ -0,0 +1,45 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.so.beans.nsmf; + +import lombok.Builder; +import lombok.Data; +import java.io.Serializable; + +@Data +@Builder +public class CustomerInfo implements Serializable { + private static final long serialVersionUID = -8749985097619384358L; + + private String globalSubscriberId; + + private String serviceInstanceId; + + private String subscriptionServiceType; + + private String operationId; + + private OperationType operationType; + + private String nsiId; + + private String snssai; + +} diff --git a/common/src/main/java/org/onap/so/beans/nsmf/EndPoint.java b/common/src/main/java/org/onap/so/beans/nsmf/EndPoint.java index dab9b3a990..90bfc0eae0 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/EndPoint.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/EndPoint.java @@ -20,17 +20,28 @@ package org.onap.so.beans.nsmf; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; import java.io.Serializable; -import java.util.Map; @JsonInclude(JsonInclude.Include.NON_NULL) @Data +@ToString +@NoArgsConstructor +@AllArgsConstructor public class EndPoint implements Serializable { private static final long serialVersionUID = 2479795890807020491L; - private String nodeId; + @JsonProperty(value = "ipAddress") + private String ipAddress; - private Map<String, Object> additionalInfo; + @JsonProperty(value = "logicInterfaceId") + private String logicInterfaceId; + + @JsonProperty(value = "nextHopInfo") + private String nextHopInfo; } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/NSSI.java b/common/src/main/java/org/onap/so/beans/nsmf/NssInstance.java index a57458f2cf..396e8fce45 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/NSSI.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/NssInstance.java @@ -20,7 +20,15 @@ package org.onap.so.beans.nsmf; -public class NSSI { +import lombok.Builder; +import lombok.Data; +import java.io.Serializable; + +@Data +@Builder +public class NssInstance implements Serializable { + + private static final long serialVersionUID = -153484249182203537L; private String nssiId; @@ -28,33 +36,11 @@ public class NSSI { private String modelVersionId; - public NSSI(String nssiId, String modelInvariantId, String modelVersionId) { - this.nssiId = nssiId; - this.modelInvariantId = modelInvariantId; - this.modelVersionId = modelVersionId; - } - - public String getNssiId() { - return nssiId; - } - - public void setNssiId(String nssiId) { - this.nssiId = nssiId; - } - - public String getModelInvariantId() { - return modelInvariantId; - } + private NetworkType networkType; - public void setModelInvariantId(String modelInvariantId) { - this.modelInvariantId = modelInvariantId; - } + private OperationType operationType; - public String getModelVersionId() { - return modelVersionId; - } + private String snssai; - public void setModelVersionId(String modelVersionId) { - this.modelVersionId = modelVersionId; - } + private String serviceType; } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/NssiResponse.java b/common/src/main/java/org/onap/so/beans/nsmf/NssiResponse.java index 92acdaa90d..270a55e349 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/NssiResponse.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/NssiResponse.java @@ -21,9 +21,11 @@ package org.onap.so.beans.nsmf; import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; import java.io.Serializable; @JsonInclude(JsonInclude.Include.NON_NULL) +@Data public class NssiResponse implements Serializable { private static final long serialVersionUID = 2723440188640857903L; @@ -32,19 +34,5 @@ public class NssiResponse implements Serializable { private String jobId; - public String getNssiId() { - return nssiId; - } - - public void setNssiId(String nssiId) { - this.nssiId = nssiId; - } - - public String getJobId() { - return jobId; - } - - public void setJobId(String jobId) { - this.jobId = jobId; - } + private String status; } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/NssmfRequest.java b/common/src/main/java/org/onap/so/beans/nsmf/NssmfRequest.java index 3292730f29..356c1cb4de 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/NssmfRequest.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/NssmfRequest.java @@ -37,7 +37,7 @@ public class NssmfRequest implements Serializable { private String globalSubscriberId; - private String serviceInstanceId; + private String serviceInstanceID; private String subscriptionServiceType; @@ -54,7 +54,7 @@ public class NssmfRequest implements Serializable { this.subscriptionServiceType = serviceInfo.getSubscriptionServiceType(); this.networkType = networkType; this.additionalProperties = additionalProperties; - this.serviceInstanceId = serviceInfo.getNssiId(); + this.serviceInstanceID = serviceInfo.getNssiId(); this.name = serviceInfo.getNssiName(); } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/OperationType.java b/common/src/main/java/org/onap/so/beans/nsmf/OperationType.java new file mode 100644 index 0000000000..1ee56b5ca0 --- /dev/null +++ b/common/src/main/java/org/onap/so/beans/nsmf/OperationType.java @@ -0,0 +1,59 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.beans.nsmf; + +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +public enum OperationType { + /** + * allocate + */ + ALLOCATE("allocate"), + + DEALLOCATE("deallocate"), + + CREATE("create"), + + TERMINATE("terminate"), + + ACTIVATE("activation"), + + DEACTIVATE("deactivation"); + + private String type; + + + OperationType(String type) { + this.type = type; + } + + public static OperationType getOperationType(String value) { + for (OperationType operationType : OperationType.values()) { + if (operationType.type.equalsIgnoreCase(value)) { + return operationType; + } + } + return null; + } +} diff --git a/common/src/main/java/org/onap/so/beans/nsmf/OrchestrationStatusEnum.java b/common/src/main/java/org/onap/so/beans/nsmf/OrchestrationStatusEnum.java new file mode 100644 index 0000000000..572a312265 --- /dev/null +++ b/common/src/main/java/org/onap/so/beans/nsmf/OrchestrationStatusEnum.java @@ -0,0 +1,36 @@ +package org.onap.so.beans.nsmf; + +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +public enum OrchestrationStatusEnum { + /** + * activated + */ + ACTIVATED("activated"), + + /** + * deactivated + */ + DEACTIVATED("deactivated"), + + ; + + private String value; + + + OrchestrationStatusEnum(String value) { + this.value = value; + } + + public static OrchestrationStatusEnum getStatus(String value) { + for (OrchestrationStatusEnum orchestrationStatus : OrchestrationStatusEnum.values()) { + if (orchestrationStatus.value.equalsIgnoreCase(value)) { + return orchestrationStatus; + } + } + return null; + } +} diff --git a/common/src/main/java/org/onap/so/beans/nsmf/PerfReqUrllc.java b/common/src/main/java/org/onap/so/beans/nsmf/PerfReqUrllc.java index 9e4b4edce3..06f97a8484 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/PerfReqUrllc.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/PerfReqUrllc.java @@ -21,118 +21,31 @@ package org.onap.so.beans.nsmf; import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; import java.io.Serializable; @JsonInclude(JsonInclude.Include.NON_NULL) +@Data public class PerfReqUrllc implements Serializable { private static final long serialVersionUID = 3133479142915485943L; @JsonInclude(JsonInclude.Include.NON_DEFAULT) - private int e2eLatency; + private String survivalTime; @JsonInclude(JsonInclude.Include.NON_DEFAULT) - private int jitter; - - @JsonInclude(JsonInclude.Include.NON_DEFAULT) - private int survivalTime; - - @JsonInclude(JsonInclude.Include.NON_DEFAULT) - private float csAvailability; + private int expDataRate; @JsonInclude(JsonInclude.Include.NON_DEFAULT) - private float reliability; + private String transferIntervalTarget; @JsonInclude(JsonInclude.Include.NON_DEFAULT) - private int expDataRate; - - private String payloadSize; + private String msgSizeByte; @JsonInclude(JsonInclude.Include.NON_DEFAULT) - private int trafficDensity; + private String csReliabilityMeanTime; @JsonInclude(JsonInclude.Include.NON_DEFAULT) - private int connDensity; - - private String serviceAreaDimension; - - public int getE2eLatency() { - return e2eLatency; - } - - public void setE2eLatency(int e2eLatency) { - this.e2eLatency = e2eLatency; - } - - public int getJitter() { - return jitter; - } - - public void setJitter(int jitter) { - this.jitter = jitter; - } - - public int getSurvivalTime() { - return survivalTime; - } - - public void setSurvivalTime(int survivalTime) { - this.survivalTime = survivalTime; - } - - public float getReliability() { - return reliability; - } - - public void setReliability(float reliability) { - this.reliability = reliability; - } - - public int getExpDataRate() { - return expDataRate; - } - - public void setExpDataRate(int expDataRate) { - this.expDataRate = expDataRate; - } - - public String getPayloadSize() { - return payloadSize; - } - - public void setPayloadSize(String payloadSize) { - this.payloadSize = payloadSize; - } - - public int getTrafficDensity() { - return trafficDensity; - } - - public void setTrafficDensity(int trafficDensity) { - this.trafficDensity = trafficDensity; - } - - public int getConnDensity() { - return connDensity; - } - - public void setConnDensity(int connDensity) { - this.connDensity = connDensity; - } - - public String getServiceAreaDimension() { - return serviceAreaDimension; - } - - public void setServiceAreaDimension(String serviceAreaDimension) { - this.serviceAreaDimension = serviceAreaDimension; - } - - public float getCsAvailability() { - return csAvailability; - } + private float csAvailabilityTarget; - public void setCsAvailability(float csAvailability) { - this.csAvailability = csAvailability; - } } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/PnfErrorList.java b/common/src/main/java/org/onap/so/beans/nsmf/PnfErrorList.java index 66bfbdcea9..4fc593268a 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/PnfErrorList.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/PnfErrorList.java @@ -21,9 +21,12 @@ package org.onap.so.beans.nsmf; import com.fasterxml.jackson.annotation.JsonInclude; +import java.io.Serializable; @JsonInclude(JsonInclude.Include.NON_NULL) -public class PnfErrorList { +public class PnfErrorList implements Serializable { + + private static final long serialVersionUID = 1506455363755909867L; private String pnfId; diff --git a/common/src/main/java/org/onap/so/beans/nsmf/QuerySubnetCapability.java b/common/src/main/java/org/onap/so/beans/nsmf/QuerySubnetCapability.java index 7485b387d8..6b30af9339 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/QuerySubnetCapability.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/QuerySubnetCapability.java @@ -2,19 +2,19 @@ * ============LICENSE_START======================================================= * ONAP - SO * ================================================================================ - * Copyright (C) 2020 Wipro Limited. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + # Copyright (c) 2020, CMCC Technologies Co., Ltd. + # + # Licensed under the Apache License, Version 2.0 (the "License") + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. * ============LICENSE_END========================================================= */ diff --git a/common/src/main/java/org/onap/so/beans/nsmf/ResponseDescriptor.java b/common/src/main/java/org/onap/so/beans/nsmf/ResponseDescriptor.java index 2456d540ce..ab9399eec9 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/ResponseDescriptor.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/ResponseDescriptor.java @@ -31,7 +31,6 @@ public class ResponseDescriptor implements Serializable { private static final long serialVersionUID = 6330527958947215910L; - @JsonInclude(JsonInclude.Include.NON_DEFAULT) private int progress; private String status; @@ -50,5 +49,4 @@ public class ResponseDescriptor implements Serializable { private String nssiId; - private String endPointId; } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/ResponseHistory.java b/common/src/main/java/org/onap/so/beans/nsmf/ResponseHistory.java index c71441a80a..ee027bca13 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/ResponseHistory.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/ResponseHistory.java @@ -21,10 +21,13 @@ package org.onap.so.beans.nsmf; import com.fasterxml.jackson.annotation.JsonInclude; +import java.io.Serializable; import java.util.List; @JsonInclude(JsonInclude.Include.NON_NULL) -public class ResponseHistory { +public class ResponseHistory implements Serializable { + + private static final long serialVersionUID = -1005342539496792450L; private int progress; diff --git a/common/src/main/java/org/onap/so/beans/nsmf/ServiceInfo.java b/common/src/main/java/org/onap/so/beans/nsmf/ServiceInfo.java index f9848fca31..5146685058 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/ServiceInfo.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/ServiceInfo.java @@ -20,11 +20,17 @@ package org.onap.so.beans.nsmf; import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.io.Serializable; @JsonInclude(JsonInclude.Include.NON_NULL) @Data +@Builder +@NoArgsConstructor +@AllArgsConstructor public class ServiceInfo implements Serializable { private static final long serialVersionUID = 7895110339097615695L; diff --git a/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java b/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java index 9b6df0fa9e..90cee2794a 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java @@ -25,7 +25,9 @@ import lombok.Data; import lombok.ToString; import org.springframework.beans.BeanUtils; import java.io.Serializable; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; @Data @ToString @@ -43,7 +45,7 @@ public class SliceProfileAdapter implements Serializable { private String pLMNIdList = ""; @JsonProperty(value = "maxNumberofUEs") - private long maxNumberofUEs; + private int maxNumberOfUEs; @JsonProperty(value = "coverageAreaTAList") private String coverageAreaTAList = ""; @@ -52,23 +54,68 @@ public class SliceProfileAdapter implements Serializable { private int latency; @JsonProperty(value = "uEMobilityLevel") - private String uEMobilityLevel; + private String ueMobilityLevel; @JsonProperty(value = "resourceSharingLevel") private String resourceSharingLevel; @JsonProperty(value = "maxBandwidth") - private String bandwidth; + private int maxBandwidth; @JsonProperty(value = "sST") private String sST; @JsonProperty(value = "activityFactor") - private String activityFactor; + private int activityFactor; @JsonProperty(value = "survivalTime") private String survivalTime; + @JsonProperty(value = "expDataRateUL") + private int expDataRateUL; + + @JsonProperty(value = "expDataRateDL") + private int expDataRateDL; + + @JsonProperty(value = "areaTrafficCapUL") + private int areaTrafficCapUL; + + @JsonProperty(value = "areaTrafficCapDL") + private int areaTrafficCapDL; + + @JsonProperty(value = "jitter") + private int jitter; + + @JsonProperty(value = "csAvailabilityTarget") + private float csAvailabilityTarget; + + @JsonProperty(value = "expDataRate") + private int expDataRate; + + @JsonProperty(value = "maxNumberofPDUSession") + private int maxNumberOfPDUSession; + + @JsonProperty(value = "overallUserDensity") + private int overallUserDensity; + + @JsonProperty(value = "cSReliabilityMeanTime") + private String csReliabilityMeanTime; + + @JsonProperty(value = "msgSizeByte") + private String msgSizeByte; + + @JsonProperty(value = "transferIntervalTarget") + private String transferIntervalTarget; + + @JsonProperty(value = "ipAddress") + private String ipAddress; + + @JsonProperty(value = "logicInterfaceId") + private String logicInterfaceId; + + @JsonProperty(value = "nextHopInfo") + private String nextHopInfo; + public AnSliceProfile trans2AnProfile() { AnSliceProfile anSliceProfile = new AnSliceProfile(); BeanUtils.copyProperties(this, anSliceProfile); @@ -81,11 +128,11 @@ public class SliceProfileAdapter implements Serializable { areasRes[i] = str2Code(areas[i]); } anSliceProfile.setCoverageAreaTAList(Arrays.asList(areasRes)); - anSliceProfile.setUEMobilityLevel(UeMobilityLevel.fromString(this.uEMobilityLevel)); + + anSliceProfile.setUeMobilityLevel(UeMobilityLevel.fromString(this.ueMobilityLevel)); anSliceProfile.setResourceSharingLevel(ResourceSharingLevel.fromString(this.resourceSharingLevel)); - PerfReq perfReq = new PerfReq(); - // todo - anSliceProfile.setPerfReq(perfReq); + anSliceProfile.setPerfReq(generatePerfReq()); + return anSliceProfile; } @@ -98,14 +145,31 @@ public class SliceProfileAdapter implements Serializable { BeanUtils.copyProperties(this, cnSliceProfile); cnSliceProfile.setSnssaiList(Arrays.asList(this.sNSSAIList.split("\\|"))); cnSliceProfile.setCoverageAreaTAList(Arrays.asList(this.coverageAreaTAList.split("\\|"))); - cnSliceProfile.setPlmnIdList(Arrays.asList(this.pLMNIdList.split("\\|"))); + cnSliceProfile.setPLMNIdList(Arrays.asList(this.pLMNIdList.split("\\|"))); cnSliceProfile.setResourceSharingLevel(ResourceSharingLevel.fromString(this.resourceSharingLevel)); - PerfReq perfReq = new PerfReq(); - // todo - cnSliceProfile.setPerfReq(perfReq); + + cnSliceProfile.setPerfReq(generatePerfReq()); return cnSliceProfile; } + private PerfReq generatePerfReq() { + PerfReq perfReq = new PerfReq(); + if ("embb".equalsIgnoreCase(sST)) { + List<PerfReqEmbb> perfReqEmbbs = new ArrayList<>(); + PerfReqEmbb perfReqEmbb = new PerfReqEmbb(); + BeanUtils.copyProperties(this, perfReqEmbb); + perfReqEmbbs.add(perfReqEmbb); + perfReq.setPerfReqEmbbList(perfReqEmbbs); + } else if ("ullc".equalsIgnoreCase(sST)) { + List<PerfReqUrllc> perfReqUrllcs = new ArrayList<>(); + PerfReqUrllc perfReqUrllc = new PerfReqUrllc(); + BeanUtils.copyProperties(this, perfReqUrllc); + perfReqUrllcs.add(perfReqUrllc); + perfReq.setPerfReqUrllcList(perfReqUrllcs); + } + return perfReq; + } + public TnSliceProfile trans2TnProfile() { TnSliceProfile tnSliceProfile = new TnSliceProfile(); BeanUtils.copyProperties(this, tnSliceProfile); diff --git a/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskInfo.java b/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskInfo.java index 9b6406d57f..18d6007176 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskInfo.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/SliceTaskInfo.java @@ -52,4 +52,6 @@ public class SliceTaskInfo<T> implements Serializable { private SubnetType subnetType; + private String endPointId; + } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java b/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java index 3f0da1bf21..f904e1c466 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java @@ -35,14 +35,17 @@ public class TnSliceProfile implements Serializable { private String sliceProfileId; @JsonProperty(value = "maxBandwidth") - private String bandwidth; + private int maxBandwidth; @JsonInclude(JsonInclude.Include.NON_DEFAULT) private int latency; - @JsonProperty(value = "sNSSAIList", required = true) + @JsonProperty(value = "snssaiList", required = true) private List<String> sNSSAIList; - @JsonProperty(value = "pLMNIdList", required = true) + @JsonProperty(value = "plmnIdList", required = true) private List<String> pLMNIdList; + + @JsonProperty(value = "jitter") + private int jitter; } diff --git a/common/src/main/java/org/onap/so/beans/nsmf/TransportSliceNetwork.java b/common/src/main/java/org/onap/so/beans/nsmf/TransportSliceNetwork.java index aa2579edf8..c0dd4250b8 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/TransportSliceNetwork.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/TransportSliceNetwork.java @@ -25,6 +25,7 @@ import java.util.List; @Data public class TransportSliceNetwork implements Serializable { + private static final long serialVersionUID = 809947462399806990L; private List<ConnectionLink> connectionLinks; diff --git a/common/src/main/java/org/onap/so/beans/nsmf/VnfErrorList.java b/common/src/main/java/org/onap/so/beans/nsmf/VnfErrorList.java index 6388ca6106..a3330e67b4 100644 --- a/common/src/main/java/org/onap/so/beans/nsmf/VnfErrorList.java +++ b/common/src/main/java/org/onap/so/beans/nsmf/VnfErrorList.java @@ -21,9 +21,12 @@ package org.onap.so.beans.nsmf; import com.fasterxml.jackson.annotation.JsonInclude; +import java.io.Serializable; @JsonInclude(JsonInclude.Include.NON_NULL) -public class VnfErrorList { +public class VnfErrorList implements Serializable { + + private static final long serialVersionUID = -2907819676875489281L; private String vnfInstanceId; diff --git a/common/src/main/java/org/onap/so/client/AddCacheHeaders.java b/common/src/main/java/org/onap/so/client/AddCacheHeaders.java new file mode 100644 index 0000000000..1a41be1233 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/AddCacheHeaders.java @@ -0,0 +1,28 @@ +package org.onap.so.client; + +import java.io.IOException; +import java.util.Collections; +import javax.annotation.Priority; +import javax.ws.rs.client.ClientRequestContext; +import javax.ws.rs.client.ClientResponseContext; +import javax.ws.rs.client.ClientResponseFilter; +import javax.ws.rs.ext.Provider; + +@Provider +@Priority(1) +public class AddCacheHeaders implements ClientResponseFilter { + + private final CacheProperties props; + + public AddCacheHeaders(CacheProperties props) { + this.props = props; + } + + public void filter(ClientRequestContext request, ClientResponseContext response) throws IOException { + if (request.getMethod().equalsIgnoreCase("GET")) { + response.getHeaders().putIfAbsent("Cache-Control", + Collections.singletonList("public, max-age=" + (props.getMaxAge() / 1000))); + } + + } +} diff --git a/common/src/main/java/org/onap/so/client/CacheFactory.java b/common/src/main/java/org/onap/so/client/CacheFactory.java new file mode 100644 index 0000000000..6bc4858463 --- /dev/null +++ b/common/src/main/java/org/onap/so/client/CacheFactory.java @@ -0,0 +1,25 @@ +package org.onap.so.client; + + +import java.util.concurrent.TimeUnit; +import javax.cache.configuration.Factory; +import javax.cache.expiry.Duration; +import javax.cache.expiry.ExpiryPolicy; +import javax.cache.expiry.TouchedExpiryPolicy; + +public class CacheFactory implements Factory<ExpiryPolicy> { + + private static final long serialVersionUID = 8948728679233836929L; + + private final CacheProperties props; + + public CacheFactory(CacheProperties props) { + this.props = props; + } + + @Override + public ExpiryPolicy create() { + return TouchedExpiryPolicy.factoryOf(new Duration(TimeUnit.MILLISECONDS, props.getMaxAge())).create(); + } + +} diff --git a/common/src/main/java/org/onap/so/client/CacheProperties.java b/common/src/main/java/org/onap/so/client/CacheProperties.java new file mode 100644 index 0000000000..4fb2a87a5b --- /dev/null +++ b/common/src/main/java/org/onap/so/client/CacheProperties.java @@ -0,0 +1,13 @@ +package org.onap.so.client; + +public interface CacheProperties { + + + default Long getMaxAge() { + return 60000L; + } + + default String getCacheName() { + return "default-http-cache"; + } +} diff --git a/common/src/main/java/org/onap/so/client/HttpClient.java b/common/src/main/java/org/onap/so/client/HttpClient.java index eaeb0ab6c6..0420ab2373 100644 --- a/common/src/main/java/org/onap/so/client/HttpClient.java +++ b/common/src/main/java/org/onap/so/client/HttpClient.java @@ -20,10 +20,11 @@ package org.onap.so.client; +import static org.apache.commons.lang3.StringUtils.isNotBlank; import java.net.URL; -import java.util.Map; import java.util.Optional; -import static org.apache.commons.lang3.StringUtils.*; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; import org.onap.logging.filter.base.ONAPComponentsList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,7 +50,7 @@ public class HttpClient extends RestClient { } @Override - protected void initializeHeaderMap(Map<String, String> headerMap) {} + protected void initializeHeaderMap(MultivaluedMap<String, Pair<String, String>> headerMap) {} @Override protected Optional<ResponseExceptionMapper> addResponseExceptionMapper() { @@ -79,7 +80,7 @@ public class HttpClient extends RestClient { public void addAdditionalHeader(String name, String value) { try { if (isNotBlank(name) && isNotBlank(value)) { - headerMap.put(name, value); + headerMap.add("ALL", Pair.with(name, value)); } else { log.warn("Not adding " + name + " to headers."); } diff --git a/common/src/main/java/org/onap/so/client/RestClient.java b/common/src/main/java/org/onap/so/client/RestClient.java index ece1333f83..d1b4c2b900 100644 --- a/common/src/main/java/org/onap/so/client/RestClient.java +++ b/common/src/main/java/org/onap/so/client/RestClient.java @@ -29,21 +29,23 @@ import java.security.GeneralSecurityException; import java.time.Duration; import java.util.ArrayList; import java.util.Base64; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Map.Entry; import java.util.Optional; +import java.util.concurrent.TimeUnit; import java.util.function.Predicate; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Invocation.Builder; +import javax.ws.rs.client.ResponseProcessingException; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriBuilder; +import org.javatuples.Pair; import org.onap.logging.filter.base.MDCSetup; import org.onap.logging.filter.base.ONAPComponentsList; import org.onap.logging.filter.base.PayloadLoggingClientFilter; @@ -65,7 +67,7 @@ public abstract class RestClient { private static final int MAX_PAYLOAD_SIZE = 1024 * 1024; private WebTarget webTarget; - protected final Map<String, String> headerMap; + protected final MultivaluedMap<String, Pair<String, String>> headerMap; protected final Logger logger = LoggerFactory.getLogger(RestClient.class); protected URL host; protected Optional<URI> path; @@ -78,7 +80,7 @@ public abstract class RestClient { protected RestClient(RestProperties props, Optional<URI> path) { - headerMap = new HashMap<>(); + headerMap = new MultivaluedHashMap<>(); try { host = props.getEndpoint(); } catch (MalformedURLException e) { @@ -97,7 +99,7 @@ public abstract class RestClient { } protected RestClient(URL host, String contentType) { - headerMap = new HashMap<>(); + headerMap = new MultivaluedHashMap<>(); this.path = Optional.empty(); this.host = host; this.contentType = contentType; @@ -105,7 +107,7 @@ public abstract class RestClient { } protected RestClient(URL host, String acceptType, String contentType) { - headerMap = new HashMap<>(); + headerMap = new MultivaluedHashMap<>(); this.path = Optional.empty(); this.host = host; this.accept = acceptType; @@ -131,15 +133,23 @@ public abstract class RestClient { return MAX_PAYLOAD_SIZE; } - protected Builder getBuilder() { + protected Builder getBuilder(String method) { if (webTarget == null) { initializeClient(getClient()); } Builder builder = webTarget.request(); initializeHeaderMap(headerMap); - for (Entry<String, String> entry : headerMap.entrySet()) { - builder.header(entry.getKey(), entry.getValue()); + if (headerMap.containsKey("ALL")) { + for (Pair<String, String> pair : headerMap.get("ALL")) { + builder.header(pair.getValue0(), pair.getValue1()); + } + } + + if (headerMap.containsKey(method)) { + for (Pair<String, String> pair : headerMap.get(method)) { + builder.header(pair.getValue0(), pair.getValue1()); + } } return builder; } @@ -148,7 +158,7 @@ public abstract class RestClient { return this.webTarget; } - protected abstract void initializeHeaderMap(Map<String, String> headerMap); + protected abstract void initializeHeaderMap(MultivaluedMap<String, Pair<String, String>> headerMap); protected Optional<ResponseExceptionMapper> addResponseExceptionMapper() { return Optional.of(new ResponseExceptionMapperImpl()); @@ -168,7 +178,7 @@ public abstract class RestClient { try { byte[] decryptedAuth = CryptoUtils.decrypt(auth, key).getBytes(); String authHeaderValue = "Basic " + Base64.getEncoder().encodeToString(decryptedAuth); - headerMap.put("Authorization", authHeaderValue); + headerMap.add("ALL", Pair.with("Authorization", authHeaderValue)); } catch (GeneralSecurityException e) { logger.error(e.getMessage(), e); } @@ -186,8 +196,21 @@ public abstract class RestClient { return APPLICATION_MERGE_PATCH_JSON; } + protected ClientBuilder getClientBuilder() { + ClientBuilder builder = ClientBuilder.newBuilder(); + if (props.isCachingEnabled()) { + enableCaching(builder); + } + return builder.connectTimeout(props.getConnectionTimeout(), TimeUnit.MILLISECONDS) + .readTimeout(props.getReadTimeout(), TimeUnit.MILLISECONDS); + } + + protected ClientBuilder enableCaching(ClientBuilder builder) { + return builder; + } + protected Client getClient() { - return ClientBuilder.newBuilder().build(); + return getClientBuilder().build(); } protected abstract ONAPComponentsList getTargetEntity(); @@ -201,7 +224,6 @@ public abstract class RestClient { metricLogClientFilter = new SOMetricLogClientFilter(); mdcSetup.setTargetEntity(getTargetEntity()); client.register(metricLogClientFilter); - if (!path.isPresent()) { webTarget = client.target(host.toString()); } else { @@ -225,6 +247,9 @@ public abstract class RestClient { result.add(e -> { return e.getCause() instanceof ConnectException; }); + result.add(e -> { + return e.getCause() instanceof ResponseProcessingException; + }); return result; } diff --git a/common/src/main/java/org/onap/so/client/RestClientSSL.java b/common/src/main/java/org/onap/so/client/RestClientSSL.java index 1e8953892e..c6252e4652 100644 --- a/common/src/main/java/org/onap/so/client/RestClientSSL.java +++ b/common/src/main/java/org/onap/so/client/RestClientSSL.java @@ -56,7 +56,7 @@ public abstract class RestClientSSL extends RestClient { } } // Use default SSL context - client = ClientBuilder.newBuilder().sslContext(SSLContext.getDefault()).build(); + client = getClientBuilder().sslContext(SSLContext.getDefault()).build(); logger.info("RestClientSSL using default SSL context!"); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); diff --git a/common/src/main/java/org/onap/so/client/RestProperties.java b/common/src/main/java/org/onap/so/client/RestProperties.java index 9e4e99cb4e..d1cf77b047 100644 --- a/common/src/main/java/org/onap/so/client/RestProperties.java +++ b/common/src/main/java/org/onap/so/client/RestProperties.java @@ -22,6 +22,9 @@ package org.onap.so.client; import java.net.MalformedURLException; import java.net.URL; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; public interface RestProperties { @@ -40,4 +43,34 @@ public interface RestProperties { public default boolean mapNotFoundToEmpty() { return false; } + + /** + * Time in milliseconds + * + * @return + */ + public default Long getReadTimeout() { + return Long.valueOf(60000); + } + + /** + * Time in milliseconds + * + * @return + */ + public default Long getConnectionTimeout() { + return Long.valueOf(60000); + } + + public default boolean isCachingEnabled() { + return false; + } + + public default CacheProperties getCacheProperties() { + return new CacheProperties() {}; + } + + public default MultivaluedMap<String, Pair<String, String>> additionalHeaders() { + return new MultivaluedHashMap<>(); + } } diff --git a/common/src/main/java/org/onap/so/client/RestPropertiesLoader.java b/common/src/main/java/org/onap/so/client/RestPropertiesLoader.java index efb50cf04b..952c8de7de 100644 --- a/common/src/main/java/org/onap/so/client/RestPropertiesLoader.java +++ b/common/src/main/java/org/onap/so/client/RestPropertiesLoader.java @@ -62,9 +62,9 @@ public class RestPropertiesLoader { if (clazz.isAssignableFrom(item.getClass())) { try { if (forceNewInstance) { - result = (T) item.getClass().newInstance(); + return (T) item.getClass().newInstance(); } else { - result = (T) item; + return (T) item; } } catch (InstantiationException | IllegalAccessException e) { /* diff --git a/common/src/main/java/org/onap/so/client/RestRequest.java b/common/src/main/java/org/onap/so/client/RestRequest.java index 9e6e818171..0a1be758c9 100644 --- a/common/src/main/java/org/onap/so/client/RestRequest.java +++ b/common/src/main/java/org/onap/so/client/RestRequest.java @@ -49,23 +49,23 @@ public class RestRequest implements CheckedSupplier<Response> { public Response get() throws Exception { final Response response; if ("GET".equals(method)) { - response = this.client.getBuilder().accept(this.client.getAccept()).get(); + response = this.client.getBuilder(method).accept(this.client.getAccept()).get(); } else if ("POST".equals(method)) { - response = this.client.getBuilder().accept(this.client.getAccept()) + response = this.client.getBuilder(method).accept(this.client.getAccept()) .post(Entity.entity(entity, this.client.getContentType())); } else if ("PATCH".equals(method)) { - response = this.client.getBuilder().header("X-HTTP-Method-Override", "PATCH") + response = this.client.getBuilder(method).header("X-HTTP-Method-Override", "PATCH") .accept(this.client.getAccept()).post(Entity.entity(entity, this.client.getMergeContentType())); } else if ("DELETE".equals(method)) { if (entity == null) { - response = this.client.getBuilder().accept(this.client.getAccept()).delete(); + response = this.client.getBuilder(method).accept(this.client.getAccept()).delete(); } else { - response = this.client.getBuilder().accept(this.client.getAccept()) + response = this.client.getBuilder(method).accept(this.client.getAccept()) .build(HttpMethod.DELETE, Entity.entity(entity, this.client.getContentType())).invoke(); } } else if ("PUT".equals(method)) { - response = this.client.getBuilder().accept(this.client.getAccept()) + response = this.client.getBuilder(method).accept(this.client.getAccept()) .put(Entity.entity(entity, this.client.getContentType())); } else { response = Response.serverError().entity(method + " not valid").build(); diff --git a/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java b/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java index 88899a7097..3bac3dc210 100644 --- a/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java +++ b/common/src/main/java/org/onap/so/client/adapter/rest/AdapterRestClient.java @@ -22,14 +22,15 @@ package org.onap.so.client.adapter.rest; import java.net.URI; import java.security.GeneralSecurityException; -import java.util.Map; import java.util.Optional; +import javax.ws.rs.core.MultivaluedMap; import org.apache.commons.codec.binary.Base64; +import org.javatuples.Pair; +import org.onap.logging.filter.base.ONAPComponents; import org.onap.so.client.RestClient; import org.onap.so.client.policy.CommonObjectMapperProvider; import org.onap.so.client.policy.JettisonStyleMapperProvider; import org.onap.so.utils.CryptoUtils; -import org.onap.logging.filter.base.ONAPComponents; public class AdapterRestClient extends RestClient { @@ -51,9 +52,9 @@ public class AdapterRestClient extends RestClient { } @Override - protected void initializeHeaderMap(Map<String, String> headerMap) { - headerMap.put("Authorization", - this.getBasicAuth(adapterRestProperties.getAuth(), adapterRestProperties.getKey())); + protected void initializeHeaderMap(MultivaluedMap<String, Pair<String, String>> headerMap) { + headerMap.add("ALL", Pair.with("Authorization", + this.getBasicAuth(adapterRestProperties.getAuth(), adapterRestProperties.getKey()))); } @Override diff --git a/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java b/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java index e0c8d4ba80..85417e09d4 100644 --- a/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java +++ b/common/src/main/java/org/onap/so/client/dmaap/rest/DMaaPRestClient.java @@ -21,8 +21,10 @@ package org.onap.so.client.dmaap.rest; import java.net.URL; -import java.util.Map; import java.util.UUID; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; +import org.onap.logging.filter.base.ONAPComponents; import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.onap.so.client.RestClient; import org.onap.logging.filter.base.ONAPComponents; @@ -46,14 +48,15 @@ public class DMaaPRestClient extends RestClient { } @Override - protected void initializeHeaderMap(Map<String, String> headerMap) { + protected void initializeHeaderMap(MultivaluedMap<String, Pair<String, String>> headerMap) { if (auth != null && !auth.isEmpty() && key != null && !key.isEmpty()) { addBasicAuthHeader(auth, key); } String onapRequestId = UUID.randomUUID().toString(); - headerMap.put(ONAPLogConstants.Headers.REQUEST_ID, onapRequestId); + headerMap.add("ALL", Pair.with(ONAPLogConstants.Headers.REQUEST_ID, onapRequestId)); if (MDC.get(ONAPLogConstants.MDCs.REQUEST_ID) != null) { - headerMap.put(ONAPLogConstants.Headers.INVOCATION_ID, MDC.get(ONAPLogConstants.MDCs.REQUEST_ID)); + headerMap.add("ALL", + Pair.with(ONAPLogConstants.Headers.INVOCATION_ID, MDC.get(ONAPLogConstants.MDCs.REQUEST_ID))); } } } diff --git a/common/src/main/java/org/onap/so/client/grm/GRMRestClient.java b/common/src/main/java/org/onap/so/client/grm/GRMRestClient.java index 147f688ea8..cf73a57535 100644 --- a/common/src/main/java/org/onap/so/client/grm/GRMRestClient.java +++ b/common/src/main/java/org/onap/so/client/grm/GRMRestClient.java @@ -22,10 +22,11 @@ package org.onap.so.client.grm; import java.net.URI; -import java.util.Map; import java.util.Optional; -import org.onap.so.client.RestClient; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; import org.onap.logging.filter.base.ONAPComponents; +import org.onap.so.client.RestClient; public class GRMRestClient extends RestClient { @@ -42,7 +43,7 @@ public class GRMRestClient extends RestClient { } @Override - protected void initializeHeaderMap(Map<String, String> headerMap) { + protected void initializeHeaderMap(MultivaluedMap<String, Pair<String, String>> headerMap) { String auth = properties.getAuth(); String key = properties.getKey(); diff --git a/common/src/main/java/org/onap/so/client/policy/PolicyRestClient.java b/common/src/main/java/org/onap/so/client/policy/PolicyRestClient.java index 33ece07e3d..f657c17c68 100644 --- a/common/src/main/java/org/onap/so/client/policy/PolicyRestClient.java +++ b/common/src/main/java/org/onap/so/client/policy/PolicyRestClient.java @@ -21,12 +21,13 @@ package org.onap.so.client.policy; -import java.util.Map; import java.util.Optional; +import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriBuilder; +import org.javatuples.Pair; +import org.onap.logging.filter.base.ONAPComponents; import org.onap.so.client.RestClient; import org.onap.so.client.policy.entities.PolicyServiceType; -import org.onap.logging.filter.base.ONAPComponents; public class PolicyRestClient extends RestClient { @@ -43,10 +44,10 @@ public class PolicyRestClient extends RestClient { } @Override - protected void initializeHeaderMap(Map<String, String> headerMap) { - headerMap.put("ClientAuth", properties.getClientAuth()); - headerMap.put("Authorization", properties.getAuth()); - headerMap.put("Environment", properties.getEnvironment()); + protected void initializeHeaderMap(MultivaluedMap<String, Pair<String, String>> headerMap) { + headerMap.add("ALL", Pair.with("ClientAuth", properties.getClientAuth())); + headerMap.add("ALL", Pair.with("Authorization", properties.getAuth())); + headerMap.add("ALL", Pair.with("Environment", properties.getEnvironment())); } } diff --git a/common/src/main/java/org/onap/so/security/SoCadiFilter.java b/common/src/main/java/org/onap/so/security/SoCadiFilter.java index 2763d6ee15..1660220dc1 100644 --- a/common/src/main/java/org/onap/so/security/SoCadiFilter.java +++ b/common/src/main/java/org/onap/so/security/SoCadiFilter.java @@ -22,6 +22,7 @@ */ package org.onap.so.security; +import javax.annotation.Priority; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import org.onap.aaf.cadi.config.Config; @@ -34,6 +35,8 @@ import org.springframework.stereotype.Component; @Component @Profile("!test & aaf") +// Run right before default priority of 0 to block requests +@Priority(-1) public class SoCadiFilter extends CadiFilter { protected final Logger logger = LoggerFactory.getLogger(SoCadiFilter.class); diff --git a/common/src/test/java/org/onap/so/client/RestClientTest.java b/common/src/test/java/org/onap/so/client/RestClientTest.java index cd00a9e4de..3bf4ccf127 100644 --- a/common/src/test/java/org/onap/so/client/RestClientTest.java +++ b/common/src/test/java/org/onap/so/client/RestClientTest.java @@ -21,6 +21,8 @@ package org.onap.so.client; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.get; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.spy; @@ -28,30 +30,42 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import java.net.MalformedURLException; import java.net.SocketTimeoutException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.Optional; import javax.ws.rs.NotFoundException; +import javax.ws.rs.ProcessingException; import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriBuilderException; +import org.javatuples.Pair; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.ArgumentMatchers; -import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.onap.logging.filter.base.ONAPComponents; +import org.onap.logging.filter.base.ONAPComponentsList; +import com.github.tomakehurst.wiremock.core.WireMockConfiguration; +import com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer; +import com.github.tomakehurst.wiremock.junit.WireMockRule; @RunWith(MockitoJUnitRunner.class) public class RestClientTest { private final HttpClientFactory httpClientFactory = new HttpClientFactory(); - @Mock - private RestProperties props; @Rule public ExpectedException thrown = ExpectedException.none(); + @Rule + public WireMockRule wireMockRule = new WireMockRule( + WireMockConfiguration.options().dynamicPort().extensions(new ResponseTemplateTransformer(false))); + @Test public void retries() throws Exception { RestClient spy = buildSpy(); @@ -80,6 +94,56 @@ public class RestClientTest { } + @Test + public void timeoutTest() throws URISyntaxException { + wireMockRule.stubFor(get("/chunked/delayed") + .willReturn(aResponse().withStatus(200).withBody("Hello world!").withChunkedDribbleDelay(2, 300))); + + + RestProperties props = new RestProperties() { + + + @Override + public Integer getRetries() { + return Integer.valueOf(0); + } + + @Override + public URL getEndpoint() throws MalformedURLException { + return new URL(String.format("http://localhost:%s", wireMockRule.port())); + } + + @Override + public String getSystemName() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Long getReadTimeout() { + return Long.valueOf(100); + } + }; + RestClient client = new RestClient(props, Optional.of(new URI("/chunked/delayed"))) { + + @Override + protected void initializeHeaderMap(MultivaluedMap<String, Pair<String, String>> headerMap) { + // TODO Auto-generated method stub + + } + + @Override + protected ONAPComponentsList getTargetEntity() { + return ONAPComponents.EXTERNAL; + } + + }; + + thrown.expect(ProcessingException.class); + client.get(); + + } + private RestClient buildSpy() throws MalformedURLException, IllegalArgumentException, UriBuilderException { RestClient client = httpClientFactory.newJsonClient(UriBuilder.fromUri("http://localhost/test").build().toURL(), ONAPComponents.BPMN); diff --git a/common/src/test/java/org/onap/so/client/adapter/rest/AdapterRestClientTest.java b/common/src/test/java/org/onap/so/client/adapter/rest/AdapterRestClientTest.java index 5075da3b7a..964707ab8f 100644 --- a/common/src/test/java/org/onap/so/client/adapter/rest/AdapterRestClientTest.java +++ b/common/src/test/java/org/onap/so/client/adapter/rest/AdapterRestClientTest.java @@ -21,32 +21,33 @@ package org.onap.so.client.adapter.rest; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.entry; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.net.URI; import java.net.URISyntaxException; import java.security.GeneralSecurityException; -import java.util.HashMap; -import java.util.Map; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; import org.apache.commons.codec.binary.Base64; +import org.javatuples.Pair; import org.junit.Before; import org.junit.Test; +import org.onap.logging.filter.base.ONAPComponents; import org.onap.so.client.policy.JettisonStyleMapperProvider; import org.onap.so.utils.CryptoUtils; -import org.onap.logging.filter.base.ONAPComponents; public class AdapterRestClientTest { private static final String CRYPTO_KEY = "546573746F736973546573746F736973"; private static final String INVALID_CRYPTO_KEY = "1234"; - private Map<String, String> headerMap; + private MultivaluedMap<String, Pair<String, String>> headerMap; private AdapterRestProperties adapterRestPropertiesMock; @Before public void setup() { - headerMap = new HashMap<>(); + headerMap = new MultivaluedHashMap<>(); + adapterRestPropertiesMock = mock(AdapterRestProperties.class); } @@ -60,7 +61,8 @@ public class AdapterRestClientTest { // when testedObject.initializeHeaderMap(headerMap); // then - assertThat(headerMap).containsOnly(entry("Authorization", getExpectedEncodedString(encyptedMessage))); + assertThat(headerMap.get("ALL")) + .containsOnly(Pair.with("Authorization", getExpectedEncodedString(encyptedMessage))); } @Test @@ -70,7 +72,7 @@ public class AdapterRestClientTest { // when testedObject.initializeHeaderMap(headerMap); // then - assertThat(headerMap).containsOnly(entry("Authorization", null)); + assertThat(headerMap.get("ALL")).containsOnly(Pair.with("Authorization", null)); } @Test @@ -84,7 +86,7 @@ public class AdapterRestClientTest { // when testedObject.initializeHeaderMap(headerMap); // then - assertThat(headerMap).containsOnly(entry("Authorization", null)); + assertThat(headerMap.get("ALL")).containsOnly(Pair.with("Authorization", null)); } @Test diff --git a/common/src/test/java/org/onap/so/client/dmaap/rest/DMaaPRestClientTest.java b/common/src/test/java/org/onap/so/client/dmaap/rest/DMaaPRestClientTest.java index ca5b5da2da..4f00b9db96 100644 --- a/common/src/test/java/org/onap/so/client/dmaap/rest/DMaaPRestClientTest.java +++ b/common/src/test/java/org/onap/so/client/dmaap/rest/DMaaPRestClientTest.java @@ -24,8 +24,9 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.net.MalformedURLException; import java.net.URL; -import java.util.HashMap; -import java.util.Map; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; import org.junit.Test; import org.onap.logging.ref.slf4j.ONAPLogConstants; import org.slf4j.MDC; @@ -48,11 +49,12 @@ public class DMaaPRestClientTest { throw new RuntimeException(e); } DMaaPRestClient client = new DMaaPRestClient(url, contentType, auth, key); - Map<String, String> map = new HashMap<>(); + MultivaluedMap<String, Pair<String, String>> map = new MultivaluedHashMap<>(); client.initializeHeaderMap(map); - map.put(ONAPLogConstants.MDCs.REQUEST_ID, "1234"); + map.add("ALL", Pair.with(ONAPLogConstants.MDCs.REQUEST_ID, "1234")); assertNotNull(map); - assertEquals("Found expected RequesttId", "1234", map.get(ONAPLogConstants.MDCs.REQUEST_ID)); + assertEquals("Found expected RequestId", true, + map.get("ALL").contains(Pair.with(ONAPLogConstants.MDCs.REQUEST_ID, "1234"))); } @@ -67,11 +69,12 @@ public class DMaaPRestClientTest { } MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, "1234"); DMaaPRestClient client = new DMaaPRestClient(url, contentType, auth, key); - Map<String, String> map = new HashMap<>(); + MultivaluedMap<String, Pair<String, String>> map = new MultivaluedHashMap<>(); client.initializeHeaderMap(map); assertNotNull(map); - assertEquals("Found expected RequestId", "1234", map.get(ONAPLogConstants.Headers.INVOCATION_ID)); + assertEquals("Found expected RequestId", true, + map.get("ALL").contains(Pair.with(ONAPLogConstants.Headers.INVOCATION_ID, "1234"))); } @@ -87,11 +90,12 @@ public class DMaaPRestClientTest { MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, null); DMaaPRestClient client = new DMaaPRestClient(url, contentType, auth, key); - Map<String, String> map = new HashMap<>(); + MultivaluedMap<String, Pair<String, String>> map = new MultivaluedHashMap<>(); client.initializeHeaderMap(map); assertNotNull(map); - assertEquals("header not found as expected", null, map.get(ONAPLogConstants.Headers.INVOCATION_ID)); + assertEquals("header not found as expected", false, + map.get("ALL").contains(Pair.with(ONAPLogConstants.Headers.INVOCATION_ID, "1234"))); } } diff --git a/common/src/test/java/org/onap/so/client/policy/PolicyClientImplTest.java b/common/src/test/java/org/onap/so/client/policy/PolicyClientImplTest.java index 3323fd8409..f9547cb3db 100644 --- a/common/src/test/java/org/onap/so/client/policy/PolicyClientImplTest.java +++ b/common/src/test/java/org/onap/so/client/policy/PolicyClientImplTest.java @@ -23,21 +23,22 @@ package org.onap.so.client.policy; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doReturn; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.io.IOException; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import org.javatuples.Pair; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -56,10 +57,10 @@ import org.onap.so.client.policy.entities.PolicyConfig; import org.onap.so.client.policy.entities.PolicyDecision; import org.onap.so.client.policy.entities.PolicyDecisionRequest; import org.onap.so.client.policy.entities.PolicyServiceType; +import org.onap.so.client.policy.entities.Workstep; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import org.onap.so.client.policy.entities.Workstep; public class PolicyClientImplTest { @@ -79,11 +80,13 @@ public class PolicyClientImplTest { @Test public void successReadProperties() { PolicyRestClient client = new PolicyRestClient(new PolicyRestPropertiesImpl(), PolicyServiceType.GET_DECISION); - Map<String, String> map = new HashMap<>(); + MultivaluedMap<String, Pair<String, String>> map = new MultivaluedHashMap<>(); client.initializeHeaderMap(map); - assertEquals("Found expected Client Auth", "Basic bTAzNzQzOnBvbGljeVIwY2sk", map.get("ClientAuth")); - assertEquals("Found expected Authorization", "Basic dGVzdHBkcDphbHBoYTEyMw==", map.get("Authorization")); - assertEquals("Found expected Environment", "TEST", map.get("Environment")); + assertTrue("Found expected Client Auth", + map.get("ALL").contains(Pair.with("ClientAuth", "Basic bTAzNzQzOnBvbGljeVIwY2sk"))); + assertTrue("Found expected Authorization", + map.get("ALL").contains(Pair.with("Authorization", "Basic dGVzdHBkcDphbHBoYTEyMw=="))); + assertTrue("Found expected Environment", map.get("ALL").contains(Pair.with("Environment", "TEST"))); } @Test diff --git a/common/src/test/resources/logback-test.xml b/common/src/test/resources/logback-test.xml index b52e6be022..3c5f259817 100644 --- a/common/src/test/resources/logback-test.xml +++ b/common/src/test/resources/logback-test.xml @@ -19,61 +19,60 @@ --> <configuration> - <property name="p_tim" value="%d{"yyyy-MM-dd'T'HH:mm:ss.SSSXXX", UTC}"/> - <property name="p_lvl" value="%level"/> - <property name="p_log" value="%logger"/> - <property name="p_mdc" value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}"/> - <property name="p_msg" value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}"/> - <property name="p_exc" value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}"/> - <property name="p_mak" value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}"/> - <property name="p_thr" value="%thread"/> - <property name="pattern" value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n"/> + <property name="p_tim" value="%d{"yyyy-MM-dd'T'HH:mm:ss.SSSXXX", UTC}" /> + <property name="p_lvl" value="%level" /> + <property name="p_log" value="%logger" /> + <property name="p_mdc" value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}" /> + <property name="p_msg" value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}" /> + <property name="p_exc" value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}" /> + <property name="p_mak" value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}" /> + <property name="p_thr" value="%thread" /> + <property name="pattern" + value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n" /> - <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> - <encoder> - <pattern>${pattern}</pattern> - </encoder> - </appender> + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>${pattern}</pattern> + </encoder> + </appender> - <appender name="test" - class="org.onap.so.utils.TestAppender" /> + <appender name="test" class="org.onap.so.utils.TestAppender" /> - <logger name="com.att.ecomp.audit" level="info" additivity="false"> - <appender-ref ref="STDOUT" /> - </logger> + <logger name="com.att.ecomp.audit" level="info" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> - <logger name="com.att.eelf.metrics" level="info" additivity="false"> - <appender-ref ref="STDOUT" /> - </logger> + <logger name="com.att.eelf.metrics" level="info" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> - <logger name="com.att.eelf.error" level="WARN" additivity="false"> - <appender-ref ref="STDOUT" /> - </logger> + <logger name="com.att.eelf.error" level="WARN" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> - <logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false"> - <appender-ref ref="STDOUT" /> - <appender-ref ref="test" /> - </logger> - - <logger name="org.flywaydb" level="DEBUG" additivity="false"> - <appender-ref ref="STDOUT" /> - </logger> - + <logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false"> + <appender-ref ref="STDOUT" /> + <appender-ref ref="test" /> + </logger> - <logger name="ch.vorburger" level="WARN" additivity="false"> - <appender-ref ref="STDOUT" /> - </logger> - - <logger name="org.reflections" level="ERROR" additivity="false"> - <appender-ref ref="STDOUT" /> - </logger> - + <logger name="org.flywaydb" level="DEBUG" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> - <root level="WARN"> - <appender-ref ref="STDOUT" /> - <appender-ref ref="test" /> - </root> + + <logger name="ch.vorburger" level="WARN" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> + + <logger name="org.reflections" level="ERROR" additivity="false"> + <appender-ref ref="STDOUT" /> + </logger> + + <root level="WARN"> + <appender-ref ref="STDOUT" /> + <appender-ref ref="test" /> + </root> </configuration>
\ No newline at end of file |