public ServerData(String clientType, String versionNumber, String[] defaultHostNames, int[] defaultPorts) {
        if(ParameterValidator.isEmptyString(clientType)) {
            throw new IllegalArgumentException("Client type cannot be empty");
        } else if(ParameterValidator.isEmptyString(versionNumber)) {
            throw new IllegalArgumentException("Version number cannot be empty");
        } else if(ParameterValidator.isEmptyArray(defaultHostNames)) {
            //do't try 
            throw new IllegalArgumentException("Default urls cannot be empty");
        }
        
        m_clientType = clientType;
        m_versionNumber = versionNumber;
        
        // copy the url array, we cannot rely on the object being left alone
        // since the API may be sent outside of the company
        m_defaultHostArray = new String[defaultHostNames.length];
        System.arraycopy(defaultHostNames, 0, m_defaultHostArray, 0, defaultHostNames.length);
        // not try to generate them automatically as this will hide the url 
        // from the application
        
        if (defaultPorts == null || defaultPorts.length == 0) {
            m_defaultPortArray = new int[]{80};
        } else {
            m_defaultPortArray = new int[defaultPorts.length];
            System.arraycopy(defaultPorts, 0, m_defaultPortArray, 0, defaultPorts.length);
        }
    }