You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/01/22 06:34:57 UTC

[2/2] stratos git commit: Fixing service proxy port issue in kubernetes client api and kubernetes IaaS

Fixing service proxy port issue in kubernetes client api and kubernetes IaaS


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/0c4bec76
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/0c4bec76
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/0c4bec76

Branch: refs/heads/master
Commit: 0c4bec76b0273f5a13fb758da3b3640204dc79ee
Parents: 2f0b904
Author: Imesh Gunaratne <im...@apache.org>
Authored: Thu Jan 22 11:04:44 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Thu Jan 22 11:04:44 2015 +0530

----------------------------------------------------------------------
 .../applications/ApplicationUtils.java          |   2 +-
 .../cloud/controller/domain/PortMapping.java    |  24 +-
 .../iaases/kubernetes/KubernetesIaas.java       |  33 +-
 .../iaases/kubernetes/KubernetesIaasUtil.java   |  68 +-
 .../publisher/TopologyEventPublisher.java       |   4 +-
 .../messaging/topology/TopologyBuilder.java     |  17 +-
 .../pom.xml                                     | 173 ++--
 .../kubernetes/client/KubernetesApiClient.java  |  85 +-
 .../KubernetesAPIClientInterface.java           |  12 +-
 .../live/KubernetesApiClientLiveTest.java       |  51 +-
 .../util/converter/ObjectConverter.java         |   4 +-
 .../main/resources/CloudControllerService.wsdl  | 793 ++++++++++---------
 12 files changed, 640 insertions(+), 626 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/0c4bec76/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
index 9666c69..708f401 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
@@ -147,7 +147,7 @@ public class ApplicationUtils {
         StringBuilder portMapBuilder = new StringBuilder();
         PortMapping[] portMappings = cartridge.getPortMappings();
         for (PortMapping portMapping : portMappings) {
-            String port = portMapping.getPort();
+            int port = portMapping.getPort();
             portMapBuilder.append(port).append("|");
         }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c4bec76/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/PortMapping.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/PortMapping.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/PortMapping.java
index b50ffc7..c1d991f 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/PortMapping.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/PortMapping.java
@@ -25,13 +25,14 @@ public class PortMapping implements Serializable{
     private static final long serialVersionUID = -5387564414633460306L;
 
 	private String protocol;
-	private String port;
-	private String proxyPort;
+	private int port;
+	private int proxyPort;
+	private int kubernetesServicePort;
 	
-	public PortMapping(){
+	public PortMapping() {
 	}
 	
-	public PortMapping(String protocol, String port, String proxyPort){
+	public PortMapping(String protocol, int port, int proxyPort){
 		this.protocol = protocol;
 		this.port = port;
 		this.proxyPort = proxyPort;
@@ -45,19 +46,19 @@ public class PortMapping implements Serializable{
     	this.protocol = protocol;
     }
 
-	public String getPort() {
+	public int getPort() {
     	return port;
     }
 
-	public void setPort(String port) {
+	public void setPort(int port) {
     	this.port = port;
     }
 
-	public String getProxyPort() {
+	public int getProxyPort() {
     	return proxyPort;
     }
 
-	public void setProxyPort(String proxyPort) {
+	public void setProxyPort(int proxyPort) {
     	this.proxyPort = proxyPort;
     }
 
@@ -66,4 +67,11 @@ public class PortMapping implements Serializable{
         return "Protocol: " + protocol + ", Port: " + port + ", Proxy Port: " + proxyPort;
     }
 
+	public void setKubernetesServicePort(int kubernetesServicePort) {
+		this.kubernetesServicePort = kubernetesServicePort;
+	}
+
+	public int getKubernetesServicePort() {
+		return kubernetesServicePort;
+	}
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c4bec76/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
index ea2c5c9..f116ce9 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
@@ -362,15 +362,14 @@ public class KubernetesIaas extends Iaas {
 
         // Create replication controller
         String replicationControllerId = CloudControllerUtil.replaceDotsWithDash(memberContext.getMemberId());
-        String replicationControllerName = replicationControllerId;
+        String replicationControllerName = memberContext.getClusterId();
         String dockerImage = iaasProvider.getImage();
-        List<Integer> containerPorts = KubernetesIaasUtil.prepareCartridgePorts(cartridge);
         EnvironmentVariable[] environmentVariables = KubernetesIaasUtil.prepareEnvironmentVariables(
                 clusterContext, memberContext);
         int replicas = 1;
 
         kubernetesApi.createReplicationController(replicationControllerId, replicationControllerName,
-                dockerImage, containerPorts, environmentVariables, replicas);
+                dockerImage, KubernetesIaasUtil.convertPortMappings(cartridge.getPortMappings()), environmentVariables, replicas);
         if (log.isInfoEnabled()) {
             log.info(String.format("Replication controller created successfully: [cartridge-type] %s [member-id] %s",
                     memberContext.getCartridgeType(), memberContext.getClusterId()));
@@ -400,9 +399,9 @@ public class KubernetesIaas extends Iaas {
             throw new RuntimeException(message);
         }
 
-        List<PortMapping> portMappings = cartridge.getPortMappings();
-        for (PortMapping portMapping : portMappings) {
-            String serviceId = KubernetesIaasUtil.prepareKubernetesServiceId(
+        boolean kubernetesServicePortsAdded = false;
+        for (PortMapping portMapping : cartridge.getPortMappings()) {
+            String serviceId = KubernetesIaasUtil.generateKubernetesServiceId(
                     CloudControllerUtil.replaceDotsWithDash(clusterId), portMapping);
             int nextServicePort = kubernetesClusterContext.getNextServicePort();
             if (nextServicePort == -1) {
@@ -412,17 +411,16 @@ public class KubernetesIaas extends Iaas {
 
             if (log.isInfoEnabled()) {
                 log.info(String.format("Creating kubernetes service: [cluster-id] %s [service-id] %s " +
-                                "[protocol] %s [service-port] %d [container-port] %s [proxy-port] %s", clusterId,
-                        serviceId, portMapping.getProtocol(), nextServicePort, portMapping.getPort(),
-                        portMapping.getProxyPort()));
+                                "[protocol] %s [service-port] %d [container-port] %s", clusterId,
+                        serviceId, portMapping.getProtocol(), nextServicePort, portMapping.getPort()));
             }
 
-            String serviceName = serviceId;
+            String serviceName = clusterId;
             int servicePort = nextServicePort;
-            int containerPort = Integer.parseInt(portMapping.getPort());
+            String containerPortName = KubernetesIaasUtil.generatePortName(portMapping);
             String publicIp = kubernetesClusterContext.getMasterIp();
 
-            kubernetesApi.createService(serviceId, serviceName, servicePort, containerPort, publicIp);
+            kubernetesApi.createService(serviceId, serviceName, servicePort, containerPortName, publicIp);
 
             try {
                 Thread.sleep(1000);
@@ -431,14 +429,19 @@ public class KubernetesIaas extends Iaas {
 
             Service service = kubernetesApi.getService(serviceId);
             services.add(service);
+            portMapping.setKubernetesServicePort(nextServicePort);
+            kubernetesServicePortsAdded = true;
 
             if (log.isInfoEnabled()) {
                 log.info(String.format("Kubernetes service successfully created: [cluster-id] %s [service-id] %s " +
-                                "[protocol] %s [service-port] %d [container-port] %s [proxy-port] %s", clusterId,
-                        service.getId(), portMapping.getProtocol(), service.getPort(), portMapping.getPort(),
-                        portMapping.getProxyPort()));
+                                "[protocol] %s [service-port] %d [container-port] %s", clusterId,
+                        serviceId, portMapping.getProtocol(), nextServicePort, portMapping.getPort()));
             }
         }
+        if(kubernetesServicePortsAdded) {
+            // Persist service ports added to port mappings
+            CloudControllerContext.getInstance().persist();
+        }
         return services;
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c4bec76/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaasUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaasUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaasUtil.java
index f10cb16..ba94359 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaasUtil.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaasUtil.java
@@ -21,7 +21,6 @@ package org.apache.stratos.cloud.controller.iaases.kubernetes;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.cloud.controller.domain.Cartridge;
 import org.apache.stratos.cloud.controller.domain.ClusterContext;
 import org.apache.stratos.cloud.controller.domain.MemberContext;
 import org.apache.stratos.cloud.controller.domain.PortMapping;
@@ -30,6 +29,7 @@ import org.apache.stratos.common.Property;
 import org.apache.stratos.common.domain.NameValuePair;
 import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.kubernetes.client.model.EnvironmentVariable;
+import org.apache.stratos.kubernetes.client.model.Port;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -42,24 +42,11 @@ public class KubernetesIaasUtil {
     private static final Log log = LogFactory.getLog(KubernetesIaas.class);
 
     /**
-     * Prepare and returns the list of ports defined in the given cartridge.
-     * @param cartridge
-     * @return
-     */
-    public static List<Integer> prepareCartridgePorts(Cartridge cartridge) {
-        List<Integer> portList = new ArrayList<Integer>();
-        for (PortMapping portMapping : cartridge.getPortMappings()) {
-            portList.add(Integer.valueOf(portMapping.getPort()));
-        }
-        return portList;
-    }
-
-    /**
-     * Prepare and returns kubernetes service id using clusterId, port protocol and port.
+     * Generate kubernetes service id using clusterId, port protocol and port.
      * @param portMapping
      * @return
      */
-    public static String prepareKubernetesServiceId(String clusterId, PortMapping portMapping) {
+    public static String generateKubernetesServiceId(String clusterId, PortMapping portMapping) {
         return String.format("%s-%s-%s", clusterId, portMapping.getProtocol(), portMapping.getPort());
     }
 
@@ -105,23 +92,42 @@ public class KubernetesIaasUtil {
         return environmentVariables.toArray(array);
     }
 
-    private static void addToEnvironment(List<EnvironmentVariable> envVars, String payload) {
-        if (payload != null) {
-            String[] entries = payload.split(",");
-            for (String entry : entries) {
-                String[] var = entry.split("=");
-                if (var.length != 2) {
-                    continue;
-                }
-                addToEnvironmentVariables(envVars, var[0], var[1]);
-            }
+    /**
+     * Add name value pair to kubernetes environment variables.
+     * @param environmentVariables
+     * @param name
+     * @param value
+     */
+    private static void addToEnvironmentVariables(List<EnvironmentVariable> environmentVariables, String name, String value) {
+        EnvironmentVariable environmentVariable = new EnvironmentVariable();
+        environmentVariable.setName(name);
+        environmentVariable.setValue(value);
+        environmentVariables.add(environmentVariable);
+    }
+
+    /**
+     * Convert stratos port mappings to kubernetes ports
+     * @param portMappings
+     * @return
+     */
+    public static List<Port> convertPortMappings(List<PortMapping> portMappings) {
+        List<Port> ports = new ArrayList<Port>();
+        for(PortMapping portMapping : portMappings) {
+            Port port = new Port();
+            port.setName(generatePortName(portMapping));
+            port.setContainerPort(portMapping.getPort());
+            port.setHostPort(portMapping.getKubernetesServicePort());
+            ports.add(port);
         }
+        return ports;
     }
 
-    private static void addToEnvironmentVariables(List<EnvironmentVariable> envVars, String name, String value) {
-        EnvironmentVariable var = new EnvironmentVariable();
-        var.setName(name);
-        var.setValue(value);
-        envVars.add(var);
+    /**
+     * Generate port name for port mapping.
+     * @param portMapping
+     * @return
+     */
+    public static String generatePortName(PortMapping portMapping) {
+        return String.format("%s-%d", portMapping.getProtocol(), portMapping.getPort());
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c4bec76/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/publisher/TopologyEventPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/publisher/TopologyEventPublisher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/publisher/TopologyEventPublisher.java
index c2a9ccf..48692a2 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/publisher/TopologyEventPublisher.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/publisher/TopologyEventPublisher.java
@@ -60,9 +60,7 @@ public class TopologyEventPublisher {
             Port port;
             List<PortMapping> portMappings = cartridge.getPortMappings();
             for (PortMapping portMapping : portMappings) {
-                port = new Port(portMapping.getProtocol(),
-                        Integer.parseInt(portMapping.getPort()),
-                        Integer.parseInt(portMapping.getProxyPort()));
+                port = new Port(portMapping.getProtocol(), portMapping.getPort(), portMapping.getProxyPort());
                 serviceCreatedEvent.addPort(port);
             }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c4bec76/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
index 6842d55..6a539a8 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
@@ -31,8 +31,6 @@ import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import org.apache.stratos.messaging.domain.application.ClusterDataHolder;
 import org.apache.stratos.messaging.domain.instance.ClusterInstance;
 import org.apache.stratos.messaging.domain.topology.*;
-import org.apache.stratos.messaging.domain.topology.Port;
-import org.apache.stratos.messaging.domain.topology.Service;
 import org.apache.stratos.messaging.event.application.ApplicationInstanceTerminatedEvent;
 import org.apache.stratos.messaging.event.cluster.status.*;
 import org.apache.stratos.messaging.event.instance.status.InstanceActivatedEvent;
@@ -76,9 +74,7 @@ public class TopologyBuilder {
                     Port port;
                     //adding ports to the event
                     for (PortMapping portMapping : portMappings) {
-                        port = new Port(portMapping.getProtocol(),
-                                Integer.parseInt(portMapping.getPort()),
-                                Integer.parseInt(portMapping.getProxyPort()));
+                        port = new Port(portMapping.getProtocol(), portMapping.getPort(), portMapping.getProxyPort());
                         service.addPort(port);
                     }
                     topology.addService(service);
@@ -429,8 +425,7 @@ public class TopologyBuilder {
                             // Adding ports to the member
                             for (PortMapping portMapping : portMappings) {
                                 port = new Port(portMapping.getProtocol(),
-                                        findServicePort(clusterId, services, portMapping),
-                                        Integer.parseInt(portMapping.getProxyPort()));
+                                        findServicePort(clusterId, services, portMapping), portMapping.getProxyPort());
                                 member.addPort(port);
                             }
                         }
@@ -439,9 +434,7 @@ public class TopologyBuilder {
                 } else {
                     // Adding ports to the member
                     for (PortMapping portMapping : portMappings) {
-                        port = new Port(portMapping.getProtocol(),
-                                Integer.parseInt(portMapping.getPort()),
-                                Integer.parseInt(portMapping.getProxyPort()));
+                        port = new Port(portMapping.getProtocol(), portMapping.getPort(), portMapping.getProxyPort());
                         member.addPort(port);
                     }
                 }
@@ -639,9 +632,7 @@ public class TopologyBuilder {
                 Port port;
                 //adding ports to the event
                 for (PortMapping portMapping : portMappings) {
-                    port = new Port(portMapping.getProtocol(),
-                            Integer.parseInt(portMapping.getPort()),
-                            Integer.parseInt(portMapping.getProxyPort()));
+                    port = new Port(portMapping.getProtocol(), portMapping.getPort(), portMapping.getProxyPort());
                     member.addPort(port);
                     memberActivatedEvent.addPort(port);
                 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c4bec76/components/org.apache.stratos.kubernetes.client/pom.xml
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/pom.xml b/components/org.apache.stratos.kubernetes.client/pom.xml
index 2c96345..b993575 100644
--- a/components/org.apache.stratos.kubernetes.client/pom.xml
+++ b/components/org.apache.stratos.kubernetes.client/pom.xml
@@ -18,7 +18,8 @@
        under the License.
 -->
 
-<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 http://maven.apache.org/maven-v4_0_0.xsd">
+<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 http://maven.apache.org/maven-v4_0_0.xsd">
 
     <parent>
         <groupId>org.apache.stratos</groupId>
@@ -26,53 +27,53 @@
         <version>4.1.0-SNAPSHOT</version>
     </parent>
 
-	<modelVersion>4.0.0</modelVersion>
-	<artifactId>org.apache.stratos.kubernetes.client</artifactId>
-	<packaging>bundle</packaging>
-	<name>Apache Stratos - Kubernetes API Java Client</name>
-	<description>A Java client library written for Kubernetes API</description>
-	<url>http://apache.org</url>
-	
-	<properties>
-	    <kubernetes.api.endpoint>http://localhost:8080/api/v1beta1/</kubernetes.api.endpoint>
-	    <docker.image>gurpartap/redis</docker.image>
-  	</properties>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>org.apache.stratos.kubernetes.client</artifactId>
+    <packaging>bundle</packaging>
+    <name>Apache Stratos - Kubernetes API Java Client</name>
+    <description>A Java client library written for Kubernetes API</description>
+    <url>http://apache.org</url>
 
-	<dependencies>
-		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>commons-lang3</artifactId>
-			<version>3.1</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.httpcomponents.wso2</groupId>
-			<artifactId>httpcore</artifactId>
-			<version>4.3.0.wso2v1</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.httpcomponents.wso2</groupId>
-			<artifactId>httpclient</artifactId>
-			<version>4.2.5.wso2v1</version>
-		</dependency>
-		<dependency>
-			<groupId>com.google.code.gson</groupId>
-			<artifactId>gson</artifactId>
-			<version>2.2.4</version>
-		</dependency>
-		<dependency>
-			<groupId>commons-logging</groupId>
-			<artifactId>commons-logging</artifactId>
-		</dependency>
-		<dependency>
-                <groupId>junit</groupId>
-                <artifactId>junit</artifactId>
-                <scope>test</scope>
-      	</dependency>
-	</dependencies>
+    <properties>
+        <kubernetes.api.endpoint>http://localhost:8080/api/v1beta1/</kubernetes.api.endpoint>
+        <docker.image>gurpartap/redis</docker.image>
+    </properties>
 
-	<build>
-		<plugins>
-			<plugin>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents.wso2</groupId>
+            <artifactId>httpcore</artifactId>
+            <version>4.3.0.wso2v1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents.wso2</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.2.5.wso2v1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.2.4</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
                 <extensions>true</extensions>
@@ -84,44 +85,44 @@
                     </instructions>
                 </configuration>
             </plugin>
-		</plugins>
-	</build>
-	
-	<profiles>
-	<profile>
-        <id>unit</id>
-        <activation>
-            <activeByDefault>true</activeByDefault>
-        </activation>
-        <build>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-surefire-plugin</artifactId>
-                    <configuration>
-                        <groups>org.apache.stratos.kubernetes.client.UnitTests</groups>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </build>
-    </profile>
-    <profile>
-        <id>live</id>
-        <build>
-            <plugins>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-surefire-plugin</artifactId>
-                    <configuration>
-                        <groups>org.apache.stratos.kubernetes.client.LiveTests</groups>
-                        <systemPropertyVariables>
-                    		<kubernetes.api.endpoint>${kubernetes.api.endpoint}</kubernetes.api.endpoint>
-                    		<docker.image>${docker.image}</docker.image>
-                  		</systemPropertyVariables>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </build>
-    </profile>
-  </profiles>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>unit</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <groups>org.apache.stratos.kubernetes.client.UnitTests</groups>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>live</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <configuration>
+                            <groups>org.apache.stratos.kubernetes.client.LiveTests</groups>
+                            <systemPropertyVariables>
+                                <kubernetes.api.endpoint>${kubernetes.api.endpoint}</kubernetes.api.endpoint>
+                                <docker.image>${docker.image}</docker.image>
+                            </systemPropertyVariables>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
 </project>

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c4bec76/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
index ed71728..dc068c2 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
@@ -49,11 +49,11 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
     }
 
     @Override
-    public void createPod(String podId, String podName, String dockerImage, List<Integer> containerPorts)
+    public void createPod(String podId, String podName, String dockerImage, List<Port> ports)
             throws KubernetesClientException {
         if (log.isInfoEnabled()) {
-            log.info(String.format("Creating pod: [pod-id] %s [pod-name] %s [docker-image] %s [container-ports] %s",
-                    podId, podName, dockerImage, containerPorts));
+            log.info(String.format("Creating pod: [pod-id] %s [pod-name] %s [docker-image] %s [ports] %s",
+                    podId, podName, dockerImage, ports));
         }
 
         // Create pod definition
@@ -76,7 +76,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
         Container containerTemplate = new Container();
         containerTemplate.setName(podName);
         containerTemplate.setImage(dockerImage);
-        containerTemplate.setPorts(convertIntPortListToPortList(containerPorts));
+        containerTemplate.setPorts(ports);
         containerTemplate.setImagePullPolicy(KubernetesConstants.POLICY_PULL_IF_NOT_PRESENT);
 
         manifest.addContainer(containerTemplate);
@@ -137,9 +137,9 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
             PodList result = gson.fromJson(content, PodList.class);
 
             List<Pod> podList = new ArrayList<Pod>();
-            if((result != null) && (result.getItems() != null)) {
-                for(Pod pod : result.getItems()) {
-                    if(pod != null) {
+            if ((result != null) && (result.getItems() != null)) {
+                for (Pod pod : result.getItems()) {
+                    if (pod != null) {
                         podList.add(pod);
                     }
                 }
@@ -171,7 +171,8 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 
             if (response.getStatusCode() != HttpStatus.SC_ACCEPTED &&
                     response.getStatusCode() != HttpStatus.SC_OK) {
-                String msg = String.format("Could not create pod: [pod-id] %s [message] %s", pod.getId());
+                String msg = String.format("Could not create pod: [pod-id] %s [message] %s", pod.getId(),
+                        response.getKubernetesResponse().getMessage());
                 log.error(msg);
                 throw new KubernetesClientException(msg);
             }
@@ -187,7 +188,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
     @Override
     public void deletePod(String podId) throws KubernetesClientException {
         try {
-            if(log.isInfoEnabled()) {
+            if (log.isInfoEnabled()) {
                 log.info(String.format("Deleting pod: [pod-id] %s", podId));
             }
 
@@ -210,7 +211,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
                 throw new KubernetesClientException(message);
             }
 
-            if(log.isInfoEnabled()) {
+            if (log.isInfoEnabled()) {
                 log.info(String.format("Pod deleted successfully: [pod-id] %s", podId));
             }
         } catch (KubernetesClientException e) {
@@ -271,7 +272,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
             ReplicationControllerList controllerList = gson.fromJson(content, ReplicationControllerList.class);
 
             List<ReplicationController> replicationControllers = new ArrayList<ReplicationController>();
-            if((controllerList != null) && (controllerList.getItems() != null)) {
+            if ((controllerList != null) && (controllerList.getItems() != null)) {
                 for (ReplicationController replicationController : controllerList.getItems()) {
                     if (replicationController != null) {
                         replicationControllers.add(replicationController);
@@ -288,13 +289,13 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 
     @Override
     public void createReplicationController(String replicationControllerId, String replicationControllerName,
-                                            String dockerImage, List<Integer> containerPorts,
+                                            String dockerImage, List<Port> ports,
                                             EnvironmentVariable[] environmentVariables, int replicas) throws KubernetesClientException {
         try {
             if (log.isInfoEnabled()) {
                 log.info(String.format("Creating replication controller: [replication-controller-id] %s [name] %s " +
-                                "[docker-image] %s [container-ports] %s [replicas] %d", replicationControllerId, replicationControllerName,
-                        dockerImage, containerPorts, replicas));
+                                "[docker-image] %s [ports] %s [replicas] %d", replicationControllerId, replicationControllerName,
+                        dockerImage, ports, replicas));
             }
 
             // Create replication controller
@@ -323,12 +324,12 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
             containerTemplate.setName(replicationControllerName);
             containerTemplate.setImage(dockerImage);
             containerTemplate.setImagePullPolicy(KubernetesConstants.POLICY_PULL_IF_NOT_PRESENT);
-            if(environmentVariables != null) {
+            if (environmentVariables != null) {
                 containerTemplate.setEnv(environmentVariables);
             }
 
             // Set container ports
-            List<Port> ports = convertIntPortListToPortList(containerPorts);
+//            List<Port> ports = convertIntPortListToPortList(portMappings);
             containerTemplate.setPorts(ports);
             manifest.addContainer(containerTemplate);
 
@@ -352,8 +353,8 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 
             if (log.isInfoEnabled()) {
                 log.info(String.format("Replication controller created successfully: [replication-controller-id] " +
-                                "%s [name] %s [docker-image] %s [container-port] %s [replicas] %d",
-                        replicationControllerId, replicationControllerName, dockerImage, containerPorts, replicas));
+                                "%s [name] %s [docker-image] %s [port-mappings] %s [replicas] %d",
+                        replicationControllerId, replicationControllerName, dockerImage, ports, replicas));
             }
         } catch (Exception e) {
             String message = "Could not create replication controller: [replication-controller-id] " + replicationControllerId;
@@ -362,19 +363,6 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
         }
     }
 
-    private List<Port> convertIntPortListToPortList(List<Integer> containerPorts) {
-        List<Port> ports = new ArrayList<Port>();
-        for (int containerPort : containerPorts) {
-            Port port = new Port();
-            port.setContainerPort(containerPort);
-            // A known issue related to setting host port:
-            // https://github.com/openshift/origin/issues/210
-            port.setHostPort(containerPort);
-            ports.add(port);
-        }
-        return ports;
-    }
-
     private void createReplicationController(ReplicationController replicationController)
             throws KubernetesClientException {
 
@@ -460,7 +448,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
             throws KubernetesClientException {
 
         try {
-            if(log.isInfoEnabled()) {
+            if (log.isInfoEnabled()) {
                 log.info("Deleting replication controller: [replication-controller-id] " +
                         replicationControllerId);
             }
@@ -486,7 +474,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
                 throw new KubernetesClientException(message);
             }
 
-            if(log.isInfoEnabled()) {
+            if (log.isInfoEnabled()) {
                 log.info("Replication controller deleted successfully: [replication-controller-id] " +
                         replicationControllerId);
             }
@@ -505,20 +493,21 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 
     @Override
     public void createService(String serviceId, String serviceName, int servicePort,
-                              int containerPort, String publicIp) throws KubernetesClientException {
+                              String containerPortName, String publicIp) throws KubernetesClientException {
         try {
             if (log.isInfoEnabled()) {
                 log.info(String.format("Creating service: [service-id] %s [service-name] %s [service-port] %d " +
-                        "[container-port] %d, [public-ip] %s", serviceId, serviceName, servicePort, containerPort, publicIp));
+                        "[container-port-name] %s, [public-ip] %s", serviceId, serviceName, servicePort,
+                        containerPortName, publicIp));
             }
 
             // Create service definition
             Service service = new Service();
             service.setApiVersion(KubernetesConstants.KUBERNETES_API_VERSION);
-            service.setContainerPort(String.valueOf(containerPort));
-            service.setPort(servicePort);
-            service.setId(serviceId);
             service.setKind(KubernetesConstants.KIND_SERVICE);
+            service.setId(serviceId);
+            service.setPort(servicePort);
+            service.setContainerPort(containerPortName);
             service.setPublicIPs(new String[]{publicIp});
 
             // Set service labels
@@ -537,11 +526,11 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 
             if (log.isInfoEnabled()) {
                 log.info(String.format("Service created successfully: [service-id] %s [service-name] %s [service-port] %d " +
-                        "[container-port] %d, [public-ip] %s", serviceId, serviceName, servicePort, containerPort, publicIp));
+                        "[container-port-name] %s, [public-ip] %s", serviceId, serviceName, servicePort, containerPortName, publicIp));
             }
         } catch (Exception e) {
             String message = String.format("Service created successfully: [service-id] %s [service-name] %s [service-port] %d " +
-                    "[container-port] %d, [public-ip] %s", serviceId, serviceName, servicePort, containerPort, publicIp);
+                    "[container-port-name] %s, [public-ip] %s", serviceId, serviceName, servicePort, containerPortName, publicIp);
             log.error(message, e);
             throw new KubernetesClientException(message, e);
         }
@@ -594,9 +583,9 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
             ServiceList result = gson.fromJson(content, ServiceList.class);
 
             List<Service> serviceList = new ArrayList<Service>();
-            if((result != null) && (result.getItems() != null)) {
-                for(Service pod : result.getItems()) {
-                    if(pod != null) {
+            if ((result != null) && (result.getItems() != null)) {
+                for (Service pod : result.getItems()) {
+                    if (pod != null) {
                         serviceList.add(pod);
                     }
                 }
@@ -651,7 +640,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
             throws KubernetesClientException {
 
         try {
-            if(log.isInfoEnabled()) {
+            if (log.isInfoEnabled()) {
                 log.info(String.format("Deleting service: [service-id] %s", serviceId));
             }
 
@@ -674,7 +663,7 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
                 throw new KubernetesClientException(msg);
             }
 
-            if(log.isInfoEnabled()) {
+            if (log.isInfoEnabled()) {
                 log.info(String.format("Service deleted successfully: [service-id] %s", serviceId));
             }
         } catch (KubernetesClientException e) {
@@ -707,9 +696,9 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
             PodList result = gson.fromJson(content, PodList.class);
 
             List<Pod> podList = new ArrayList<Pod>();
-            if((result != null) && (result.getItems() != null)) {
-                for(Pod pod : result.getItems()) {
-                    if(pod != null) {
+            if ((result != null) && (result.getItems() != null)) {
+                for (Pod pod : result.getItems()) {
+                    if (pod != null) {
                         podList.add(pod);
                     }
                 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c4bec76/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
index 232e1e0..9315379 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
@@ -33,10 +33,10 @@ public interface KubernetesAPIClientInterface {
 	 * @param podId
 	 * @param podName
 	 * @param dockerImage
-	 * @param containerPorts
+	 * @param ports
 	 * @throws KubernetesClientException
 	 */
-	public void createPod(String podId, String podName, String dockerImage, List<Integer> containerPorts)
+	public void createPod(String podId, String podName, String dockerImage, List<Port> ports)
 			throws KubernetesClientException;
 
 	/**
@@ -74,14 +74,14 @@ public interface KubernetesAPIClientInterface {
 	 * @param replicationControllerId
 	 * @param replicationControllerName
 	 * @param dockerImage
-	 * @param containerPorts
+	 * @param ports
 	 * @param replicas
 	 * @throws KubernetesClientException
 	 */
 	public void createReplicationController(String replicationControllerId,
 															 String replicationControllerName,
 															 String dockerImage,
-															 List<Integer> containerPorts,
+															 List<Port> ports,
 															 EnvironmentVariable[] environmentVariables,
 															 int replicas) throws KubernetesClientException;
 
@@ -119,12 +119,12 @@ public interface KubernetesAPIClientInterface {
 	 * @param serviceId
 	 * @param serviceName
 	 * @param servicePort
-	 * @param containerPort
+	 * @param containerPortName
 	 * @param publicIp
 	 * @throws KubernetesClientException
 	 */
 	public void createService(String serviceId, String serviceName, int servicePort,
-								 int containerPort, String publicIp) throws KubernetesClientException;
+								 String containerPortName, String publicIp) throws KubernetesClientException;
 
 	/**
 	 * Get the Service with the given id.

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c4bec76/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
index b077f87..6603b6d 100644
--- a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
+++ b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
@@ -26,33 +26,38 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.kubernetes.client.KubernetesApiClient;
 import org.apache.stratos.kubernetes.client.KubernetesConstants;
 import org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException;
-import org.apache.stratos.kubernetes.client.model.Labels;
-import org.apache.stratos.kubernetes.client.model.Pod;
-import org.apache.stratos.kubernetes.client.model.ReplicationController;
-import org.apache.stratos.kubernetes.client.model.Service;
-import org.junit.*;
+import org.apache.stratos.kubernetes.client.model.*;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import java.net.InetAddress;
+import java.net.Socket;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 
 /**
  * Notes:
- * Initially it would take some time to pull the docker image and create a pod.
- * As a result live test would fail when running for the first time on a fresh
+ * Please ssh into the kubernetes custer and pull the docker image before running
+ * the live tests. Otherwise tests would fail when running for the first time on a fresh
  * kubernetes cluster.
+ *
+ * Caution!
+ * At the end of the tests it will remove all the replication controllers, pods and services
+ * available in the given kubernetes environment.
  */
 @Category(org.apache.stratos.kubernetes.client.LiveTests.class)
 public class KubernetesApiClientLiveTest extends TestCase{
 
     private static final Log log = LogFactory.getLog(KubernetesApiClientLiveTest.class);
 
-    private static final int CONTAINER_PORT = 6379;
+    private static final int CONTAINER_PORT = 80;
+    private static final int PROXY_PORT = 9280;
     private static final int SERVICE_PORT = 4500;
     private static final String DEFAULT_KUBERNETES_MASTER_IP = "172.17.8.100";
-    private static final String DEFAULT_DOCKER_IMAGE =  "gurpartap/redis";
+    private static final String DEFAULT_DOCKER_IMAGE =  "stratos/php:4.1.0-alpha";
     private static final int POD_ACTIVATION_WAIT_TIME = 10000; // 10 seconds
 
     private KubernetesApiClient client;
@@ -88,8 +93,7 @@ public class KubernetesApiClientLiveTest extends TestCase{
         String podId = "stratos-test-pod-1";
         String podName = "stratos-test-pod";
 
-        List<Integer> ports = new ArrayList<Integer>();
-        ports.add(CONTAINER_PORT);
+        List<Port> ports = createPorts();
         client.createPod(podId, podName, dockerImage, ports);
 
         Thread.sleep(2000);
@@ -108,6 +112,16 @@ public class KubernetesApiClientLiveTest extends TestCase{
         log.info("Pod deleted successfully: " + pod.getId());
     }
 
+    private List<Port> createPorts() {
+        List<Port> ports = new ArrayList<Port>();
+        Port port = new Port();
+        port.setName("port-1");
+        port.setContainerPort(CONTAINER_PORT);
+        port.setHostPort(PROXY_PORT);
+        ports.add(port);
+        return ports;
+    }
+
     @Test
     public void testDeletingAnNonExistingPod() {
         try {
@@ -123,8 +137,7 @@ public class KubernetesApiClientLiveTest extends TestCase{
         String replicationControllerName = "stratos-test-rc";
         int replicas = 2;
 
-        List<Integer> ports = new ArrayList<Integer>();
-        ports.add(CONTAINER_PORT);
+        List<Port> ports = createPorts();
         client.createReplicationController(replicationControllerId, replicationControllerName,
                 dockerImage, ports, null, replicas);
 
@@ -164,26 +177,30 @@ public class KubernetesApiClientLiveTest extends TestCase{
         InetAddress address = InetAddress.getByName(new URL(endpoint).getHost());
         String publicIp = address.getHostAddress();
 
-        List<Integer> ports = new ArrayList<Integer>();
-        ports.add(CONTAINER_PORT);
+        List<Port> ports = createPorts();
         client.createPod(podId, podName, dockerImage, ports);
 
         Thread.sleep(2000);
         Pod podCreated = client.getPod(podId);
         assertNotNull(podCreated);
 
-        client.createService(serviceId, serviceName, SERVICE_PORT, CONTAINER_PORT, publicIp);
+        client.createService(serviceId, serviceName, SERVICE_PORT, "port-1", publicIp);
 
         Thread.sleep(2000);
         Service service = client.getService(serviceId);
+        assertNotNull(service);
 
         // test recreation using same id
-        client.createService(serviceId, serviceName, SERVICE_PORT, CONTAINER_PORT, publicIp);
+        client.createService(serviceId, serviceName, SERVICE_PORT, "port-1", publicIp);
 
         Thread.sleep(2000);
         service = client.getService(serviceId);
         assertNotNull(service);
 
+        // test service proxy is accessibility
+        Socket socket = new Socket(publicIp, SERVICE_PORT);
+        assertTrue(socket.isConnected());
+
         client.deleteService(serviceId);
         assertNull(client.getService(serviceId));
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c4bec76/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
index 4c956ce..6127349 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
@@ -128,8 +128,8 @@ public class ObjectConverter {
         for (int i = 0; i < portMappingBeanArray.length; i++) {
             PortMapping portMapping = new PortMapping();
             portMapping.setProtocol(portMappingBeanArray[i].getProtocol());
-            portMapping.setPort(Integer.toString(portMappingBeanArray[i].getPort()));
-            portMapping.setProxyPort(Integer.toString(portMappingBeanArray[i].getProxyPort()));
+            portMapping.setPort(portMappingBeanArray[i].getPort());
+            portMapping.setProxyPort(portMappingBeanArray[i].getProxyPort());
             portMappingArray[i] = portMapping;
         }