diff --git a/capif/generate.sh b/capif/generate.sh
index db962b9..fd5e741 100755
--- a/capif/generate.sh
+++ b/capif/generate.sh
@@ -141,5 +141,9 @@
 oapi-codegen --config internal/readonly/aefsecurityapi/generator_settings_types.yaml internal/readonly/api/TS29222_AEF_Security_API.yaml
 oapi-codegen --config internal/readonly/aefsecurityapi/generator_settings_server.yaml internal/readonly/api/TS29222_AEF_Security_API.yaml
 
+echo "Generating Go mocks"
 go generate ./...
-go test ./...
\ No newline at end of file
+echo "Testing Go application"
+go test ./...
+echo "Install Java version of CAPIF"
+mvn install -f java/capifapi/pom.xml
diff --git a/capif/java/.gitignore b/capif/java/.gitignore
new file mode 100644
index 0000000..667aaef
--- /dev/null
+++ b/capif/java/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/capif/java/capifapi/.gitignore b/capif/java/capifapi/.gitignore
new file mode 100644
index 0000000..eb5a316
--- /dev/null
+++ b/capif/java/capifapi/.gitignore
@@ -0,0 +1 @@
+target
diff --git a/capif/java/capifapi/pom.xml b/capif/java/capifapi/pom.xml
new file mode 100644
index 0000000..a24485c
--- /dev/null
+++ b/capif/java/capifapi/pom.xml
@@ -0,0 +1,430 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.7.0</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+
+    <groupId>org.oransc.nonrtric.plt</groupId>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>capifapi</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>capifapi</name>
+    <description>Capif API</description>
+    <packaging>jar</packaging>
+
+    <properties>
+        <java.version>11</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+        <swagger-annotations.version>1.5.22</swagger-annotations.version>
+        <springfox.version>3.0.0</springfox.version>
+        <jackson-databind-nullable.version>0.2.1</jackson-databind-nullable.version>
+        <openapi-generator-maven-plugin.version>5.3.1</openapi-generator-maven-plugin.version>
+        <swagger-codegen-maven-plugin.version>3.0.31</swagger-codegen-maven-plugin.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>2.5</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>${jackson-databind-nullable.version}</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
+        <dependency>
+            <groupId>javax.validation</groupId>
+            <artifactId>validation-api</artifactId>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/io.swagger/swagger-annotations -->
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.6.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>openapi-generator-maven-plugin</artifactId>
+            <version>5.4.0</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <version>2.10.14</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>attach-sources</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.openapitools</groupId>
+                <artifactId>openapi-generator-maven-plugin</artifactId>
+                <version>${openapi-generator-maven-plugin.version}</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <id>buildProviderApi</id>
+                        <configuration>
+                            <inputSpec>
+                                ${project.basedir}/../../internal/readonly/api/TS29222_CAPIF_API_Provider_Management_API.yaml
+                            </inputSpec>
+                            <generatorName>spring</generatorName>
+                            <library>spring-boot</library>
+                            <skipValidateSpec>true</skipValidateSpec>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApiTests>false</generateApiTests>
+                            <generateModelTests>false</generateModelTests>
+                            <configOptions>
+                                <basePackage>org.oransc.nonrtric.plt.capifapi</basePackage>
+                                <apiPackage>org.oransc.nonrtric.plt.capifapi.providermanagement</apiPackage>
+                                <modelPackage>org.oransc.nonrtric.plt.capifapi.model</modelPackage>
+                                <dateLibrary>joda</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <!-- <useBeanValidation>true</useBeanValidation>
+                                <performBeanValidation>true</performBeanValidation> -->
+                                <delegatePattern>true</delegatePattern>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <id>buildInvokerApi</id>
+                        <configuration>
+                            <inputSpec>
+                                ${project.basedir}/../../internal/readonly/api/TS29222_CAPIF_API_Invoker_Management_API.yaml
+                            </inputSpec>
+                            <generatorName>spring</generatorName>
+                            <library>spring-boot</library>
+                            <skipValidateSpec>true</skipValidateSpec>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApiTests>false</generateApiTests>
+                            <generateModelTests>false</generateModelTests>
+                            <configOptions>
+                                <basePackage>org.oransc.nonrtric.plt.capifapi</basePackage>
+                                <apiPackage>org.oransc.nonrtric.plt.capifapi.invokermanagement</apiPackage>
+                                <modelPackage>org.oransc.nonrtric.plt.capifapi.model</modelPackage>
+                                <dateLibrary>joda</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <!-- <useBeanValidation>true</useBeanValidation>
+                                <performBeanValidation>true</performBeanValidation> -->
+                                <delegatePattern>true</delegatePattern>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <id>buildPublishApi</id>
+                        <configuration>
+                            <inputSpec>
+                                ${project.basedir}/../../internal/readonly/api/TS29222_CAPIF_Publish_Service_API.yaml
+                            </inputSpec>
+                            <generatorName>spring</generatorName>
+                            <library>spring-boot</library>
+                            <skipValidateSpec>true</skipValidateSpec>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApiTests>false</generateApiTests>
+                            <generateModelTests>false</generateModelTests>
+                            <configOptions>
+                                <basePackage>org.oransc.nonrtric.plt.capifapi</basePackage>
+                                <apiPackage>org.oransc.nonrtric.plt.capifapi.publishservice</apiPackage>
+                                <modelPackage>org.oransc.nonrtric.plt.capifapi.model</modelPackage>
+                                <dateLibrary>joda</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <!-- <useBeanValidation>true</useBeanValidation>
+                                <performBeanValidation>true</performBeanValidation> -->
+                                <delegatePattern>true</delegatePattern>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <id>buildDiscoverApi</id>
+                        <configuration>
+                            <inputSpec>
+                                ${project.basedir}/../../internal/readonly/api/TS29222_CAPIF_Discover_Service_API.yaml
+                            </inputSpec>
+                            <generatorName>spring</generatorName>
+                            <library>spring-boot</library>
+                            <skipValidateSpec>true</skipValidateSpec>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApiTests>false</generateApiTests>
+                            <generateModelTests>false</generateModelTests>
+                            <configOptions>
+                                <basePackage>org.oransc.nonrtric.plt.capifapi</basePackage>
+                                <apiPackage>org.oransc.nonrtric.plt.capifapi.discoverservice</apiPackage>
+                                <modelPackage>org.oransc.nonrtric.plt.capifapi.model</modelPackage>
+                                <dateLibrary>joda</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <!-- <useBeanValidation>true</useBeanValidation>
+                                <performBeanValidation>true</performBeanValidation> -->
+                                <delegatePattern>true</delegatePattern>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <id>buildSecurityApi</id>
+                        <configuration>
+                            <inputSpec>${project.basedir}/../../internal/readonly/api/TS29222_CAPIF_Security_API.yaml
+                            </inputSpec>
+                            <generatorName>spring</generatorName>
+                            <library>spring-boot</library>
+                            <skipValidateSpec>true</skipValidateSpec>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApiTests>false</generateApiTests>
+                            <generateModelTests>false</generateModelTests>
+                            <configOptions>
+                                <basePackage>org.oransc.nonrtric.plt.capifapi</basePackage>
+                                <apiPackage>org.oransc.nonrtric.plt.capifapi.security</apiPackage>
+                                <modelPackage>org.oransc.nonrtric.plt.capifapi.model</modelPackage>
+                                <dateLibrary>joda</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <!-- <useBeanValidation>true</useBeanValidation>
+                                <performBeanValidation>true</performBeanValidation> -->
+                                <delegatePattern>true</delegatePattern>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <id>buildLoggingApi</id>
+                        <configuration>
+                            <inputSpec>
+                                ${project.basedir}/../../internal/readonly/api/TS29222_CAPIF_Logging_API_Invocation_API.yaml
+                            </inputSpec>
+                            <generatorName>spring</generatorName>
+                            <library>spring-boot</library>
+                            <skipValidateSpec>true</skipValidateSpec>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApiTests>false</generateApiTests>
+                            <generateModelTests>false</generateModelTests>
+                            <configOptions>
+                                <basePackage>org.oransc.nonrtric.plt.capifapi</basePackage>
+                                <apiPackage>org.oransc.nonrtric.plt.capifapi.loggingapiinvocation</apiPackage>
+                                <modelPackage>org.oransc.nonrtric.plt.capifapi.model</modelPackage>
+                                <dateLibrary>joda</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <!-- <useBeanValidation>true</useBeanValidation>
+                                <performBeanValidation>true</performBeanValidation> -->
+                                <delegatePattern>true</delegatePattern>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <id>buildRoutingApi</id>
+                        <configuration>
+                            <inputSpec>
+                                ${project.basedir}/../../internal/readonly/api/TS29222_CAPIF_Routing_Info_API.yaml
+                            </inputSpec>
+                            <generatorName>spring</generatorName>
+                            <library>spring-boot</library>
+                            <skipValidateSpec>true</skipValidateSpec>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApiTests>false</generateApiTests>
+                            <generateModelTests>false</generateModelTests>
+                            <configOptions>
+                                <basePackage>org.oransc.nonrtric.plt.capifapi</basePackage>
+                                <apiPackage>org.oransc.nonrtric.plt.capifapi.routinginfo</apiPackage>
+                                <modelPackage>org.oransc.nonrtric.plt.capifapi.model</modelPackage>
+                                <dateLibrary>joda</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <!-- <useBeanValidation>true</useBeanValidation>
+                                <performBeanValidation>true</performBeanValidation> -->
+                                <delegatePattern>true</delegatePattern>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <id>buildAccessControlApi</id>
+                        <configuration>
+                            <inputSpec>
+                                ${project.basedir}/../../internal/readonly/api/TS29222_CAPIF_Access_Control_Policy_API.yaml
+                            </inputSpec>
+                            <generatorName>spring</generatorName>
+                            <library>spring-boot</library>
+                            <skipValidateSpec>true</skipValidateSpec>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApiTests>false</generateApiTests>
+                            <generateModelTests>false</generateModelTests>
+                            <configOptions>
+                                <basePackage>org.oransc.nonrtric.plt.capifapi</basePackage>
+                                <apiPackage>org.oransc.nonrtric.plt.capifapi.accesscontrolpolicy</apiPackage>
+                                <modelPackage>org.oransc.nonrtric.plt.capifapi.model</modelPackage>
+                                <dateLibrary>joda</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <!-- <useBeanValidation>true</useBeanValidation>
+                                <performBeanValidation>true</performBeanValidation> -->
+                                <delegatePattern>true</delegatePattern>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <id>buildEventsApi</id>
+                        <configuration>
+                            <inputSpec>${project.basedir}/../../internal/readonly/api/TS29222_CAPIF_Events_API.yaml
+                            </inputSpec>
+                            <generatorName>spring</generatorName>
+                            <library>spring-boot</library>
+                            <skipValidateSpec>true</skipValidateSpec>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApiTests>false</generateApiTests>
+                            <generateModelTests>false</generateModelTests>
+                            <configOptions>
+                                <basePackage>org.oransc.nonrtric.plt.capifapi</basePackage>
+                                <apiPackage>org.oransc.nonrtric.plt.capifapi.events</apiPackage>
+                                <modelPackage>org.oransc.nonrtric.plt.capifapi.model</modelPackage>
+                                <dateLibrary>joda</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <!-- <useBeanValidation>true</useBeanValidation>
+                                <performBeanValidation>true</performBeanValidation> -->
+                                <delegatePattern>true</delegatePattern>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <id>buildAuditingsApi</id>
+                        <configuration>
+                            <inputSpec>${project.basedir}/../../internal/readonly/api/TS29222_CAPIF_Auditing_API.yaml
+                            </inputSpec>
+                            <generatorName>spring</generatorName>
+                            <library>spring-boot</library>
+                            <skipValidateSpec>true</skipValidateSpec>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApiTests>false</generateApiTests>
+                            <generateModelTests>false</generateModelTests>
+                            <configOptions>
+                                <basePackage>org.oransc.nonrtric.plt.capifapi</basePackage>
+                                <apiPackage>org.oransc.nonrtric.plt.capifapi.auditing</apiPackage>
+                                <modelPackage>org.oransc.nonrtric.plt.capifapi.model</modelPackage>
+                                <dateLibrary>joda</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <!-- <useBeanValidation>true</useBeanValidation>
+                                <performBeanValidation>true</performBeanValidation> -->
+                                <delegatePattern>true</delegatePattern>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <id>buildAefSecurityApi</id>
+                        <configuration>
+                            <inputSpec>${project.basedir}/../../internal/readonly/api/TS29222_AEF_Security_API.yaml
+                            </inputSpec>
+                            <generatorName>spring</generatorName>
+                            <library>spring-boot</library>
+                            <skipValidateSpec>true</skipValidateSpec>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApis>true</generateApis>
+                            <generateModels>true</generateModels>
+                            <generateApiTests>false</generateApiTests>
+                            <generateModelTests>false</generateModelTests>
+                            <configOptions>
+                                <basePackage>org.oransc.nonrtric.plt.capifapi</basePackage>
+                                <apiPackage>org.oransc.nonrtric.plt.capifapi.aefsecurity</apiPackage>
+                                <modelPackage>org.oransc.nonrtric.plt.capifapi.model</modelPackage>
+                                <dateLibrary>joda</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <!-- <useBeanValidation>true</useBeanValidation>
+                                <performBeanValidation>true</performBeanValidation> -->
+                                <delegatePattern>true</delegatePattern>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/capif/java/capifcore/.mvn/wrapper/maven-wrapper.properties b/capif/java/capifcore/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000..b7cb93e
--- /dev/null
+++ b/capif/java/capifcore/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
diff --git a/capif/java/capifcore/config/application.yaml b/capif/java/capifcore/config/application.yaml
new file mode 100644
index 0000000..c4efee0
--- /dev/null
+++ b/capif/java/capifcore/config/application.yaml
@@ -0,0 +1,43 @@
+#
+# ============LICENSE_START=======================================================
+# ONAP : ccsdk oran
+# ================================================================================
+# Copyright (C) 2020 Nordix Foundation. All rights reserved.
+# ================================================================================
+# 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+#
+spring:
+  profiles:
+    active: prod
+  main:
+    allow-bean-definition-overriding: true
+  aop:
+    auto: false
+management:
+  endpoints:
+    web:
+      exposure:
+        # Enabling of springboot actuator features. See springboot documentation.
+        include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
+logging:
+  # Configuration of logging
+  level:
+    ROOT: INFO
+    org.springframework: INFO
+    org.springframework.data: INFO
+    org.springframework.web.reactive.function.client.ExchangeFunctions: INFO
+
+
diff --git a/capif/java/capifcore/mvnw b/capif/java/capifcore/mvnw
new file mode 100755
index 0000000..8a8fb22
--- /dev/null
+++ b/capif/java/capifcore/mvnw
@@ -0,0 +1,316 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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
+#
+#    https://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.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /usr/local/etc/mavenrc ] ; then
+    . /usr/local/etc/mavenrc
+  fi
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`\\unset -f command; \\command -v java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
+    fi
+else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+    fi
+    if [ -n "$MVNW_REPOURL" ]; then
+      jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+    else
+      jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+    fi
+    while IFS="=" read key value; do
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+      esac
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Downloading from: $jarUrl"
+    fi
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+    if $cygwin; then
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+    fi
+
+    if command -v wget > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found wget ... using wget"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+        else
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found curl ... using curl"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl -o "$wrapperJarPath" "$jarUrl" -f
+        else
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+        fi
+
+    else
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Falling back to using Java to download"
+        fi
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaClass=`cygpath --path --windows "$javaClass"`
+        fi
+        if [ -e "$javaClass" ]; then
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Compiling MavenWrapperDownloader.java ..."
+                fi
+                # Compiling the Java class
+                ("$JAVA_HOME/bin/javac" "$javaClass")
+            fi
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                # Running the downloader
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Running MavenWrapperDownloader.java ..."
+                fi
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  $MAVEN_DEBUG_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" \
+  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/capif/java/capifcore/mvnw.cmd b/capif/java/capifcore/mvnw.cmd
new file mode 100644
index 0000000..1d8ab01
--- /dev/null
+++ b/capif/java/capifcore/mvnw.cmd
@@ -0,0 +1,188 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %DOWNLOAD_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% ^
+  %JVM_CONFIG_MAVEN_PROPS% ^
+  %MAVEN_OPTS% ^
+  %MAVEN_DEBUG_OPTS% ^
+  -classpath %WRAPPER_JAR% ^
+  "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
+  %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
+
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
+
+cmd /C exit /B %ERROR_CODE%
diff --git a/capif/java/capifcore/pom.xml b/capif/java/capifcore/pom.xml
new file mode 100644
index 0000000..b08daad
--- /dev/null
+++ b/capif/java/capifcore/pom.xml
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.7.0</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+
+    <groupId>org.oransc.nonrtric.plt</groupId>
+    <artifactId>capifcore</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>capifcore</name>
+    <description>Demo project for Capif Core</description>
+
+    <properties>
+        <java.version>11</java.version>
+        <swagger-annotations.version>1.5.22</swagger-annotations.version>
+        <springfox.version>3.0.0</springfox.version>
+        <jackson-databind-nullable.version>0.2.1</jackson-databind-nullable.version>
+        <openapi-generator-maven-plugin.version>5.3.1</openapi-generator-maven-plugin.version>
+        <swagger-codegen-maven-plugin.version>3.0.31</swagger-codegen-maven-plugin.version>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>org.oransc.nonrtric.plt</groupId>
+            <artifactId>capifapi</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <scope>test</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-webflux</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>${jackson-databind-nullable.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-webmvc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>2.5</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
+        <dependency>
+            <groupId>javax.validation</groupId>
+            <artifactId>validation-api</artifactId>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/io.swagger/swagger-annotations -->
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.6.6</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-validator</artifactId>
+            <version>7.0.4.Final</version>
+        </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-engine -->
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/CapifCoreApplication.java b/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/CapifCoreApplication.java
new file mode 100644
index 0000000..4d67c5a
--- /dev/null
+++ b/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/CapifCoreApplication.java
@@ -0,0 +1,67 @@
+// -
+//   ========================LICENSE_START=================================
+//   O-RAN-SC
+//   %%
+//   Copyright (C) 2022: Nordix Foundation
+//   %%
+//   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.oransc.nonrtric.plt.capifcore;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class CapifCoreApplication {
+
+
+    public static void main(String[] args) {
+        SpringApplication.run(CapifCoreApplication.class, args);
+    }
+
+    // static class ExitException extends RuntimeException implements ExitCodeGenerator {
+    //     private static final long serialVersionUID = 1L;
+
+    //     @Override
+    //     public int getExitCode() {
+    //         return 10;
+    //     }
+
+    // }
+
+    // @Bean
+    // public WebMvcConfigurer webConfigurer() {
+    //     return new WebMvcConfigurer() {
+    //         /*@Override
+    //         public void addCorsMappings(CorsRegistry registry) {
+    //             registry.addMapping("/**")
+    //                     .allowedOrigins("*")
+    //                     .allowedMethods("*")
+    //                     .allowedHeaders("Content-Type");
+    //         }*/
+
+    //         @Override
+    //         public void addResourceHandlers(ResourceHandlerRegistry registry) {
+    //             registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/3.14.2/");
+    //         }
+    //     };
+    // }
+
+    // @Bean
+    // public Module jsonNullableModule() {
+    //     return new JsonNullableModule();
+    // }
+
+}
diff --git a/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/ApiRegister.java b/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/ApiRegister.java
new file mode 100644
index 0000000..c0a7782
--- /dev/null
+++ b/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/ApiRegister.java
@@ -0,0 +1,29 @@
+// -
+//   ========================LICENSE_START=================================
+//   O-RAN-SC
+//   %%
+//   Copyright (C) 2022: Nordix Foundation
+//   %%
+//   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.oransc.nonrtric.plt.capifcore.controller;
+
+import org.oransc.nonrtric.plt.capifapi.model.ServiceAPIDescription;
+
+public interface ApiRegister {
+    boolean areAPIsRegistered(ServiceAPIDescription[] serviceDescriptions);
+    ServiceAPIDescription[] getAPIs();
+    boolean isAPIRegistered(String aefId, String apiName);
+}
diff --git a/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/OnboardedInvokersApiImpl.java b/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/OnboardedInvokersApiImpl.java
new file mode 100644
index 0000000..82d42a4
--- /dev/null
+++ b/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/OnboardedInvokersApiImpl.java
@@ -0,0 +1,56 @@
+// -
+//   ========================LICENSE_START=================================
+//   O-RAN-SC
+//   %%
+//   Copyright (C) 2022: Nordix Foundation
+//   %%
+//   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.oransc.nonrtric.plt.capifcore.controller;
+
+import org.oransc.nonrtric.plt.capifapi.invokermanagement.OnboardedInvokersApi;
+import org.oransc.nonrtric.plt.capifapi.model.APIInvokerEnrolmentDetails;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("api-invoker-management/v1")
+public class OnboardedInvokersApiImpl implements OnboardedInvokersApi {
+    private final ApiRegister apiRegister;
+    private int nextId;
+
+    public OnboardedInvokersApiImpl(ApiRegister apiRegister) {
+        this.apiRegister = apiRegister;
+    }
+
+    @Override
+    public ResponseEntity<APIInvokerEnrolmentDetails> onboardedInvokersPost(APIInvokerEnrolmentDetails apIInvokerEnrolmentDetails) {
+        apIInvokerEnrolmentDetails.apiInvokerId(getApiId(apIInvokerEnrolmentDetails.getApiInvokerInformation()));
+
+        return ResponseEntity.ok(apIInvokerEnrolmentDetails);
+    }
+
+    private String getApiId(String invokerInfo) {
+        String idAsString = "api_invoker_id_";
+
+        if (invokerInfo != null && !invokerInfo.isEmpty()) {
+            idAsString = idAsString + invokerInfo.replaceAll("\\s+", "_");
+        } else {
+            idAsString = idAsString + nextId++;
+        }
+        return idAsString;
+    }
+}
diff --git a/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/PublishService.java b/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/PublishService.java
new file mode 100644
index 0000000..1bee71c
--- /dev/null
+++ b/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/PublishService.java
@@ -0,0 +1,61 @@
+// -
+//   ========================LICENSE_START=================================
+//   O-RAN-SC
+//   %%
+//   Copyright (C) 2022: Nordix Foundation
+//   %%
+//   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.oransc.nonrtric.plt.capifcore.controller;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.oransc.nonrtric.plt.capifapi.model.ServiceAPIDescription;
+import org.oransc.nonrtric.plt.capifapi.publishservice.ApfIdApi;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/published-apis/v1")
+public class PublishService implements ApfIdApi, ApiRegister {
+    private Map<String, ServiceAPIDescription> publishedServices = new HashMap<>();
+
+    @Override
+    public ResponseEntity<ServiceAPIDescription> apfIdServiceApisPost(String apfId, ServiceAPIDescription serviceAPIDescription) {
+        serviceAPIDescription.apiId("api_id_"+serviceAPIDescription.getApiName());
+        publishedServices.put(serviceAPIDescription.getApiId(), serviceAPIDescription);
+        return ResponseEntity.ok(serviceAPIDescription);
+    }
+
+    @Override
+    public boolean areAPIsRegistered(ServiceAPIDescription[] serviceDescriptions) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public ServiceAPIDescription[] getAPIs() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public boolean isAPIRegistered(String aefId, String apiName) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+}
diff --git a/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/RegistrationsApiImpl.java b/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/RegistrationsApiImpl.java
new file mode 100644
index 0000000..6d9e845
--- /dev/null
+++ b/capif/java/capifcore/src/main/java/org/oransc/nonrtric/plt/capifcore/controller/RegistrationsApiImpl.java
@@ -0,0 +1,43 @@
+// -
+//   ========================LICENSE_START=================================
+//   O-RAN-SC
+//   %%
+//   Copyright (C) 2022: Nordix Foundation
+//   %%
+//   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.oransc.nonrtric.plt.capifcore.controller;
+
+import org.oransc.nonrtric.plt.capifapi.model.APIProviderEnrolmentDetails;
+import org.oransc.nonrtric.plt.capifapi.providermanagement.RegistrationsApi;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api-provider-management/v1")
+public class RegistrationsApiImpl implements RegistrationsApi {
+
+    @Override
+    public ResponseEntity<APIProviderEnrolmentDetails> registrationsPost(APIProviderEnrolmentDetails apIProviderEnrolmentDetails) {
+        apIProviderEnrolmentDetails.apiProvDomId(getDomainId(apIProviderEnrolmentDetails.getApiProvDomInfo()));
+        return ResponseEntity.ok(apIProviderEnrolmentDetails);
+
+    }
+
+    private String getDomainId(String domainInfo) {
+     return "domain_id_" + domainInfo.replaceAll("\\s+", "_");
+    }
+}
diff --git a/capif/java/capifcore/src/main/resources/application.properties b/capif/java/capifcore/src/main/resources/application.properties
new file mode 100644
index 0000000..e56ef01
--- /dev/null
+++ b/capif/java/capifcore/src/main/resources/application.properties
@@ -0,0 +1,44 @@
+#
+# ============LICENSE_START=======================================================
+# ONAP : ccsdk oran
+# ================================================================================
+# Copyright (C) 2020 Nordix Foundation. All rights reserved.
+# ================================================================================
+# 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.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+#
+spring:
+  profiles:
+    active: prod
+  main:
+    allow-bean-definition-overriding: true
+  aop:
+    auto: false
+management:
+  endpoints:
+    web:
+      exposure:
+        # Enabling of springboot actuator features. See springboot documentation.
+        include: "loggers,logfile,health,info,metrics,threaddump,heapdump"
+logging:
+  # Configuration of logging
+  level:
+    ROOT: INFO
+    org.springframework: INFO
+    org.springframework.data: INFO
+    org.springframework.web.reactive.function.client.ExchangeFunctions: INFO
+
+
+
diff --git a/capif/java/capifcore/src/test/java/org/oransc/nonrtric/plt/capifcore/CapifCoreApplicationTests.java b/capif/java/capifcore/src/test/java/org/oransc/nonrtric/plt/capifcore/CapifCoreApplicationTests.java
new file mode 100644
index 0000000..2a5f9a7
--- /dev/null
+++ b/capif/java/capifcore/src/test/java/org/oransc/nonrtric/plt/capifcore/CapifCoreApplicationTests.java
@@ -0,0 +1,13 @@
+package org.oransc.nonrtric.plt.capifcore;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class CapifCoreApplicationTests {
+
+	@Test
+	void contextLoads() {
+	}
+
+}
diff --git a/capif/java/capifcore/src/test/java/org/oransc/nonrtric/plt/capifcore/controller/PublishServiceTest.java b/capif/java/capifcore/src/test/java/org/oransc/nonrtric/plt/capifcore/controller/PublishServiceTest.java
new file mode 100644
index 0000000..aad2768
--- /dev/null
+++ b/capif/java/capifcore/src/test/java/org/oransc/nonrtric/plt/capifcore/controller/PublishServiceTest.java
@@ -0,0 +1,62 @@
+// -
+//   ========================LICENSE_START=================================
+//   O-RAN-SC
+//   %%
+//   Copyright (C) 2022: Nordix Foundation
+//   %%
+//   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.oransc.nonrtric.plt.capifcore.controller;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import org.junit.jupiter.api.Test;
+import org.oransc.nonrtric.plt.capifapi.model.AefProfile;
+import org.oransc.nonrtric.plt.capifapi.model.ServiceAPIDescription;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+class PublishServiceTest {
+	// ApiRegister apiRegisterMock = mock(ApiRegister.class);
+    @Test
+    void testPostNewInvokerShouldGetInvokerId() {
+        PublishService apiUnderTest = new PublishService();
+        ServiceAPIDescription newInvoker = new ServiceAPIDescription();
+        newInvoker.apiName("apiName");
+        ResponseEntity<ServiceAPIDescription> response = apiUnderTest.apfIdServiceApisPost("apfId", newInvoker);
+        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
+        assertThat(Objects.requireNonNull(response.getBody()).getApiId()).isEqualTo("api_id_apiName");
+    }
+    
+    @Test
+    void testPostNewInvokerShouldBeStored() {
+        PublishService apiUnderTest = new PublishService();
+        ServiceAPIDescription newInvoker = new ServiceAPIDescription();
+        String apiName = "apiName";
+		newInvoker.apiName(apiName);
+        AefProfile aefProfile = new AefProfile();
+        String aefId = "aefId";
+        aefProfile.aefId(aefId);
+//        aefProfile.
+        newInvoker.addAefProfilesItem(aefProfile);
+        ResponseEntity<ServiceAPIDescription> response = apiUnderTest.apfIdServiceApisPost("apfId", newInvoker);
+        assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
+        assertThat(apiUnderTest.isAPIRegistered(aefId, apiName)).isTrue();
+	}
+}
\ No newline at end of file
